2013-02-01 30 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。 –

相關問題