Hi,
I have code with acc regions (PGI proprietary directives), which is compiling and running fine with PGI 12.3.
If I try to compile it with PGI 12.4 I get the following message:
compiling organize_newphysics.f90
/tmp/pgaccVLJdnhy-8syX.gpu(221): error: expression must have arithmetic or enum type
/tmp/pgaccVLJdnhy-8syX.gpu(223): error: expression must have arithmetic or enum type
/tmp/pgaccVLJdnhy-8syX.gpu(257): error: expression must have arithmetic or enum type
3 errors detected in the compilation of "/tmp/pgnvdNqLd1iOkesQS.nv0".
PGF90-W-0155-Compiler failed to translate accelerator region (see -Minfo messages): Device compiler exited with error status code (/project/s83/lapixa/COSMO_ICON_4.18_GPU/bin_gpu_castor/src/organize_newphysics.f90: 609)
organize_newphysics:
...
the correspongin -Minfo message for this kernel which starts line 611 is:
...
597, Accelerator restriction: induction variable live-out from loop: .dY0013
611, Accelerator restriction: scalar variable live-out from loop: .dY0016
Accelerator kernel generated
611, !$acc do parallel, vector(256) ! blockidx%x threadidx%x
613, Parallelization would require privatization of array 'aersea_b(i1+1)'
Parallelization would require privatization of array 'aerdes_b(i1+1)'
Parallelization would require privatization of array 'aerurb_b(i1+1)'
Parallelization would require privatization of array 'aerlan_b(i1+1)'
Parallelization would require privatization of array 'rlon_b(i1+1)'
Parallelization would require privatization of array 'rlat_b(i1+1)'
Parallelization would require privatization of array 'hmo3_b(i1+1)'
Parallelization would require privatization of array 'vio3_b(i1+1)'
642, Accelerator restriction: induction variable live-out from loop: .dY0016
643, Accelerator restriction: induction variable live-out from loop: .dY0015
...
It seems that a kernel is generated, but the code then gives wrong results.
Does the message " expression must have arithmetic or enum type" refers to some known issues.
For comparison when I compile with pgi 12.3 the -Minfo message is:
...
597, Accelerator restriction: induction variable live-out from loop: .dY0013
609, Generating compute capability 1.3 binary
Generating compute capability 2.0 binary
611, Accelerator restriction: scalar variable live-out from loop: .dY0016
Accelerator kernel generated
611, !$acc do parallel, vector(256) ! blockidx%x threadidx%x
CC 1.3 : 12 registers; 20 shared, 1060 constant, 0 local memory bytes; 100% occupancy
CC 2.0 : 16 registers; 4 shared, 1088 constant, 0 local memory bytes; 100% occupancy
613, Parallelization would require privatization of array 'aersea_b(i1+1)'
Parallelization would require privatization of array 'aerdes_b(i1+1)'
Parallelization would require privatization of array 'aerurb_b(i1+1)'
Parallelization would require privatization of array 'aerlan_b(i1+1)'
Parallelization would require privatization of array 'rlon_b(i1+1)'
Parallelization would require privatization of array 'rlat_b(i1+1)'
Parallelization would require privatization of array 'hmo3_b(i1+1)'
Parallelization would require privatization of array 'vio3_b(i1+1)'
642, Accelerator restriction: induction variable live-out from loop: .dY0016
643, Accelerator restriction: induction variable live-out from loop: .dY0015
...
Note also the message
“Accelerator restriction: induction variable live-out from loop: .dY0016 …”
I don’t know what is the meaning of it (and if it may cause issues) but I reported this problem in an earlier post this year. I however didn’t get any solution so far.
I am unfortunately not able to reproduce the problem in a small test example but I can send you the full application.
Best regards,
Xavier