В настоящее время я пытаюсь ускорить решение растворителей спектральных элементов, портируя большинство подпрограмм на GPGPU с использованием OpenACC с помощью компилятора PGI (15.10). Исходный код написан в OO-Fortran. Это программное обеспечение имеет «слои» подпрограмм, которые вызывают другие функции и подпрограммы. Чтобы перенести код на GPU с помощью openacc, я сначала пытался разместить директивы «$ acc» в каждой процедуре, которую нужно портировать. Во время компиляции, используя "pgf90 -acc -Minfo = Accel", я получаю следующее сообщение об ошибке:Как программа под управлением Fortran-OpenACC вызывает другую процедуру Fortran-OpenACC?
nvvmCompileProgram error: 9.
Error: /tmp/pgacc2lMnIf9lMqx8.gpu (146, 24): parse invalid forward reference to function 'innerroutine_' with wrong type!
PGF90-S-0155-Compiler failed to translate accelerator region (see -Minfo messages): Device compiler exited with error status code (Test.f90: 1)
Этих же проблема может быть воспроизведена с помощью следующего простого Фортрана:
PROGRAM Test
IMPLICIT NONE
CONTAINS
SUBROUTINE OuterRoutine(sol, xF, N)
!$acc routine
IMPLICIT NONE
INTEGER :: N
REAL(KIND=8) :: sol(0:N,1:3)
REAL(KIND=8) :: xF(0:N,1:3)
! LOCAL
INTEGER :: i
DO i = 0, N
xF(i,1:3) = InnerRoutine(sol(i,1:3))
ENDDO
END SUBROUTINE OuterRoutine
FUNCTION InnerRoutine(sol) RESULT(xF)
!$acc routine
IMPLICIT NONE
REAL(KIND=8) :: sol(1:3)
REAL(KIND=8) :: xF(1:3)
xF(1) = sol(1)*sol(2)
xF(2) = sol(1)*sol(3)
xF(3) = sol(1)*sol(1)
END FUNCTION InnerRoutine
END PROGRAM Test
Опять же, составление эта программа с «pgf90 -acc -Minfo = accel» дает проблему.
Поддерживает ли openacc подпрограмму с включенной поддержкой вызова других подпрограмм с включенной поддержкой?
Если да, то что я делаю неправильно?
Thanks Mat. После добавления встроенного флага компиляция протекает без проблем в тестовом коде и, похоже, устраняет эту проблему в исходном коде, над которым я работал. –
Обратите внимание, что не рекомендуется оставлять приветствия в вопросах и ответах. Ваше имя уже находится ниже сообщения. http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts http://meta.stackoverflow.com/questions/251077/my-opening -hi-all-in-my-question-keep-исчезает. Обычно я удаляю их. –
Хорошо офицер. Ваше заявление добавило в эту тему многое необходимое. Это тоже. –