2013-12-13 42 views
0

使用以下代码,它是否正确?我有2GB的Geforce 750M和使用PGI Fortran编译器。该程序工作正常4000x4000阵列,任何更高的抱怨,即使它不应该,你可以看到我已经分配9000x9000数组,但如果我使用n值> 4000它抱怨并引发运行时错误。运行程度较高的程序时出现OpenACC错误

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   
+4

你能更具体然后“抱怨”吗?什么是错误信息? –

+1

我想堆栈大小的问题,因为数组仍然需要在主机内存上。另外,也许除了这点之外,也可以用CuBLAS来完成矩阵乘法。 – steabert

+0

我能够在Tesla M2050(3GB),PGI 13.10编译器,CUDA 5.0,RHEL 5.5上成功编译和运行上述代码。即使我将'n'增加到9000,它也能正常运行(大约需要60秒)。对不起,我没有GeForce 750M来试用它。 –

回答

0

感谢罗伯特Crovella

我的猜测是有某种的MAC(也在这里)当你增加一个较大的大小,矩阵乘法内核需要更长的时间显示超时。在某些时候,Mac OS中的显示驱动程序超时会重置GPU。如果是这样,您可以通过切换到GPU不支持显示器的系统/ GPU来解决此问题。 Linux和Windows(TDR)都有这样的超时机制。

您必须在Mac OS中引导至>控制台模式,并且在控制台模式关闭Aqua(Mac中的GUI)时禁用自动图形切换,因此应该取消限制。

相关问题