这是定义fortran程序中线程数的正确方法吗?

时间:2013-02-01 00:11:21

标签: fortran openmp

我有一个为并行计算编写的FORTRAN程序。程序接受参数,线程数可以定义为参数。示例代码如下:

COUNT = NARGS()
      NTHREADS = 1

      ! *** GET THE COMMAND LINE ARGUMENTS, IF ANY
      IF(COUNT.GT.1)THEN
        ! *** ARGUMENT 1
        CALL GETARG(1, BUFFER, iStatus)
        IF (Buffer(1:4).EQ.'-NOP'.OR.Buffer(1:4).EQ.'-nop') THEN
          PAUSEIT=.FALSE.
        ENDIF
        IF (Buffer(1:3).EQ.'-NT'.OR.Buffer(1:3).EQ.'-nt') THEN
          READ(Buffer(4:10),*) NTHREADS
        ENDIF
        IF(COUNT.GT.2)THEN
          ! *** ARGUMENT 2
          CALL GETARG(2, BUFFER, iStatus)
          IF (Buffer(1:4).EQ.'-NOP'.OR.Buffer(1:4).EQ.'-nop') THEN
            PAUSEIT=.FALSE.
          ENDIF
          IF (Buffer(1:3).EQ.'-NT'.OR.Buffer(1:3).EQ.'-nt') THEN
            READ(Buffer(4:10),*) NTHREADS
          ENDIF
         ENDIF
      ENDIF

假设我编译的文件名是“hellofortran”。我可以将线程数定义为

./hellofortran -nt4 

我的程序将用4个线程读取程序。问题是我可以在任何计算机上运行尽可能多的内核。可以说我有双核心处理器。我只有两个核心,但我仍然可以运行6-8个线程或任何数字。如何正确定义此特定实例中的线程数?

我希望我解释了我的问题。期待很快听到我如何改进我的计划。谢谢。

Jdbaba

1 个答案:

答案 0 :(得分:1)

如果您正在使用OpenMP并且只想设置要使用的线程数,我只需指定环境中的线程数:

OMP_NUM_THREADS=4
./hellofortran

并像平常一样编写OpenMP代码。有一些设置线程计数的编程方法,但这对你来说可能更直接。