Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pardiso from MKL #9

Open
econwang opened this issue Jan 7, 2019 · 4 comments
Open

Pardiso from MKL #9

econwang opened this issue Jan 7, 2019 · 4 comments

Comments

@econwang
Copy link

econwang commented Jan 7, 2019

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

many thanks

@ycollet
Copy link
Owner

ycollet commented Jan 7, 2019

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

@ycollet
Copy link
Owner

ycollet commented Jan 17, 2019

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
Copy link
Author

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
Copy link
Owner

ycollet commented Jan 18, 2019

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants