2011-03-22 45 views
0

如何将使用用户定义函数的c程序转换为使用MPI API转换为并行程序C.演示将更加有用将C转换为MPI API C程序

谢谢。 Hari

+1

这完全取决于函数的功能以及如何并行化。没有一步一步的指南可以自动将任何串行程序转换为使用MPI的并行程序。 OpenMP更易于使用,但请注意,它将工作分解为线程而不是进程,因此无法在分布式环境中使用。 – suszterpatt 2011-03-22 22:02:58

+0

@suszterpatt有OpenMP实现可以在分布式内存集群中工作,例如Intel的Cluster OpenMP。 – 2011-03-24 09:59:27

+0

@shawn但为什么有人会在分布式内存模型上使用OpenMP?是为并行编程制作一种通用编程语言吗? – peeyush 2011-07-11 06:16:13

回答

1

这取决于您试图并行执行的操作以及您的要求。

有很多很好的教程可用。

这里有一个简单的Hello World程序:

#include "stdio.h" 
#include "mpi.h" 
int main(int argc, char *argv[]) 
{ 
    int id, nprocs; 
    MPI_Init(&argc, &argv); 
    MPI_Comm_rank(MPI_COMM_WORLD, &id); 
    MPI_Comm_size(MPI_COMM_WORLD, &nprocs); 

    printf("Hello World from proc %d out of %d!\n", id, nprocs); 

    MPI_Finalize(); 

    return 0; 
} 

的编译如下

[email protected]:~> mpicc -Wall -Werror -o mpihello mpihello.c 

要在2台独立的机器上运行它作为

[email protected]:~> mpirun_rsh -ssh -np 2 node0 node1 /home/xbc/mpihello 

[email protected]:~> mpirun_rsh -hostfile hostlist -n 2 /home/xbc/mpihello 

在您hostlist文件将有2项为node0node

在同一台机器上运行它作为2个流程

[email protected]:~> mpirun_rsh -ssh -np 2 node0:1 /home/xbc/mpihello 

[email protected]:~> mpirun_rsh -hostfile hostlist -n 2 /home/xbc/mpihello 

在您hostlist文件将有1条目为node0:1

输出放置一个Hello世界,排名顺序为01来自2台机器或2个进程,具体取决于运行方式。

现在,您可以通过基于IB(InfiniBand)的IP上的IP或基于IP的MPI,或通过以太网IB上的MPI或许多其他方式运行MPI,具体取决于您的要求。

您将不得不相应地配置mpi编译和安装。