Please, to cite this code, use the following bibtex entry:
@article{Malenza25,
title = {Performance Portability Assesment in Gaia},
author = {Giulio Malenza, Valentina Cesare, Marco Edoardo Santimaria, Robert Birke, Alberto Vecchiato, Ugo Becciani, Marco Aldinucci},
year = 2025,
journal = {Transactions on Parallel and Distributed Systems (TPDS)},
doi = {10.1109/TPDS.2025.3591452}
}
Instructions for compilation and execution of the simulator used to test LSQR algorithm for the ESA Gaia mission.
The folder is organized in the following way:
- src -> LSQR algorithm versions
- include -> include files needed to compile the code;
- Makefile -> A Makefile that should be modified to compile the code;
- Makefile.examples -> some examples of Makefile that we used to compile the code on different systems;
You should use gcc>=12.2.0
To run cuda code you can use nvcc >=11.8
NVIDIA compiler
To run hip code you can use hipcc (cuda>=11.7,rocm-5.6)
AMD compiler
To run openmp code you can use nvc++>=23.11
NVIDIA compiler on NVIDIA architecture and AMD clang++>=16.0.0
compiler on AMD architecture
To run sycl code you can use acpp>=23.10.0
AdaptiveCpp compiler
To run cpp pstl code you can use nvc++>=23.11
compiler on NVIDIA architecture and clang++>=18.0.0
compiler on AMD architecture (roc-stdpar)
In the Makefile you need to specify:
- GNUTOOLCHAIN -> path to GCC
- GPUARCH -> gpu architecture
- MPI_HOME -> path to MPI
- GNUTOOLCHAIN -> path to GCC
- KOKKOS_HOME -> path to Kokkos compiler
To compile cuda code: make clean && make cuda -j
To compile hip code: make clean && make hip -j
To compile sycl code: make clean && make sycl -j
To compile openmp code: make clean && make ompG -j
To compile pstl code: make clean && make stdparG -j
In the Makefile you need to specify:
- GNUTOOLCHAIN -> path to GCC
- GPUARCH -> gpu architecture (possible values: gfx90a, gfx908)
- MPI_HOME -> path to MPI
- ROCM_PATH -> path to ROCM
- KOKKOS_HOME -> path to Kokkos compiler
To compile hip code: make clean && make hip -j
To compile sycl code: make clean && make sycl -j
To compile openmp code: make clean && make ompG -j
To compile pstl code: make clean && make stdparG -j
To compile code enabling MPI set USE_MPI=ON, i.e. make cuda USE_MPI=ON
mpirun -np 1 ./GaiaGsrParSim.x -memGlobal 2 -IDtest 0 -itnlimit 100
Here:
- memGlobal specifies approximately how much memory the system occupies in GB
- IDtest 0 specifies that the test, if run up to convergence, reaches the identity solution
- itnlimit specifies the maximum number of iterations run by LSQR. This number is not reached if confergence is reached before.
./GaiaGsrParSim.x -memGlobal 2 -IDtest 0 -itnlimit 100
For reproducibility please refear to REPRODUCIBILITY.md