I am trying to compile my code with mkl. I was using intel c++ on linux compiler using -mkl=parallel option.
From the documentation, I understand this does not link with the ilp64 libraries but only with the lp64 library. I have to specify manually the libraries. Am I correct? I was thinking that using the parameter ilp64 when setting up the environnments variables using intel mkl batch file would tell the compiler to use the ilp64 version of the library. It looks it is not the case. In this case, I do not understand why there is a ilp64 parameter for the batch file. Am I missing something? This is very confusing and I lost several days to figure it out.
You could use 64bit integer for interface layer while you are using parallel threading. If you are using -mkl=parallel, you have at least select one method, openMP/ TBB. Compile with option -DMKL_ILP64, and link with library for libmkl_intel_ilp64 whatever you are using icc/gcc. Arthura provide a good solution using MKL advisor to help you generate compiling & linking line quickly. Hope it would be useful to you.
Actually, in my experience, using -mkl=parallel, selecting OPENMP, using DMKL_ILP64 results automatically in linking with the 32 bits integer library even if the library libmk_intel_ilp64 is specified. I finally used the link advisor and it works perfectly now. But, it took me one week to understand what was my problem. Maybe somebody else will get into the same issue. It is why I wrote this post. Also, one question. When running the script mklvars.sh to define the environment variables, one option is ilp64. The documentation is station this is the "Programming interface (LP64 or ILP64)". I was confused and assumed falsly that this was enough to specify to link with the ilp64 library since I used the ilp64 parameter. Why is this parameter present if it is not used to chose the library to link with.