cancel
Showing results for 
Search instead for 
Did you mean: 

General Discussions

wimpiewest
Adept I

Please help: Optimizing IPOPT for AMD

Good day,

After 12 year of exclusively owning Intel products I recently converted to team red .

I am currently pursuing my postgraduate studies in which I am using Matlab to solve optimal control problems. Matlab uses a MEX file that was compiled to act as an interface to the popular non-linear solver IPOPT. It seems like the performance of the solver is very dependent on the libraries that were used to compile the MEX file. One needs to use an implementation of BLAS and LAPACK that is tailored for AMD hardware.

I am not a developer or computer scientist by trade, so that is why I am turning to the AMD community for help.

Can anyone help me to install IPOPT using libraries that are optimized for AMD processors?

Refer to the following links for more details:

Kind regards

7 Replies

This link seems to have more information and links for IPOPT than the link you posted: Ipopt: Documentation 

 

From the link above:

How to use Ipopt

If desired, the Ipopt distribution generates an executable for the modeling environment AMPL. As well, you can link your problem statement with Ipopt using interfaces for C++, C, Java, or Fortran. Ipopt can be used with most Linux/Unix environments, and on Windows using Msys2/MinGW. In Interfacing your NLP to Ipopt this document demonstrates how to solve problems using Ipopt. This includes installation and compilation of Ipopt for use with AMPL as well as linking with your own code.

Additionally, the Ipopt distribution includes an interface for the R project for statistical computing, see The R Interface ipoptr.

There is also software that facilitates use of Ipopt maintained by other people, among them are:

  • ADOL-C (automatic differentiation)

    ADOL-C facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. It comes with examples that show how to use it in connection with Ipopt.

  • AIMMS (modeling environment)

    The AIMMSlinks project on COIN-OR, maintained by Marcel Hunting, provides an interface for Ipopt within the AIMMS modeling tool.

  • APMonitor

    MATLAB, Python, and Web Interface to Ipopt for Android, Linux, Mac OS X, and Windows.

  • CasADi

    CasADi is a symbolic framework for automatic differentiation and numeric optimization and comes with Ipopt.

  • CppAD (automatic differentiation)

    Given a C++ algorithm that computes function values, CppAD generates an algorithm that computes corresponding derivative values (of arbitrary order using either forward or reverse mode). It comes with an example that shows how to use it in connection with Ipopt.

  • csipopt

    Interfacing Ipopt from .NET languages such as C#, F# and Visual Basic.NET.

  • GAMS (modeling environment)

    The GAMSlinks project on COIN-OR includes a GAMS interface for Ipopt.

  • ifopt

    Modern, light-weight (~1k loc), Eigen-based C++ interface to Ipopt and Snopt.

  • IPyOpt

    Interfacing Ipopt from Python.

  • JuliaOpt

    Julia is a high-level, high-performance dynamic programming language for technical computing. JuliaOpt, is an umbrella group for Julia-based optimization-related projects. It includes the algebraic modeling language JuMP and an interface to Ipopt.

  • MADOPT (Modelling and Automatic Differentiation for Optimisation)

    Light-weight C++ and Python modelling interfaces implementing expression building using operator overloading and automatic differentiation.

  • mexIPOPT

    Matlab (mex) interface to you use Ipopt from Matlab.

  • OPTimization Interface (OPTI) Toolbox

    OPTI is a free Matlab toolbox for constructing and solving linear, nonlinear, continuous and discrete optimization problem and comes with Ipopt, including binaries.

  • Optimization Services

    The Optimization Services (OS) project provides a set of standards for representing optimization instances, results, solver options, and communication between clients and solvers, including Ipopt, in a distributed environment using Web Services.

  • PyIpopt

    An interface to the Python language.

  • Scilab (free Matlab-like environment):

    A Scilab interface is available at http://forge.scilab.org/index.php/p/sci-ipopt.

Not sure if you have already was aware of this website and information or not.

If not, then I suggest you open an Online AMD Service Request (Official AMD SUPPORT) and ask them their opinion or if there is a more appropriate AMD Forum to post your question at: https://www.amd.com/en/support/contact-email-form 

Since it is a technical question mainly answered by Developers may be you might want to ask here for Newcomers to the different Deverloper's AMD Forums: Newcomers Start Here‌ .

Once you get "Whitelisted" you can post at any of the various Developer's AMD Forums in the future.

Thank you for the suggestion. I am aware of the page you posted above, unfortunately it does not specify which libraries are tailored for AMD. I opened a service request, let's see if AMD can advise. I appreciate you input .

Anonymous
Not applicable

Ah I see why you are confused perhaps. Since you will be compiling it yourself all the linux code can be run on whatever system you compile it for obviously.

So linux source files dont have a specific intel or AMD flavour you specify the platform and options your system is running when compiling and it customizes everything perfectly to your PC which is the specific true strength of linux. I doubt there are any packages to make it easier but it wont hurt to search for it in a package manager just in case. I've no idea what package manager you'd use though depending on your OS platform like debian BSD maybe chocolatey might be an option or I think the RPM command maybe works for a lot of things. I havent touched linux in a very long time and I only used it minimally because I couldnt game on it. If the search in a package manager shows there was a packages you need listed, great thats sort of like having installer files for windows that will help you get it installed by typing out the command to the package manager. Otherwise you'll need to manually set the compiler options where you get the source files and tell it what system/CPU to compile it.

For mobile phone software to be compiled you'd maybe say ARM64 or AMD64 in your case then theres usually a bunch of other things to consider but thats maybe the most important to remember. The guides there look like they tell you what to type and everything but in general the linux platform is about being able to literally configure anything and everything to be exactly what your system needs so its better optimized. As such theres usually not an intel or AMD version of anything as that would limit it to only ever run on one type of computer not ALL computers which linux supports. So if you dont know how to use linux or compile things for linux you must rely on a package manager and if its not in the package manager you must find a person who can use linux to type in the things those instructional step by step guides required for you because without basic knowledge of the OS using linux is pretty impossible as you wont have the right permissions for things or be in correct directories/environments or know the right commands to use to find and install what you need. 

If you are in university I suggest you go the computer lab rooms and say "linux software install" and offer somebody like $20 to do it for you. Or else you'll maybe struggle with it for a very long time. Then watch some youtube tutorials on linux OS and learn step by step over time.

Thanks for the reply! I managed to get Linux installed and it already improved performance vs Windows. From reading up on the topic, it seems like OpenBlas might be a bit more optimized for AMD. I will try to compile IPOPT using OpenBlas instead of MKL to see if it makes a difference. Something else I would like to try, but not sure if it is possible, is to use AMD's Blis library (their implementation of BLAS & LAPACK). Will provide feedback on this forum once I start seeing results.

wimpiewest
Adept I

That is a very interesting link, thank you for sharing .

You were right about posting on the developers forum. One of the server gurus replied and gave me some guides to work through. To avoid duplication I will leave the link to the other forum in this post and continue the conversation there.

https://community.amd.com/message/2977887?commentID=2977887#comment-2977887 

It is awesome that the community is so keen to help!