将C转换为MPI API C程序

将C转换为MPI API C程序,mpi,Mpi,我们如何将带有用户定义函数的c程序转换为使用MPIAPI的并行程序到c。演示会更有用 多谢各位。 Hari这取决于您试图并行执行的内容以及您的需求 有很多好的教程可用 下面是一个简单的hello world程序: #包括“stdio.h” #包括“mpi.h” int main(int argc,char*argv[]) { int id,NPROC; MPI_Init(&argc,&argv); MPI通信等级(MPI通信世界和id); MPI通信大小(MPI通信世界和NPROC); prin

我们如何将带有用户定义函数的c程序转换为使用MPIAPI的并行程序到c。演示会更有用

多谢各位。
Hari

这取决于您试图并行执行的内容以及您的需求

有很多好的教程可用

下面是一个简单的hello world程序:

#包括“stdio.h”
#包括“mpi.h”
int main(int argc,char*argv[])
{
int id,NPROC;
MPI_Init(&argc,&argv);
MPI通信等级(MPI通信世界和id);
MPI通信大小(MPI通信世界和NPROC);
printf(“Hello World,从进程%d开始,共%d!\n”,id,NPROC);
MPI_Finalize();
返回0;
}
下面的代码可以编译它

usr@xbc:~> mpicc -Wall -Werror -o mpihello mpihello.c
在两台单独的机器上运行,如

usr@xbc:~> mpirun_rsh  -ssh -np 2 node0 node1 /home/xbc/mpihello

其中,
hostlist
文件将有两个条目,分别为
node0
node

将其作为两个进程在同一台计算机上运行

usr@xbc:~> mpirun_rsh  -ssh -np 2 node0:1 /home/xbc/mpihello

您的
主机列表
文件将有一个条目作为
节点0:1

输出将是一个Hello world,根据您运行它的方式,从两台机器或两个进程中输出等级分别为
0
1

现在,您可以通过TCP/IP运行MPI,或通过IP通过IB(InfiniBand)运行MPI,或通过以太网运行MPI通过IB,或根据您的需求以其他多种方式运行MPI


您必须相应地配置mpi编译和安装

这完全取决于函数的功能以及如何并行化。没有使用MPI自动将任何串行程序转换为并行程序的分步指南。OpenMP使用起来容易得多,但请注意,它将工作分成线程,而不是进程,因此不能在分布式环境中使用它。@suszterpatt有一些OpenMP实现可以在分布式内存群集中工作,例如Intel的群集OpenMP。@shawn但为什么会有人在分布式内存模型上使用OpenMP?是为了使并行编程成为一种通用的编程语言吗?@Peeyush OpenMP使用一种基于指令的方法来自动并行循环,这使它成为一种快速简便的方法,可以在不重写代码的情况下实现计算密集型循环(或代码块)的并行。当然,为了获得良好的性能,需要对代码和OpenMP本身进行一些调整。@ShawnChin:软件中的群集OpenMP实现是一场性能灾难。几十年来,人们一直在研究这个问题,但它仍然不起作用,除了需要很少通信的问题,用MPI编写就很简单了。
usr@xbc:~> mpirun_rsh  -ssh -np 2 node0:1 /home/xbc/mpihello
usr@xbc:~> mpirun_rsh  -hostfile hostlist -n 2 /home/xbc/mpihello