earth-system-radiation/rte-rrtmgp

Testing OpenMP GPU offload with Intel OneAPI compilers

Opened this issue · 3 comments

@naromero77 from Intel had some suggestions via email for using the Intel OneAPI compilers to check aspects of the implement of the OpenMP offload.

I recently had some ideas that may help you continue OpenMP offload development and possibly do CI. With the Intel oneAPI compilers, you can do the following:

  1. Test OpenMP offload with the target being the CPU instead of the GPU:
    ifx -c -fiopenmp -fopenmp-target=x86_64 <files>.
    Code and should compile and run AS IS. However, you cannot detect issues with data transfers.

  2. Test OpenMP offload with the target being the GPU but OpenMP offload DISABLED at runtime
    ifx -c -fiopenmp -fopenmp-target=spir64 <files>
    You will not to set the runtime environment variable OMP_TARGET_OFFLOAD=DISABLED. Again, you cannot detect issues with data transfers.

The first method should be supported on any Intel CPU. The second method should also be supported on any Intel CPU and would be the preferred method.

Update: syntax seems to be -fopenmp-targets=.

@naromero77 Would these flags work in containers? What if the containers are running on e.g. AMD processors?

The current implementation (v1.6) causes an Internal Compiler Error using ifx.

@naromero77 suggets:

For the issue with Line 429, please try changing:
!$omp target teams distribute parallel do simd collapse(2) map(from:fluxes%flux_net)
 
To:
!$omp target teams distribute parallel do collapse(2) map(from:fluxes%flux_net)
 
If that still gives an ICE, then try:
!$omp target teams distribute parallel do map(from:fluxes%flux_net)
 
The finally, just remove that map(from:fluxes%flux_net).

which is next on my list