earth-system-radiation / rte-rrtmgp

RTE+RRTMGP is a set of codes for computing radiative fluxes in planetary atmospheres.
BSD 3-Clause "New" or "Revised" License
74 stars 67 forks source link

Testing OpenMP GPU offload with Intel OneAPI compilers #194

Open RobertPincus opened 1 year ago

RobertPincus commented 1 year ago

@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.

RobertPincus commented 1 year ago

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

RobertPincus commented 1 year ago

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

RobertPincus commented 1 year ago

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