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

时间:2013-10-31 00:08:33

标签: parallel-processing fortran mpi

让我们说:

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

这样它只在proc 0上声明了数组B.我知道这是不允许的,只是举例而已。

1 个答案:

答案 0 :(得分:6)

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

if (proc == 0) then
    call proc_master()
else
    call proc_slave()
end if

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

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

integer, allocatable :: bigarray(:,:)

:
if (proc == 0) then
    allocate(bigarray(nn, nn))
end if

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