Parallelization
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++ | MPI |
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.