2013-12-13 181 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)時禁用自動圖形切換,因此應該取消限制。

相關問題