我对使用OpenMP和Fortran 90相对较新。我知道在使用并行do循环时,被调用子程序中的局部变量会自动变为私有。对于从并行do循环调用的函数是否同样如此?主程序中定义的外部功能和功能之间是否存在差异?
我认为外部函数的行为与子程序相同,但我对主程序中的函数特别好奇。谢谢!
答案 0 :(得分:1)
如果过程为recursive
,或者启用了等效的编译器选项(在启用OpenMP时大多数是自动的),则在OpenMP并行区域中调用的过程(函数或子例程)的局部变量是私有的,前提是变量不是save
。
如果它具有save
属性(初始化中显式或隐式),则在所有调用之间共享。如果您从工作共享构造(omp do
,omp sections
,...)或直接从omp parallel
区域调用它,则无关紧要。
程序是外部程序,模块程序还是内部程序(在主程序"中令人困惑地称之为#34;)也无关紧要。