ycollet / coinor-cmake

CMake files for compiling CoinOr projects
GNU Lesser General Public License v3.0
31 stars 9 forks source link

Pardiso from MKL #9

Open econwang opened 5 years ago

econwang commented 5 years ago

Does the ipopt script support Pardiso from MKL? if so, then how to set the options?

many thanks

ycollet commented 5 years ago

I will check on an install of an intel compiler and will answer your question ASAP.

ycollet commented 5 years ago

Sorry for the delay. I installed mkl on my fedora machine and fixed some things related to mkl / pardiso compilation. Now, I am able to build an ipopt executable which really depends on mkl.

$ ldd bin/ipopt 
        linux-vdso.so.1 (0x00007fff0f5d9000)
        libmkl_intel_lp64.so => /opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so (0x00007f4e3cef4000)
        libmkl_gnu_thread.so => /opt/intel/mkl/lib/intel64/libmkl_gnu_thread.so (0x00007f4e3b6a0000)
        libmkl_core.so => /opt/intel/mkl/lib/intel64/libmkl_core.so (0x00007f4e37514000)
        libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x00007f4e374e2000)
        libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f4e374dc000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4e37342000)
        libm.so.6 => /usr/lib64/libm.so.6 (0x00007f4e371be000)
        libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f4e371a3000)
        libc.so.6 => /usr/lib64/libc.so.6 (0x00007f4e36fdd000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f4e3da44000)
        libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f4e36fbb000
econwang commented 5 years ago

Many thanks, I finally get a working version with mkl pardiso linked on Windows. Several issues:

  1. Current cmake script can not detect rand on windows (previous version can, but I do not remember the version number), I just activate it with set(HAVE_RAND 1)
  2. In /ipopt/ipopt/cmakelists.txt, there are several add_definitions were mistyped as add_definition
  3. By turn on IPOPT_HAS_PARDISO_MKL, should turn off IPOPT_ENABLE_INEXACT, source https://list.coin-or.org/pipermail/ipopt/2014-November/003878.html
  4. It seems that using pardiso from mkl conflicts with dynamic linear solver loader, since both use the same option name `pardiso', I also turn off the loader
ycollet commented 5 years ago

Point 2 is fixed. For point 3, I do not totally agree:

However,  **IpIterativePardisoSolverInterface.cpp should only be compiled if configuring with --enable-inexact-solver**, in which case configure should also have figured that your Pardiso lib does not fit. Thus, 
either there is a bug in configure (workaround by not using --enable-inexact-solver), or you use some selfmade buildsystem, which isn't supported.

I will try to investigate a little more on this point.

Point 1 is fixed (a residual libm for linux while testing for symbols). std::isnan still not detected but this is because of the microsoft implementation of std::isnan .. to be investigated).

I will check which variable to activate for Pardiso and for the other solvers for Point 4