使用OpenMP时,过程中的局部变量是否自动保密?

时间:2014-06-21 18:31:01

标签: fortran openmp fortran90

我对使用OpenMP和Fortran 90相对较新。我知道在使用并行do循环时,被调用子程序中的局部变量会自动变为私有。对于从并行do循环调用的函数是否同样如此?主程序中定义的外部功能和功能之间是否存在差异?

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

1 个答案:

答案 0 :(得分:1)

如果过程为recursive,或者启用了等效的编译器选项(在启用OpenMP时大多数是自动的),则在OpenMP并行区域中调用的过程(函数或子例程)的局部变量是私有的,前提是变量不是save

如果它具有save属性(初始化中显式或隐式),则在所有调用之间共享。如果您从工作共享构造(omp doomp sections,...)或直接从omp parallel区域调用它,则无关紧要。

程序是外部程序,模块程序还是内部程序(在主程序"中令人困惑地称之为#34;)也无关紧要。