问题
I want to compile this C code with MKL, but when I run it using the command mpicc -mkl mkl_thread.c
, it gives me an error about an unrecognized command line option -mkl
. When I run it as mpicc mkl_thread.c -o mkl_thread
, it gives a different error, saying "undefined reference to `MKL_Set_Num_Threads'". I don't know how I can run it with or link with MKL.
My code is:
define NUM_PROCS 5
int main (int argc, char ** argv)
{
int threads_per_proc[NUM_PROCS] = { 1,2 ,3, 4,5 };
int rank;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
// ...
// Signal an error if rank >= 5
// ...
mkl_set_num_threads(threads_per_proc[rank]);
MPI_Finalize();
}
回答1:
-mkl
is an Intel specific option which can not be recognized by mpicc
.
For non-Intel compiler, you could specify the link options explicitly.
$ mpicc mkl_thread.c -o mkl_thread \
-I$(MKLROOT)/include -L$(MKLROOT)/lib/intel64 \
-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core \
-liomp5 -lpthread -lm
Please refer to Intel® Math Kernel Library Link Line Advisor for other link options.
来源:https://stackoverflow.com/questions/14562506/how-to-link-mkl-with-mpi