Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
声明所有Fortran模块变量的目标为OpenMP 4.5+;_Fortran_Openmp_Fortran90_Offloading - Fatal编程技术网

声明所有Fortran模块变量的目标为OpenMP 4.5+;

声明所有Fortran模块变量的目标为OpenMP 4.5+;,fortran,openmp,fortran90,offloading,Fortran,Openmp,Fortran90,Offloading,我有一个fortran90代码,它使用化学物种属性(即分子量、粘度等)进行计算 为了方便地交换化学物种组,我们保留了模块文件,将所有相关数据存储在一维数组中。也就是说,我们有4个物种,粘度数组有4个元素长,每个物种有一个条目,依此类推 需要该数据的相关子程序可以使用该模块,并且可以根据需要提供化学数据 我们已经使用openMP 4.5将大部分代码移植到GPU卸载中,并在移植到这些化学计算上 我想做的是将整个模块放在GPU上,这样使用这些模块变量的任何子例程都可以在目标设备上访问它们 我最初的想法

我有一个fortran90代码,它使用化学物种属性(即分子量、粘度等)进行计算

为了方便地交换化学物种组,我们保留了模块文件,将所有相关数据存储在一维数组中。也就是说,我们有4个物种,粘度数组有4个元素长,每个物种有一个条目,依此类推

需要该数据的相关子程序可以
使用该模块,并且可以根据需要提供化学数据

我们已经使用openMP 4.5将大部分代码移植到GPU卸载中,并在移植到这些化学计算上

我想做的是将整个模块放在GPU上,这样
使用这些模块变量的任何子例程都可以在目标设备上访问它们

我最初的想法是,
$omp declare target
像我们使用函数或其他子例程一样使用模块,但编译器似乎不接受这一点

我真的必须
$omp为整个模块声明目标(变量x、y、z、a、b、c……)

如果我这样做,那么这些变量的范围是什么?即使子例程不使用模块,设备上的所有东西现在都可以访问它们吗?或者编译器是否足够聪明,能够将它们保持在使用它们的子例程的模块范围内

最后,当我在子例程中创建目标区域时,是否需要对使用这些模块的子例程执行任何特殊操作?例如:

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 

谢谢你看

事实证明,这只是Fortran API的一部分。。。它需要一个列表,而你不能做一个包罗万象的工作

!$omp declare target

declare stuff...

!$omp end declare target

因此,是的,据我所知,您需要一个庞大的列表。

结果表明,这只是Fortran API的一部分。。。它需要一个列表,而你不能做一个包罗万象的工作

!$omp declare target

declare stuff...

!$omp end declare target
是的,据我所知,你需要一份庞大的清单