#PROBLEM PARAMETERS
NUMFFT=8000
FFTSIZE=256

#ENVIRONMENT VARIABLES (SEE RUN-MIC and RUN-CPU)
CPU_ENV=OMP_NUM_THREADS=28,2 OMP_SCHEDULE=static
MIC_ENV=OMP_NUM_THREADS=20,12 OMP_SCHEDULE=static


CXX = icpc
CXXFLAGS=-qopenmp -mkl
CPUFLAGS = $(CXXFLAGS) -xhost
MICFLAGS = $(CXXFLAGS) -mmic
OPTFLAGS = -qopt-report -qopt-report-file=$@.optrpt

CPUOBJECTS = mklfft2D.o
MICOBJECTS = mklfft2D.oMIC

TARGET=app-CPU app-MIC


.SUFFIXES: .o .cc .oMIC

all: $(TARGET) instructions

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

%-MIC: $(MICOBJECTS)
	$(info )
	$(info Linking the MIC executable:)
	$(CXX) $(MICFLAGS) -o $@ $(MICOBJECTS)

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

.cc.oMIC:
	$(info )
	$(info Compiling a MIC object file:)
	$(CXX) -c $(MICFLAGS) $(OPTFLAGS) -o "$@" "$<"

instructions: 
	$(info )
	$(info TO EXECUTE THE APPLICATION: )
	$(info "make run-cpu" to run the application on the host CPU)
	$(info "make run-mic" to run the application on the coprocessor)
	$(info )

run-cpu: app-CPU
	$(CPU_ENV) OMP_NESTED=1 MKL_DYNAMIC=false OMP_PROC_BIND=spread,close OMP_PLACES=threads KMP_HOT_TEAMS_MODE=1 KMP_HOT_TEAMS_MAX_LEVEL=2 OMP_MAX_ACTIVE_LEVELS=2 ./app-CPU $(FFTSIZE) $(FFTSIZE) $(NUMFFT)

run-mic: app-MIC
	scp app-MIC mic0:~/
	ssh mic0 LD_LIBRARY_PATH=$(MIC_LD_LIBRARY_PATH) $(MIC_ENV) OMP_NESTED=1 MKL_DYNAMIC=false OMP_PROC_BIND=spread,close OMP_PLACES=threads KMP_HOT_TEAMS_MODE=1 KMP_HOT_TEAMS_MAX_LEVEL=2 OMP_MAX_ACTIVE_LEVELS=2 ~/app-MIC $(FFTSIZE) $(FFTSIZE) $(NUMFFT)

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

