advice needed to port to MKL

advice needed to port to MKL

We want to port a former project that was written in Fortran and using imsl_dll.dll into C++, and are thinking about using the Math Kernel Library.

Is the Math Kernel Library correct for us? Are there any particular aspects to which we should pay special attention? (functionality coverage, performance...) We used in the old project mostly fft functions on 2D and 3D matrices (c_fast_dft and z_fast_dft), dcmplx / cmplx, plus linear least square problem function.  What are the equivalent functions in the MKL?
In addition we will need in the new project spline functions.

We are not sure which version of the imsl was used in the old project, we only possess the source code of the project, and no fortran compiler, only the run-time imsl_dll.dll, which unfortunately does not contain version information. But the dependency libraries are as follows (for Windows x64):
imsl_dll.dll 26,8 MB
libifcoremd.dll v.
libmmd.dll v.
libifportmd.dll v.
libguide40.dll v. 4.0.2007.313

Thanks in advance

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

You'd need to look up the functionality of the IMSL functions (there appear to be versions of the manual on line) and compare with the MKL documentation to judge the feasibility of conversion.
My own suggestion would be to make the change using ifort before committing to the C++ conversion, and then to make the changes incrementally. It looks feasible; the MKL functions may be called according to C header files as well as in accordance with Fortran USE declarations.
The specific libraries you mention were last used in Intel 10.0 compilers, but current compilers include upward compatible ones.

Yes a step by step change is probably the best way to investigate. As far as I can see from the docs the functionality that we use is supported by both the imsl and the Math Kernel Library. But we are unsure about the performance, and if anyone has some experience in this area we would appreciate any info.

MKL usually lives up to its claim of performance at least equal to other libraries, including use of lower level optimizations where there is sufficient demand. There is a list of which functions are planned for parallelization.
IMSL uses MKL in some cases, when you would expect it to perform nearly as well as MKL. In other cases, you might expect IMSL to give you just the performance produced by the Fortran compiler, probably not parallelized. I don't think IMSL will give you detailed information on this.
If you were to perform detailed performance testing of your application and could show that MKL didn't give the best achievable performance, if you were willing to post the entire reproducer in an issue on your, there's a fair chance of getting expert attention to the question.
Evidently, the advantage MKL can give by parallelization inside its functions depends on the characteristics of your application and hardware platform, and whether you apply parallelism outside the MKL or IMSL calls.

OK thanks for the info.

Leave a Comment

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