Объявите все переменные модуля Fortran для OpenMP 4.5+ - PullRequest
1 голос
/ 30 апреля 2020

У меня есть код fortran90, который использует химические свойства видов (то есть молекулярный вес, вязкость и т. Д. c.) Для расчетов.

Чтобы легко менять или удалять группы химических веществ, мы храним файлы модулей которые хранят все соответствующие данные в одномерных массивах. Т.е. у нас есть 4 вида, массив вязкости - 4 элемента, по одной записи для каждого вида и т. Д.

Соответствующие подпрограммы, которым нужны эти данные, могут use этот модуль, и химические данные доступны. при необходимости.

Мы портировали большую часть кода на разгрузку GPU с openMP 4.5 и в момент переноса по этим химическим вычислениям.

То, что я хотел бы сделать, это просто поместить весь модуль в графический процессор, чтобы любые подпрограммы, которые use эти переменные модуля имели доступ к ним на целевом устройстве.

Мой начальный хотя было просто !$omp declare target модуль, как мы выполняем функции или другие подпрограммы, но это, кажется, не принимается компилятором.

Действительно ли мне нужно !$omp declare target(variable_x, y,z,a,b,c......) для всего модуля?

И если я это сделаю, то какова область действия этих переменных? Доступны ли они сейчас всем на устройстве, даже если подпрограмма не use модуль? Или компилятор достаточно умен, чтобы держать их в рамках модуля подпрограммы, использующей их?

Наконец, есть ли что-то особенное, что нужно сделать для подпрограммы, которая use присваивает эти модули, когда я просто создание целевых регионов в подпрограмме? Например:

subroutine test
   use chem_module
   implicit none
   integer :: i

   !$omp parallel do
   do i=1,100
      *do some calcs with module data
      *do I need to tell the compiler about the chem_module module?
   end do
   !$omp end parallel do

end subroutine 

Спасибо, что заглянули!

...