Cinequbo

Cinequbo uses a combination of OpenMP, MPI and CUDA to accelerate the computation of solutions to a QUBO problem using the Simulated Annealing method.
Initially, the number of MPI processes is decided, which independently run copies of the solver each with its own number of OpenMP processes. It tends to be preferred to use one MPI pr
ocess for each individual node.
For each OpenMP process (OMP_NUM_THREADS) and for each MPI process (Np), OMP_NUM_THREADS*Np initial guesses are initialized whose energy is calculated using matrix multiplications perf
ormed on GPUs (parameter NGPUS)
The Simulated Annealing adopted consists of two loops, an external one controlled by temperature (parameters T, T_END and ALPHA) and an internal one controlled by the NUM_READS parameter. At the end of each inner loop (which is then repeated until the temperature T decreased by ALPHA reaches below the predefined threshold value T_END) the OpenMP threads exchange the results obtained and decide how many (SAVED_SOLS) and which solutions to keep before starting a new iteration.
At the end of all iterations, the MPI processes compare the results and select the best solutions (OUT_SOLS)

Version: 1.0

Availability: LEONARDO, GALILEO100

Official web site: https://gitlab.hpc.cineca.it/qclab/cinequbo

Help and Documentation:

module load profile/quantum

module load cinequbo