Linux下MPI程序的编译和运行
2014-09-16 20:08
344 查看
今天老师给了个貌似是32还是64核的集群,于是就忍不住登陆进去体验了一把,顺便写了个MPI程序跑了一下。由于是刚接触MPI,所以代码很简单,就是一个求π的简单例子。代码如下:
/*date:2014-9-10
*author: ysc
*email:3100105066@zju.edu.cn
*description: my first MPI program
*/
#include <stdio.h>
#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<N;i+=size)
{
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一样,实例如下:
熟悉gcc的都知道是什么意思
不过运行起来不是直接 ./pi那样的,而是需要使用mpirun,其语法如下:
其中 -np参数是运行的进程数,-machinefile就是一个ascii文件,其中记录的是运行程序指定的节点,比如我运行的这个集群有7个node,我ping了一下只有node2和node6可以用,于是我的machinefile就是如下:
我运行的结果如下:
/*date:2014-9-10
*author: ysc
*email:3100105066@zju.edu.cn
*description: my first MPI program
*/
#include <stdio.h>
#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<N;i+=size)
{
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
相关文章推荐
- Linux下MPI环境的安装配置及MPI程序的编译运行
- 在linux 上编译生成windows上运行的exe程序,交叉编译环境的配置( 平台:gentoo linux)
- Windows环境下MPI程序的编译与运行
- linux下编译运行c 程序小总结
- Linux下程序的编译链接及装载(解释)运行
- Linux下C程序的编辑,编译和运行以及调试
- linux 程序在高版本编译后到低版本运行报错:Floating point exception ,解决方法。
- linux下运行《UNIX环境高级编程》的第一个程序时源码编译出错的处理方法
- Linux下如何编译并运行C程序
- Linux下如何编译并运行C程序
- Linux下编译运行C程序超高速教程
- Linux下如何编译并运行C程序
- Android 运行 C/C++程序 (使用 arm-linux-gcc 交叉编译环境)
- Linux平台下编译运行wxWidgets简单窗口程序
- VS2005与VS2008下编译的MPI程序运行出错的解决办法
- 李斌--Linux下程序编译与运行
- 使用VC+VA编写/编译/运行/调试linux程序
- Linux下C程序的编译,运行,及调试
- Linux下C程序的编辑,编译和运行以及调试
- Linux-gprolog如何编译运行程序