Parallel processing 使用MPI并行化函数

Parallel processing 使用MPI并行化函数,parallel-processing,mpi,Parallel Processing,Mpi,我想使用MPI来并行化代码中多次调用的函数。我想知道的是,如果我在函数中使用MPI_Init,是每次调用函数时都会生成进程,还是只生成一次?是否有一些已知的设计模式可以系统地实现这一点?这并不是MPI(或分布式内存编程)的工作方式;你不能像使用OpenMP那样将函数并行化。在MPI中,进程不是在MPI\u Init()时生成的,而是在运行可执行文件时生成的(例如,使用mpiexec;即使使用MPI\u Comm\u spawn()也是如此)。部分原因是,在分布式内存计算中,在大量无共享节点上启动

我想使用MPI来并行化代码中多次调用的函数。我想知道的是,如果我在函数中使用
MPI_Init
,是每次调用函数时都会生成进程,还是只生成一次?是否有一些已知的设计模式可以系统地实现这一点?

这并不是MPI(或分布式内存编程)的工作方式;你不能像使用OpenMP那样将函数并行化。在MPI中,进程不是在
MPI\u Init()
时生成的,而是在运行可执行文件时生成的(例如,使用mpiexec;即使使用
MPI\u Comm\u spawn()也是如此)
。部分原因是,在分布式内存计算中,在大量无共享节点上启动进程是一项非常昂贵的任务


您可以通过将要调用的函数放在一个单独的可执行文件中来拼凑一些东西,但我不确定这是您想要的。

这不是MPI(或分布式内存编程)的真正方式可以工作;您不能像使用OpenMP那样直接并行化函数。在MPI中,进程不是在
MPI\u Init()
时生成的,而是在运行可执行文件时生成的(例如,使用mpiexec;即使使用
MPI\u Comm\u spawn()也是如此)
。部分原因是,在分布式内存计算中,在大量无共享节点上启动进程是一项非常昂贵的任务

您可以通过将要调用的函数放在单独的可执行文件中来拼凑一些东西,但我不确定这是否是您想要的。

调用
MPI_Init()
只是初始化MPI环境,它本身不做任何并行化。并行化来自于您编写程序的方式

一个并行的“Hello,World”
printf()
根据其运行的级别(处理器)执行不同的操作。进程数由您执行程序的方式决定(例如,进程数通过-n参数设置为mpiexec或mpirun)

MPI\u Init()
调用只是初始化MPI环境,它本身不进行任何并行化。并行性来自于您编写程序的方式

一个并行的“Hello,World”
printf()
根据其运行的级别(处理器)执行不同的操作。进程数由您执行程序的方式决定(例如,进程数通过-n参数设置为mpiexec或mpirun)


由于MPI是一个重复的问题,因为这是一个关于MPI的问题,而不是基于你的描述的MPICH2,你可能想考虑使用OpenMP而不是MPI。用MPI进行延迟,因为这是一个关于MPI的问题,而不是真正基于你的描述的MPCH2A,你可能想考虑。er使用OpenMP而不是MPI。
int main(int argc, char *argv[]) {

        char name[BUFSIZ];
        int length=BUFSIZ;
        int rank;
        int numprocesses;

        MPI_Init(&argc, &argv);    
        MPI_Comm_size(MPI_COMM_WORLD, &numprocesses);
        MPI_Comm_rank( MPI_COMM_WORLD, &rank );
        MPI_Get_processor_name(name, &length);

        printf("%s, Rank %d of %d: hello world\n", name, rank, numprocesses);

        MPI_Finalize();

        return 0;
}