Fortran 使用OpenMP时,过程中的局部变量是否自动私有?
我对将OpenMP与Fortran 90结合使用还比较陌生。我知道当使用并行do循环时,被调用子例程中的局部变量会自动私有。对于从并行do循环调用的函数是否也是如此?外部功能与主程序中定义的功能之间是否存在任何差异Fortran 使用OpenMP时,过程中的局部变量是否自动私有?,fortran,openmp,fortran90,Fortran,Openmp,Fortran90,我对将OpenMP与Fortran 90结合使用还比较陌生。我知道当使用并行do循环时,被调用子例程中的局部变量会自动私有。对于从并行do循环调用的函数是否也是如此?外部功能与主程序中定义的功能之间是否存在任何差异 我假设外部函数的行为与子例程相同,但我对主程序中的函数特别好奇。谢谢 在OpenMP并行区域中调用的过程(函数或子例程)的局部变量是私有的,如果该过程是递归的,或者启用了等效的编译器选项(启用OpenMP时大部分是自动的),只要该变量不是保存的 如果它具有save属性(初始化时显式或
我假设外部函数的行为与子例程相同,但我对主程序中的函数特别好奇。谢谢 在OpenMP并行区域中调用的过程(函数或子例程)的局部变量是私有的,如果该过程是
递归的
,或者启用了等效的编译器选项(启用OpenMP时大部分是自动的),只要该变量不是保存的
如果它具有save
属性(初始化时显式或隐式),则它在所有调用之间共享。无论是从工作共享构造(omp-do
,omp-sections
,…)调用它,还是直接从omp-parallel
区域调用它,都无关紧要
这个过程是外部过程、模块过程还是内部过程(您会混淆地称之为“在主程序中”)也无关紧要