NextGenTrigger Task 1.7
- CHEP talk together with Jolly got accepted.
- Co-Supervision of a summer student. Topic: Imrpove clustering algorithm CLUE.
Implement NGT SoA Code in O2 standalone benchmark
- Working on this fork of the AliceO2 repo, with a CI pipeline:
- Running on NGT hardware with 4 different GPUs (Nvidia and AMD)
- Extended CI-pipline to fail if GPU.out changes
- Implemented SoA in:
- SectorTracker
- GPUTPCBaseTrackParam
- GPUTPCTrackParam
- GPUTPCTracklet
- GPUTPCTrack
- Some issues with AMD W7900 (mostly due to WARP_SIZE and because the architecture gfx1100 is not built-in)
- Works fine if I add architecture "gfx1100" in FindO2GPU.cmake and a new column "RDNA3" in GPUPrameters.csv.
- If a don't change the FindO2GPU.cmake, but I add AMD_EUS_PER_CU=4 for default to GPUParameter.csv, we have the following issues:
- Terminal spamed with "This sorting variant is disabled for RTC" even without RTC.
- Runs with RTC without failure, is deterministic, but GPU.out is (slightly) wrong.
- Runtime (segfault) error with (and only with) custom .par file that otherwise works.
- Just putting COMP_GATHER_MODE=3 (previously 0) in the default column of GPUParameter.csv fixes the segfault and yields correct GPU.out with custom .par file (still wrong GPU.out without custom .par file).
- Detailed guide for reproduction is in the appended files.
- Some things I noticed along the way:
- WARP_SIZE seems not to be set from .par file. (Can be worked around with --RTCoverrideWarpSize.)
- In my case, --PROChipOverrideAMDEUSperCU is useless because already the build fails due to a static_assert in GPUReconstructionKernelMacros.h, line 37.
- In GPUT/GPUTracking/CMakeLists.txt, the variable GPU_PARAM_JSON_FILE actually points to a CSV file.
- In the same file, we create an actual JSON file CONVOUTFILE out of it. It's called "GPUParameters_GPUParameters_0.json". If this is not intended, we should change line 282.
- Should we make the variables in GPU/GPUTracking/Standalone/cmake/config.cmake overrideable during the CMake step (e.g. -DENABLE_HIP=1)?
- Next Steps:
- Build and run O2 with C++26 compiler to integrate reflections (needed for CHEP benchmark)
- Write minimal reproducer for the (weird) behavior I observed with AMD W7900 and custom .par file.
- Make better use of SoA to improve performance
- Try David's suggestion