使用以下代码,正确吗?我有2GB Geforce 750米和使用PGI编译器。这个程序对于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 发布于 2013-12-22 09:17:23
感谢罗伯特·克罗夫拉
我的猜测是,在mac上有某种显示超时(这里也是如此),当您增加到更大的大小时,矩阵乘内核需要更长的时间。在某个时候,Mac中的显示驱动程序超时会重置GPU。如果是这样的话,您可以通过切换到GPU不承载显示的系统/GPU来绕过它。Linux和Windows (TDR)都有这样的超时机制。
在Mac中,您必须引导到>控制台模式,还必须禁用自动图形切换,因为控制台模式关闭Aqua (Mac中的GUI),因此应该消除限制。
https://stackoverflow.com/questions/20558813
复制相似问题