MPI 之 按进程打印 “Hello World”

先来看下mpi-3.2.1目录下examples中的hellow.c的代码(鼠标右键用gedit打开):

#include <stdio.h>
#include "mpi.h"//调用mpi接口

int main( int argc, char *argv[] )
{
    int rank;
    int size;
    
    MPI_Init( 0, 0 );//MPI的初始化,营造一个并行计算环境
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);//获取当前进程号
    MPI_Comm_size(MPI_COMM_WORLD, &size);//获取所有进程总数
    printf( "Hello world from process %d of %d\n", rank, size );
    MPI_Finalize();//结束并行计算环境
    return 0;
}

编译运行:

mpicc heollow.c -o hellow

mpirun -np 5 ./hellow

结果为:

Hello world from process 1 of 5
Hello world from process 2 of 5
Hello world from process 4 of 5
Hello world from process 0 of 5
Hello world from process 3 of 5

可以看到并不是按照进程号有小到大顺序输出,如果想要顺序输出,只需添加判别语句即可:

修改代码如下:

#include <stdio.h>
#include "mpi.h"

int main( int argc, char *argv[] )
{
    int rank;
    int size;
    int i=0;
    
    MPI_Init( 0, 0 );
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    if (rank==0)//只需在此处添加判别语句 
    printf( "Hello world from process %d of %d\n", rank, size );
    MPI_Finalize();
    return 0;
}

结果:

~/mpich-3.2.1/examples$ mpirun -np 5 ./hellow
Hello world from process 0 of 5

不过只有一条输出,再修改rank==1, 就能输出rank 1的进程,一次类推。

其实通过这个例子,可以体会到并行计算和串行计算的很大不同。并行时没法使用更多的判断语句,因为每个进程都有自己的rank。我也是刚刚开始学习MPI,理解不是很深入,上课犯困没听太多,等我看完讲义再来补充。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值