Originally posted by: Phoebe_Qi
Daniel:
Hi.
I have two things to discuss with you.
First, as I mentioned, I am using the HPC resource in my univerisity to do networking researches.
Since my optimization model is complex, I would like to try this distributed parallel mode of CPLEX using open MPI.
I talked with the computational scientist who manages the HPC resource about how amazing CPLEX is for operational research, and this distributed parallel feature is a perfect fit for distributed memory HPC.
Since CPLEX has academic initiative program and the HPC resources can only be accessed by academic researchers, therefore,
he would like to discuss with you to see if IBM is interested in letting the university
to set up the distributed parallel CPLEX with OpenMPI as a module in our HPC resource ,
then researchers in Operational Research can use it to solve large scale optimization problems.
We have both distributed-memory and shared-memory systems, here is a link to the HPC resources and the software list that is now available to our researchers.
I am now using "Blueridge" , which is a distributed-memory 408-node Cray CS-300 cluster.
If you are interested, can I send an email that includes you and the computational scientist in my university, so that we can set up something?
Second,
I have some questions about how to modify my conventional local-machine CPLEX c++ program and makefile.
I studied through the documentations about using Open MPI with distributed parallel MPI,
http://www-01.ibm.com/support/knowledgecenter/SSSA5P_12.6.1/ilog.odms.cplex.help/CPLEX/UsrMan/topics/parallel_optim/distribMIP/06_openMPI.html
According to my understanding, the modification process should be
1. add c++ code to read-in configuration file.
cplex.readCopyVMConfig(vmconfig);
2. change the makefile to link with -lcplexdistmip and -ldl
3. set the enviroment variable to run the application: LD_LIBRARY_PATH=(shared bin directory of CPLEX):(path to the OpenMPI library)
Now I have the following questions:
1. In the example makefile CPLEX provides (I attached it), it shows how to run the application with process transport:
"
DMEXEC = LD_LIBRARY_PATH=../../../bin/x86-64_linux:$$LD_LIBRARY_PATH
dm_execute_cpp_process: $(DM_CPP_EX)
$(DMEXEC) ./ilodistmipex1 $(EXDATA)/process.vmc $(EXDATA)/p0033.mps
"
However, if I want to run the application with open MPI, how should the LD_LIBRARY_PATH be used to run the executable file?
2. Since we submit the job with shell script, I do not know which machines are gonna be assigned to me.
Therefore, I cannot set up the VMC file in advance, you replied last time about using "cplex.copyVMConfig("mpi");"
so that cplex can figure out everything.
Does that mean I don't have to read in a vmc file using "cplex.readCopyVMConfig(vmconfig);" ?
3. what does the "rank" property in the VMC file mean? if I let cplex generate the VMC file, is the rank also gonna be assigned properly?
there is a script to specify the master and workers, do I need to do this if I use the C++ API and let the cplex generate the VMC file?
I apologize in advance that since I have never worked with CPLEX remote object and open MPI, I have lots of questions about it.
Thanks for your patience and help, I really appreciate it.
#CPLEXOptimizers#DecisionOptimization