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
@ Tim,非常感謝您的回答。我也可以在程序內部使用OMP_NUM_THREADS = NTHREADS嗎? –
您可以使用OpenMP函數'omp_set_num_threads',但通常用於在同一程序中您可能想要針對不同循環使用不同線程數的情況。如果您始終需要相同的線程數,則可以將其設置在環境中。有關示例,請參見http://www.ncsu.edu/itd/hpc/Courses/8shared.html。 –