Disabling threading in CPLEX
Since version 12.2, CPlex defaults to multithreading its executables.
This is a problem for several reasons and multithreading should be disabled in almost all cases. Not only does Condor handle single threaded jobs much better, but they will usually produce better performance.
We've modified the default environment in several places but it doesn't seem to work consistently. Thus users need to manually add a line to their C/C++ programs before compilation to turn off threading.
The C function call to disable threading should be put at the beginning of main():
CPXsetintparam(env, CPXPARAM_Threads, 1);
The C++ call to disable threading (assuming your IloCplex object is called 'cplex'):
cplex.setParam(IloCplex::IntParam::Threads,1);
In an AMPL batch file the command to turn off multithreading is:
option cplex_options 'threads=1';
Ampl, Cplex and Condor
An example of how to use cplex with ampl in a condor job can be found here:
/opt/cplex/latest/examples/src/ampl/ampl_cplex
It includes a sample model and data file as well as the necessary ampl run script and condor cmd files.
Copy the "ampl_cplex" folder to your home directory but before submitting to condor make sure to edit the .cmd file and replace the "username" in the log and notify_user entries with your login name.
Location of example CPLEX Code
An example scripts are located here :
/opt/cplex/latest/cplex/examples/
This directory includes a sample data file, source code and makefile necessary run test code
Copy source code, data files and makefile to your home directory. Modify makefile to run your choosen script
Example CPLEX Makefile
This example makefile is for a C program :
SYSTEM = x86-64_linux LIBFORMAT = static_pic #------------------------------------------------------------ # # When you adapt this makefile to compile your CPLEX programs # please copy this makefile and set CPLEXDIR and CONCERTDIR to # the directories where CPLEX and CONCERT are installed. # #------------------------------------------------------------ CPLEXDIR = /opt/cplex/latest/cplex CONCERTDIR = /opt/cplex/latest/concert # --------------------------------------------------------------------- # Compiler selection # --------------------------------------------------------------------- CC = gcc -O0 # --------------------------------------------------------------------- # Compiler options # --------------------------------------------------------------------- COPT = -m64 -fPIC -fno-strict-aliasing # --------------------------------------------------------------------- # Link options and libraries # --------------------------------------------------------------------- CPLEXBINDIR = $(CPLEXDIR)/bin/$(BINDIST) CPLEXJARDIR = $(CPLEXDIR)/lib/cplex.jar CPLEXLIBDIR = $(CPLEXDIR)/lib/$(SYSTEM)/$(LIBFORMAT) CONCERTLIBDIR = $(CONCERTDIR)/lib/$(SYSTEM)/$(LIBFORMAT) # For dynamic linking CPLEXBINDIR = $(CPLEXDIR)/bin/$(SYSTEM) CPLEXLIB = cplex$(dynamic:yes=1290) run = $(dynamic:yes=LD_LIBRARY_PATH=$(CPLEXBINDIR)) CLNDIRS = -L$(CPLEXLIBDIR) $(dynamic:yes=-L$(CPLEXBINDIR)) CLNFLAGS = -l$(CPLEXLIB) -lm -lpthread -ldl all: make all_c execute: all make execute_c CONCERTINCDIR = $(CONCERTDIR)/include CPLEXINCDIR = $(CPLEXDIR)/include CFLAGS = $(COPT) -I$(CPLEXINCDIR) #------------------------------------------------------------ # make all : to compile the examples. # make execute : to compile and execute the examples. #------------------------------------------------------------ all_c: lpex3 execute_c: lpex3 $(run) ./lpex3 # ------------------------------------------------------------ clean : /bin/rm -rf *.o *~ *.class /bin/rm -rf lpex3 /bin/rm -rf *.mps *.ord *.sos *.lp *.sav *.net *.msg *.log *.clp # ------------------------------------------------------------ # # The examples # lpex3: lpex3.o $(CC) $(CFLAGS) $(CLNDIRS) -o lpex3 lpex3.o $(CLNFLAGS) lpex3.o: lpex3.c $(CC) -c $(CFLAGS) lpex3.c -o lpex3.o # Local Variables: # mode: makefile # End:
Modify the makefile located in "/opt/cplex/latest/cplex/examples/x86-64_linux/static_pic/Makefile"