Skip to content

WIP: GPU Code Updates, master branch (2020.04.02.)

This is to continue with integrating GPU code into the offline software...

This MR goes hand-in-hand with: atlasexternals!647 (merged)

It does the following things:

  • Teaches the Athena and WorkDir projects to set up CUDA as a language for the whole project, in case it is available.
    • I also updated the WorkDir project to set up a Fortran compiler in the same way. Instead of the old way, which was figuring out whether to enable Fortran based on the name of the parent project.
  • With the updates in atlasexternals!647 (merged) in place, I made AthExCUDA build its code under all circumstances, even when a CUDA compiler is not available.
    • To make this happen, I had to update the code a bit, to use a CPU-only version of AthCUDA::cudaMultiply when CUDA is not available. Later on it should be possible to hide these conditional compilations behind some smart macros/templates, but for now I didn't want to complicate things further.
  • With the FindSYCL.cmake version now in atlas/atlasexternals, AthExSYCL was updated to use that version. Making use of triSYCL in case that's available, and a "natively" SYCL capable compiler isn't.
    • For this I had to hide some code from triSYCL. As I found runtime crashes in local tests when letting that code be compiled against this SYCL version. 😦
    • Unfortunately this setup is really not perfect yet. If a nightly is built with triSYCL included (with let's say GCC 8), Intel's DPC++ compiler couldn't work correctly against that nightly. (It gets "confused" by the triSYCL headers.) I'll need to sort this out with the Intel developers.

The MR will remain a WIP until a new atlas/atlasexternals tag with atlasexternals!647 (merged) is prepared.

Tagging @leggett, @baines and @fwinkl.

Merge request reports