Fortran/MPI:是否可以仅在单个处理器上声明变量?

Iso*_*ion 2 parallel-processing fortran mpi

让我们说:

if(proc.eq.0)double precision :: B(n)

所以它只在proc 0上声明了数组B. 我知道这是不允许的,这仅仅是举例.

Bál*_*adi 6

不,基本上不可能将变量声明放入if子句中.但是,如果主进程和从进程执行完全不同的操作并因此需要完全不同的变量声明,则可以使用不同的例程进行工作:

if (proc == 0) then
    call proc_master()
else
    call proc_slave()
end if
Run Code Online (Sandbox Code Playgroud)

例程proc_master()可以声明主进程所需的所有变量以及master应该执行的所有指令,而proc_slave()对从属进行相同的操作.

如果从站和主站的代码差异很小,则可以使用可分配的变量并仅在适当的进程中分配:

integer, allocatable :: bigarray(:,:)

:
if (proc == 0) then
    allocate(bigarray(nn, nn))
end if
Run Code Online (Sandbox Code Playgroud)

如果主设备和从设备的代码差异更小(例如,只有几个标量变量),那么就离开它.你绝对不应该担心由于多余的变量而丢失的几个字节.