並列計算用に書かれた 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 つのスレッドでプログラムを読み取ります。問題は、どのコンピューターでも同じ数のコアで実行できることです。デュアル コア プロセッサを使用しているとします。コアは 2 つしかありませんが、6 ~ 8 スレッドまたは任意の数で実行できます。この特定のインスタンスのスレッド数を正しく定義するにはどうすればよいですか?
私の問題を説明したことを願っています。プログラムを改善するにはどうすればよいか、すぐに聞けることを楽しみにしています。ありがとう。
ジババ