linux用mpi运行命令,Linux下MPI程序的编译和运行
今天老师给了个貌似是32还是64核的集群,于是就忍不住登陆进去体验了一把,顺便写了个MPI程序跑了一下。由于是刚接触MPI,所以代码很简单,就是一个求π的简单例子。代码如下:/*date:2014-9-10*author: ysc*email:3100105066@zju.edu.cn*description: my first MPI program*/#include #include "mp
今天老师给了个貌似是32还是64核的集群,于是就忍不住登陆进去体验了一把,顺便写了个MPI程序跑了一下。由于是刚接触MPI,所以代码很简单,就是一个求π的简单例子。代码如下:
/*date:2014-9-10
*author: ysc
*email:3100105066@zju.edu.cn
*description: my first MPI program
*/
#include
#include "mpi.h"
int main(int argc, char* argv[])
{
int i,rank,size;
long N;
double w,PI,temp,sum;
N = 10000000;
w = 1.0/N;sum = 0.0;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
for(i=rank;i
{
temp = i*w;
sum += 4.0/(1.0 + temp*temp);
}
MPI_Reduce(&sum,&PI,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
if(rank == 0)
printf("PI is %0.7f\n",PI*w);
MPI_Finalize();
return 0;
}
代码中的API我也不多解释了,都是非常简单的。不过要注意加mpi.h到头文件里去。代码写完就是要编译了。这里的编译需要用到mpicc,运行则用mpirun。
由于我这段代码是在集群中运行的,因此这个集群本身就安装了mpicc和mpirun,所以也不在讨论怎么安装MPI了。
mpicc使用起来和gcc一样,实例如下:
$ mpicc pi.c -o pi
熟悉gcc的都知道是什么意思
不过运行起来不是直接 ./pi那样的,而是需要使用mpirun,其语法如下:
$ mpirun -np num-of-proc -machinefile nodefile your-exe-program parameters-if-any
其中 -np参数是运行的进程数,-machinefile就是一个ascii文件,其中记录的是运行程序指定的节点,比如我运行的这个集群有7个node,我ping了一下只有node2和node6可以用,于是我的machinefile就是如下:
node2
node6最后指定要运行的exe文件和命令行参数如果有的话。
我运行的结果如下:
PI is 3.1415928
更多推荐
所有评论(0)