Ошибка OpenACC при запуске программ большей величины
Используя следующий код, это правильно? У меня 2 ГБ Geforce 750M и я использую компилятор PGI Fortran. Программа отлично работает для 4000x4000
массивы, все, что выше, он жалуется, хотя это не должно, Вы можете видеть, что я выделил 9000x9000
массив, но если я использую значение> 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
1 ответ
Спасибо Роберту Кровелле
Я предполагаю, что на Mac есть какой-то тайм-аут отображения (также здесь). Когда вы увеличиваете размер, ядро умножения матрицы занимает больше времени. В определенный момент тайм-аут драйвера дисплея в Mac OS сбрасывает графический процессор. Если это так, вы можете обойти это, переключившись на систему / графический процессор, где графический процессор не содержит дисплей. И Linux, и Windows (TDR) также имеют такие механизмы тайм-аута.
Вы должны загрузиться в> режиме консоли в Mac OS, а также отключить автоматическое переключение графики, так как режим консоли отключает Aqua (GUI в Mac) и, следовательно, должен снять ограничение.