编译此 OpenACC 代码时出错?任何人都可以弄清楚吗?

ERROR while compiling this OpenACC code ? Can anyone figure out?

这是代码。

CALL OMP_SET_NUM_THREADS(2)
!$omp parallel num_threads(acc_get_num_devices(acc_device_nvidia))
!$omp sections
!$omp section
!$acc data copyout(T) copyin(T_o)
call acc_set_device_num(1, acc_device_nvidia )
!$acc kernels
   do j=2,(nj-1)/2
       do i=2,ni-1
           T(i,j)=0.25*(T_o(i+1,j)+T_o(i-1,j)+ T_o(i,j+1)+T_o(i,j-1))  
       enddo
   enddo
!$acc end kernels
!$acc end data
!$omp section
!$acc data copyout(T) copyin(T_o)
call acc_set_device_num(2, acc_device_nvidia )
   do j=((nj-1)/2)+1,nj-1
       do i=2,ni-1
           T(i,j)=0.25*(T_o(i+1,j)+T_o(i-1,j)+ T_o(i,j+1)+T_o(i,j-1))  
       enddo
   enddo
!$acc end data  
!$omp end sections
!$omp end parallel 

这是我遇到的编译错误。 enter image description here

我还附上了下面的错误文本: /home/opt_ohpc_pub/nvhpc-sdk/Linux_x86_64/20.7/compilers/share/llvm/bin/opt: /tmp/nvfortrancom0gYsq9huq.ll:1227:32: error: 分配类型无效 %acc_set_device_num_ = alloca void(...), 对齐 8

这是编译器代码生成错误。虽然我没有看到任何与此相关的问题报告,但您可以尝试使用我们最新的 21.9 版本来查看我们是否已修复它。 https://developer.nvidia.com/nvidia-hpc-sdk-downloads

另外,如果你能提供一个完整的复现例子,我可以检查一下。如果它仍然出现,我可以添加一个问题报告。

请注意,您是在数据区域开始后设置设备,因此它将在错误的设备上创建数据。此外,由于您要从两个设备复制整个“T”数组,因此一个会破坏另一个。