Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 运行更高级别的程序时出现OpenACC错误_Fortran_Openacc_Pgi Accelerator - Fatal编程技术网

Fortran 运行更高级别的程序时出现OpenACC错误

Fortran 运行更高级别的程序时出现OpenACC错误,fortran,openacc,pgi-accelerator,Fortran,Openacc,Pgi Accelerator,使用以下代码,是否正确?我有2GB Geforce 750M,并使用PGI Fortran编译器。该程序适用于4000x4000阵列,即使不应该,它也会抱怨任何更高的值,您可以看到我已分配了9000x9000阵列,但如果我使用的n值>4000,它会抱怨并抛出运行时错误 program matrix_multiply !use openacc implicit none integer :: i,j,k,n real, dimension(9000,9000) :: a, b,

使用以下代码,是否正确?我有2GB Geforce 750M,并使用PGI Fortran编译器。该程序适用于4000x4000阵列,即使不应该,它也会抱怨任何更高的值,您可以看到我已分配了9000x9000阵列,但如果我使用的n值>4000,它会抱怨并抛出运行时错误

program matrix_multiply
!use openacc
   implicit none
   integer :: i,j,k,n
   real, dimension(9000,9000) :: a, b, c
   real x_scalar
   real x_vector(2)
   n=5000
   call random_number (b)
   call random_number (a)
   !$acc kernels 
   do k = 1,n
      do i = 1,n
         do j = 1,n
            c(i,k) = c(i,k) + a(i,j) * b(j,k)
         enddo
      enddo
   enddo
!$acc end kernels
end program matrix_multiply        

感谢罗伯特·克罗维拉

我的猜测是,mac电脑上有某种显示超时,当你增加到更大的尺寸时,matrix multiply内核需要更长的时间。在某个时刻,Mac OS中的显示驱动程序超时会重置GPU。如果是这种情况,您可以通过切换到GPU不承载显示器的系统/GPU来解决。Linux和Windows TDR都有这样的超时机制


您必须在Mac OS中启动到>控制台模式,并禁用自动图形切换,因为控制台模式会关闭Mac中的Aqua GUI,因此应该会取消限制。

您能更具体地说一下吗?错误消息是什么?我猜是堆栈大小问题,因为阵列仍然需要位于主机内存上。此外,也许还有一点,用CuBLAS也可以实现矩阵乘法。我能够在Tesla M2050 3GB、PGI 13.10编译器、CUDA 5.0、RHEL 5.5上成功编译并运行上述代码。即使我把n增加到9000,它正常运行大约需要60秒。对不起,我没有GeForce 750M可以试用。我得到的错误是custreamsynchronize 702超时我对Mac不太熟悉。我的猜测是,当你增加到一个更大的尺寸时,矩阵乘法内核需要更长的时间。在某个时刻,Mac OS中的显示驱动程序超时会重置GPU。如果是这种情况,您可以通过切换到GPU不承载显示器的系统/GPU来解决。Linux和Windows TDR都有这样的超时机制。