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

Parallel processing Fortran/MPI:是否可以仅在单个处理器上声明变量?,parallel-processing,fortran,mpi,Parallel Processing,Fortran,Mpi,比如说: if(过程等式0)双精度::B(n) 因此它只在进程0上声明数组B。我知道这是不允许的,这只是一个例子。不,通常不可能将变量声明放入if子句中。但是,如果主进程和从进程所做的事情完全不同,因此需要完全不同的变量声明,则可以使用不同的例程进行工作: if (proc == 0) then call proc_master() else call proc_slave() end if 例程proc\u master()可以声明主进程所需的所有变量和主进程应执行的所有指令

比如说:

if(过程等式0)双精度::B(n)


因此它只在进程0上声明数组B。我知道这是不允许的,这只是一个例子。

不,通常不可能将变量声明放入
if
子句中。但是,如果主进程和从进程所做的事情完全不同,因此需要完全不同的变量声明,则可以使用不同的例程进行工作:

if (proc == 0) then
    call proc_master()
else
    call proc_slave()
end if
例程
proc\u master()
可以声明主进程所需的所有变量和主进程应执行的所有指令,而
proc\u slave()
也可以声明从进程所需的所有变量

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

integer, allocatable :: bigarray(:,:)

:
if (proc == 0) then
    allocate(bigarray(nn, nn))
end if
如果主变量和从变量的代码差异更小(例如,在您的示例中,只有几个标量变量),则只需保留它即可。您当然不应该担心由于多余变量而丢失的几个字节