다음 코드를 사용하면 정확합니까? 필자는 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
더 구체적으로 '불평'할 수 있습니까? 오류 메시지 란 무엇입니까? –
배열이 여전히 호스트 메모리에 있어야하므로 스택 크기 문제가있는 것 같습니다. 또한, 요컨대 매트릭스 승법을 CuBLAS와 함께 수행 할 수도 있습니다. – steabert
위의 코드를 Tesla M2050 (3GB), PGI 13.10 컴파일러, CUDA 5.0, RHEL 5.5에서 성공적으로 컴파일하고 실행할 수있었습니다. 'n'을 9000으로 늘리더라도 올바르게 실행됩니다 (약 60 초 소요). 미안하지만 지포스 750M을 사용하지 마십시오. –