Используя следующий код, это правильно? У меня 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
Не могли бы вы уточнить, что «жалуется»? Что такое сообщение об ошибке? –
Я предполагаю проблему размера стека, так как массивы все еще должны находиться в памяти хоста. Кроме того, возможно, не говоря уже о том, что матричное умножение можно выполнить с помощью CuBLAS. – steabert
Я смог скомпилировать и запустить вышеуказанный код на компиляторе Tesla M2050 (3 ГБ), PGI 13.10, CUDA 5.0, RHEL 5.5. Даже если я увеличиваю 'n' до 9000, он работает правильно (занимает около 60 секунд). Извините, у меня нет GeForce 750M, чтобы попробовать. –