Ошибка 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) и, следовательно, должен снять ограничение.

Другие вопросы по тегам