Hi there,
I am working with pledac on the TRUST project. We experience a nvc++ compiler crash (“TERMINATED by signal 11”) when trying to use the OpenMP target backend from the Kokkos library.
Could you help ?
Here are the steps to reproduce:
- Cuda 11.4.4, NVidia driver 470.199.02, OS: Ubuntu 20.04
- NVHPC SDK version 23.7
- download, compile and install Kokkos (GitHub - kokkos/kokkos: Kokkos C++ Performance Portability Programming EcoSystem: The Programming Model - Parallel Execution and Memory Abstraction) version 4.1.00 with following cmake options
cmake <kokkos_SRC> -DCMAKE_CXX_COMPILER=$NVHPC_BIN -DCMAKE_INSTALL_PREFIX=<kokkos_install_dir> -DKokkos_ENABLE_OPENMPTARGET=ON
where NVHPC_BIN points to the nvc++ executable
(side note: this was problematic with NVHPC version 22.2 since some omp pragma used in Kokkos were not well supported by this former version of NVHPC. But this seems to have been fixed in 23.7, cool!) - download the miniTRUST application, which is a simple, easy-to-build (CMake only, no external prerequisites), mock-up of the real TRUST software:
git clone GitHub - cea-trust-platform/miniTRUST: This mock-up is meant to be a playground for fundamental architecural aspects of the TRUST OO design. It does not intendend to reproduce all functionalities of the original (mighty) TRUST.
git checkout origin/abn/nvcc_kokkos_bug
cd miniTRUST; mkdir BUILD; cd BUILD
cmake … -DCMAKE_CXX_COMPILER=$NVHPC_BIN -DKokkos_ROOT=<kokkos_install_dir>
cmake --build . --target obj_opvef_divers
This results in a crash of the compiler on file Op_Div_VEFP1B_Elem.cpp.o which contains a very simple Kokkos kernel around line 170.
Do you see a way around this? To give some background: we are trying to compare the performances that we get between the Cuda backend and the OpenMP-target backend of Kokkos.
Thanks a lot in advance for any help you might give!