2013-12-13 2 views
0

Используя следующий код, это правильно? У меня 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   
+4

Не могли бы вы уточнить, что «жалуется»? Что такое сообщение об ошибке? –

+1

Я предполагаю проблему размера стека, так как массивы все еще должны находиться в памяти хоста. Кроме того, возможно, не говоря уже о том, что матричное умножение можно выполнить с помощью CuBLAS. – steabert

+0

Я смог скомпилировать и запустить вышеуказанный код на компиляторе Tesla M2050 (3 ГБ), PGI 13.10, CUDA 5.0, RHEL 5.5. Даже если я увеличиваю 'n' до 9000, он работает правильно (занимает около 60 секунд). Извините, у меня нет GeForce 750M, чтобы попробовать. –

ответ

0

Благодаря Роберт Crovella

Я предполагаю, что есть какая-то отображения тайм-аута на макинтош (также здесь) По мере увеличения до большего размера, ядро ​​матрицы умножения занимает больше времени. В какой-то момент время ожидания драйвера дисплея в Mac OS сбрасывает GPU. Если это так, вы можете обойти его, переключившись на систему/GPU, где на GPU не размещен дисплей. И Linux, и Windows (TDR) также имеют такие механизмы тайм-аута.

Вы должны загрузиться в> консольный режим в Mac OS, а также отключить автоматическое графическое переключение, поскольку консольный режим отключает Aqua (GUI на Mac) и, следовательно, должен устранить ограничение.

Смежные вопросы