fortran中的OMP:忽略子程序中的并行区域。

时间:2014-03-07 12:23:01

标签: parallel-processing fortran subroutine openmp

我在fortran中遇到以下OMP问题:

虽然我已经找到了很多关于在并行区域内调用子程序的文献,但我在反向过程中遇到了困难。也就是说,在一个单独的文件中,我定义了一个包含几个子程序的模块。这些子程序我想包含并行区域。每次调用所述子程序时,这些区域应该并行执行。

现在,简单地在模块的子程序中添加OMP指令的简单方法,就像在主程序中一样,似乎不起作用。程序编译并执行得很好,但始终完全忽略OMP语句(-openmp-report = 2选项不会将这些区域标识为并行),因此以串行方式运行。我想使用这些子程序的主程序还包含可以正常工作的并行区域。

在主程序中,我包含USE OMP_LIB,但在子程序中包含OMP_GET_THREAD_NUM()等函数会给我一个错误,因为this name does not have a type。再次包括USE OMP_LIB,显式在子例程中摆脱了这个错误,但仍然没有让子例程再次运行。

我很困惑。我有什么明显的遗漏吗?

模块(示意性地)定义如下:

MODULE par_module
contains

SUBROUTINE sub1(var1,var2,var3...)
implicit none
    INTEGER ... !variable definitions

!$OMP PARALLEL &
!$OMP DEFAULT(NONE) &
!$OMP SHARED(v_shared1,v_shared2,...) &
!$OMP PRIVATE(v_priv1,v_priv2,...) 
      !content
!$OMP DO
    DO i=1,N
           !more conent
    ENDDO
!$OMP END DO
!$OMP END PARALLEL
END SUBROUTINE sub1

SUBROUTINE sub2...
!...
END SUBROUTINE sub2
END MODULE

0 个答案:

没有答案
相关问题