我有一个为并行计算编写的 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 个线程或任何数量运行。如何正确定义此特定实例中的线程数?
我希望我解释了我的问题。期待很快听到关于如何改进我的程序的消息。谢谢。
贾巴巴