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
This link seems to have more information and links for IPOPT than the link you posted: Ipopt: Documentation
From the link above:
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.
MATLAB, Python, and Web Interface to Ipopt
for Android, Linux, Mac OS X, and Windows.
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
.
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
.
Modern, light-weight (~1k loc), Eigen-based C++ interface to Ipopt
and Snopt.
Interfacing Ipopt
from Python.
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.
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.
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.
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 .
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.
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!