2013-12-13 4 views
0

다음 코드를 사용하면 정확합니까? 필자는 2GB Geforce 750M을 사용하고 PGI Fortran 컴파일러를 사용합니다. 이 프로그램은 4000x4000 배열에 대해 잘 작동하지만, 더 높게 불평하지 않아도됩니다. 9000x9000 배열을 할당했지만 n 값이 4000 이상인 경우 런타임 오류가 발생합니다. 로버트 Crovella더 높은 등급의 프로그램을 실행할 때 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 초 소요). 미안하지만 지포스 750M을 사용하지 마십시오. –

답변

0

덕분에 맥 (여기) 더 큰 크기로 증가 할 때, 행렬 곱셈 커널이 더 오래 걸립니다에 표시 제한의 일종 있다는 것입니다. 어떤 시점에서 Mac OS의 디스플레이 드라이버 시간 초과가 GPU를 재설정합니다. 이 경우 GPU가 디스플레이를 호스팅하지 않는 시스템/GPU로 전환하여 문제를 해결할 수 있습니다. Linux와 Windows (TDR)도 이러한 제한 시간 메커니즘을 사용합니다.

Mac OS에서> 콘솔 모드로 부팅하고 콘솔 모드가 Aqua (Mac의 GUI)를 끄고 자동 그래픽 전환을 비활성화해야하므로 제한을 제거해야합니다.

관련 문제