For problems with CPU-time intensive objective functions (and/or constraints), MIDACO offers an efficient parallelization strategy. MIDACO allows to execute several function evaluation in parallel.  Running MIDACO in parallel mode is recommended, if a single function evaluation takes more than a specific time, which varies based on the given CPU-system, the programming language and parallelization approach (see User Manual Section 6.2). Running MIDACO in parallel mode is straight forward and some example templates for various languages and approaches are listed below.


Language Parallelization Approach
Matlab parfor
Julia Multi-Threading
Python multiprocessing
Python mpi4py
Python Spark
Python Dask
C/C++ OpenMP
C/C++ GPGPU (avail. on request)
C# Parallel.ForEach
Fortran OpenMP
Fortran MPI
Fortran GPGPU
R dopar
Java Fork/Join


Screenshot of MIDACO Massive Parallelization on a 32 Quadcore-CPU Spark cluster


Note on MIDACO's parallelization (scale-up) effectiveness

In Schlueter and Munetomo [17]  it was numerically demonstrated that MIDACO exhibits a nearly linear scale-up behavior for parallelization factors up to 300. This means that the MIDACO parallelization is as effective as possible. For low parallelization factors the observed speed-up was linear. This means that for example for a parallelization factor of P=8 the MIDACO algorithm will run 8 times faster than in serial mode (in case the problem is CPU-time intensive and thus the dominating time factor). For a parallelization factor of P=300 the MIDACO algorithm still showed a potential speed-up of above 150 times. This nearly linear behavior of the scale-up behavior implies that MIDACO parallelization will remain effective even for hundreds and thousands of threads/cores.