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时,过程中的局部变量是否自动私有?_Fortran_Openmp_Fortran90 - Fatal编程技术网

Fortran 使用OpenMP时,过程中的局部变量是否自动私有?

Fortran 使用OpenMP时,过程中的局部变量是否自动私有?,fortran,openmp,fortran90,Fortran,Openmp,Fortran90,我对将OpenMP与Fortran 90结合使用还比较陌生。我知道当使用并行do循环时,被调用子例程中的局部变量会自动私有。对于从并行do循环调用的函数是否也是如此?外部功能与主程序中定义的功能之间是否存在任何差异 我假设外部函数的行为与子例程相同,但我对主程序中的函数特别好奇。谢谢 在OpenMP并行区域中调用的过程(函数或子例程)的局部变量是私有的,如果该过程是递归的,或者启用了等效的编译器选项(启用OpenMP时大部分是自动的),只要该变量不是保存的 如果它具有save属性(初始化时显式或

我对将OpenMP与Fortran 90结合使用还比较陌生。我知道当使用并行do循环时,被调用子例程中的局部变量会自动私有。对于从并行do循环调用的函数是否也是如此?外部功能与主程序中定义的功能之间是否存在任何差异


我假设外部函数的行为与子例程相同,但我对主程序中的函数特别好奇。谢谢

在OpenMP并行区域中调用的过程(函数或子例程)的局部变量是私有的,如果该过程是
递归的
,或者启用了等效的编译器选项(启用OpenMP时大部分是自动的),只要该变量不是
保存的

如果它具有
save
属性(初始化时显式或隐式),则它在所有调用之间共享。无论是从工作共享构造(
omp-do
omp-sections
,…)调用它,还是直接从
omp-parallel
区域调用它,都无关紧要

这个过程是外部过程、模块过程还是内部过程(您会混淆地称之为“在主程序中”)也无关紧要