05 test

MPI helloworld

  #include <stdio.h>
  #include "mpi.h"
  int main( int argc, char *argv[] )
  {
    MPI_Init( &argc, &argv );
    printf("hello world\n");
    MPI_Finalize();
  }

greeting 进程间消息传递

  • MPI_COMM_WORLD通信空间,是一个进程组上下文的组合,同时也是通信函数不可缺少的参数

  • MPI_Comm_size通信空间中包含的进程数目

  • MPI_Comm_rank本进程在通信空间中的进行编号

  • `MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest,int tag, MPI_Comm comm)消息发送函数

  • `MPI_Recv()消息接收函数

    消息传递函数的每个参数的意义

    • buf 发送信息的缓冲区的起始地址

    • count 发送信息的长度,例如“hello world\n”就是12

    • 发送信息的数据类型 例如MPI_CHAR字符串数据类型

    • 目标进程的编号 例如发给0号进程

    • 消息标签 用于区分消息

    • 通信空间 MPI_COMM_WORLD

    • 只有recv函数才有的参数 ---发送给当前进程的,涞源进程id

    • 只有recv接收函数才有的参数,&status包含实际接收到的消息的相关信息

point to point 进程间通信

多进程求pi

  • 计算时间还不是很完善

  • 前期bug主要出现在消息传递过程中数据类型上MPI_DOUBLE

  • 0号进程和最后一个进程,不仅仅承担了简单的加和同时也计算了pi值的一部分,避免了资源的浪费

  • 同一个进程不能同时sed与recv,会造成死锁

  • 运行时间取所有进程时间中最长的那个

Last updated

Was this helpful?