I would like to know the following:

0) Where can I find a detailed info about each dll or lib.
1) Are there speed diferences if using DLLs or Libs?
2) If I want to link BLAS to C++ what lib should I use?
3) Could you expose the Cholesky factors in Pardiso so that the solve for each vector can be done step by step by the user?
4) Documentation for Pardiso is "sparse"... could there be any way to have more information?
5)Is there any way to make PARDISO out of core ?
6) Can you include ARPACK in MKL in a future release?


7 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Your questions are good ones and I will try to answer them as thoroughly as possible. Obviously you are a C programmer since your indexing started with "0" where a Fortran programmer would have started the list with "1.":-)

There isn't detail information about each library or dll, partly because that data should not be necessary. Let me explain the structure and you may then agree. On Windows, there are two interface libraries for static linking, one of which needs to be linked into your program depending on how your program is compiled. If you are using CVF, you would most likely use mkl_s.lib. If you use the Intel compilers or Microsoft VC++ you would most likely use mkl_c.lib.

The reason I say "most likely" is that you can instruct the compiler to use different interfaces than the default.

CVF call functions with decorated names like foo@40, were 40 is the number of bytes needed to pass the parameters. This interface is identical to stdcall except in how it passes strings. mkl_s.lib matches this interface (the "s" stands for stdcall, but it isn't quite right because of the parameter passing issue).

The Intel C++ and Fortran compilers and the Microsoft VC++ compiler use the cdecl interface by default for Fortran and C functions and mkl_c.lib should be used. Here the "c" stands for cdecl.

But all of these compiler allow you to change the interfaces of the functions under the control of compile line options. For instance, with the Intel Fortran compiler adding the switch /iface:default will produce interfaces compatible with the CVF compiler.

On Windows the interface libraries include instructions to the linker to link in the other libraries. You need to have the library path included in your linking options and the linker will automatically link in the functions needed from those libraries.

I list below the other libraries (from MKL 7.0 beta)and their contents below:

  • mkl_[c,s]_dll.lib - cdecl and CVF static interfaces to DLLs
  • mkl_lapack.lib - LAPACK, processor independent code
  • mkl_ia32.lib - processor dependent code which dynamically selects correct binaries at run time based on what processor code is running on.
  • mkl_solver.lib - direct sparse solver binaries. May be folded in to other libraries in future.
  • libguide.lib - threading library

The list for the DLLs is similar except that a specific processor will cause a processor-specific DLL to be loaded. Also, to reduce somewhat the footprint of LAPACK and because most of the time only single precison or double precision LAPACK routines would be included in an application, separte DLLs are created for each precision.

1. There will generally be no significant speed differences between statically and dynamically linked programs. If you call a single, simple function with a small data set, the cost of loading the DLL will favor static linking, but in any realistic situation the differences should be small.

2. Linking the BLAS from C++ has two approaches. First of all you should include mkl.h which will pull in a lot of additional include files. These files include declaring the functions to be extern "C" if C++ is being used.

If you want to make life e
asy for yourself, I would suggest looking at using the cblas interface. These interfaces allow you to forget about Fortran/C issues in paramter passing and also help take care of the differences in how data is stored between the two languages.

3. We are looking at ways to make the DSS more useful. We would probably want to increase the functionality of Pardiso rather than expose the factors.

4. MKL 7.0 will have better documentation on the DSS.

5. Out-of-core: this is an interesting request. Is this because you want to solve a problem that is larger than 32-bit addressing will allow or to save memory costs?

6. We have had at least one other request of ARPACK. Of course, you can build ARPACK and link in MKL for the LAPACK and BLAS portions of the software to get most of the advantages that an MKL-suppied version of ARPACK would offer.

Thanks for raising these interesting points.


IMSL 5, part of IVF 8 Pro, uses MKL for SMP. It ships with mkl_c.lib and mkl_c_dll.lib but not mkl_s.lib and mkl_s_dll.lib. It's documentation mentions almost nothing about MKL. Do you have any details on the relation between IMSL 5 and MKL?

Gerry T.

MKL is used by many software vendors. For libraries like IMSL or NAGLIB linking must be done with the user's program so for the product to use the library (MKL) it must be shipped with the vendor's product. That IMSL is shipping only the mkl_c versions of the library says that their library has been compiled with the cdecl interface options instead of the default CVS compilation options.

Libraries like this tend not to do processor-specific optimizations and historically have used vendor libraries especially for the BLAS. IMSL is following that practice with the inclusion of MKL with their product.



I am looking at an Open source FEA solver Calculix and during the study I found that it has an option of using Pardiso solver. During my furtehr search I found that I will need Intel MKL libraries and Pardiso solver comes with it. I noticed that there is 30 day trial version for Intel Parallel studio XE which I believe contains Intel MKL and Pardiso solver. Before buying the solver I was thinking of trying this trial version to see if I am able to compile it with Calculix and also if it helps me in solving some of the finite element problems.

I will appreciate if any one can let me know if I am looking at the right software and also if 30 day trial version will be good test to see it can be compiled with Calculix.



I do not know anything about Calculix. The trial version of MKL should be sufficient for your purposes, if you have one of the  compilers known to work with MKL. Note that you will only be able to do command-line development, even if you download the evaluation version of Parallel Studio, unless you already have Visual Studio installed.

Hi Ajay, 

Yes, please try MKL eval version first by click the needed version in

After install, there is a ready pardiso sample (code, input matrix A and makefile) in C:\Program Files (x86)\Intel\Composer XE 2013 SP1\mkl\examples\*.zip  => solverc or solverf .

You may create a new post if any further usage issue, with title "Calculix and MKL xxxx", thus more developers may share their experience on this. 

Best Regards,

Ying H.

Intel MKL Consulting Engineer 

Leave a Comment

Please sign in to add a comment. Not a member? Join today