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
andWorkDir
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.
- I also updated the
- 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.
- To make this happen, I had to update the code a bit, to use a CPU-only version of
- 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.
- 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.
The MR will remain a WIP until a new atlas/atlasexternals tag with atlasexternals!647 (merged) is prepared.