# MODIFY THESE PARAMETERS TO OPTIMIZE THE CALCULATION:
KMP_AFFINITY=compact,1

# END OF PARAMETERS TO MODIFY
CXX = icpc
CXXFLAGS=-qopenmp -mkl
CPUFLAGS = $(CXXFLAGS) -xhost
OPTFLAGS = -qopt-report -qopt-report-file=$@.optrpt

CPUOBJECTS = dgemm.o

TARGET=dgemm-CPU
CXX=icpc

.SUFFIXES: .o .cc

all: $(TARGET) instructions

%-CPU: $(CPUOBJECTS)
	$(info )
	$(info Linking the CPU executable:)
	$(CXX) $(CPUFLAGS) -o $@ $(CPUOBJECTS)

.cc.o:
	$(info )
	$(info Compiling a CPU object file:)
	$(CXX) -c $(CPUFLAGS) $(OPTFLAGS) -o "$@" "$<"

instructions: run-c run-R run-c-AO run-R-AO
	$(info )

run-c: dgemm-CPU
	$(info )
	$(info TO EXECUTE THE C++ APPLICATION ON CPU, USE THE FOLLOWING COMMAND: )
	$(info OMP_NUM_THREADS=... KMP_AFFINITY=... ./dgemm-CPU)
	$(info )

run-R:
	$(info )
	$(info TO EXECUTE the R APPLICATION ON CPU, USE THE FOLLOWING COMMAND: )
	$(info OMP_NUM_THREADS=... KMP_AFFINITY=... R -q -f dgemm.R)
	$(info )

run-c-AO: dgemm-CPU
	$(info )
	$(info TO EXECUTE THE C++ APPLICATION WITH AUTOMATIC OFFLOAD, USE THE FOLLOWING COMMAND: )
	$(info OMP_NUM_THREADS=... KMP_AFFINITY=... MIC_KMP_AFFINITY=... MKL_MIC_ENABLE=1 ./dgemm-CPU)
	$(info )

run-R-AO:
	$(info )
	$(info TO EXECUTE the R APPLICATION ON WITH AUTOMATIC OFFLOAD, USE THE FOLLOWING COMMAND: )
	$(info OMP_NUM_THREADS=... KMP_AFFINITY=... MIC_KMP_AFFINITY=... MKL_MIC_ENABLE=1 R -q -f dgemm.R)
	$(info )

clean: 
	rm -f $(CPUOBJECTS) $(TARGET) *.optrpt

