2013-02-01 29 views
0

我有一个为并行计算编写的FORTRAN程序。程序接受参数并且可以将线程的数量定义为参数。示例代码如下:这是定义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

如果您使用OpenMP和只是希望建立多少线程使用,我只想指定线程环境中的数量:

OMP_NUM_THREADS=4 
./hellofortran 

写你的OpenMP代码就像你通常那样。有线程计数的编程方式,但这对您来说可能更直接。

+0

@ Tim,非常感谢您的回答。我也可以在程序内部使用OMP_NUM_THREADS = NTHREADS吗? –

+0

您可以使用OpenMP函数'omp_set_num_threads',但通常用于在同一程序中您可能想要针对不同循环使用不同线程数的情况。如果您始终需要相同的线程数,则可以将其设置在环境中。有关示例,请参见http://www.ncsu.edu/itd/hpc/Courses/8shared.html。 –

相关问题