OpenMPI

Concept基本概念

  • 单元Unit
    • Process进程(MPI 程序中一个独立参与通信的个体)
      • Communicator
      • Rank
    • Process Group进程组(一个 MPI 程序中由部分或全部进程构成的一个有序集合)
    • Rank 进程号(用于在该组中标识该进程 )
      • MPI_PROC_NULL
  • 通信器Communicator
    • 域内通信器 (intra-communicator)
    • 域间通信器 (inter-communicator)
    • Property
      • MPI_COMM_WORLD
      • MPI_COMM_SELF
    • Communication通信
      • Message

Structure 基本结构

  • 引入头文件#include "mpi.h"
  • int myrank, nprocs;
  • 初始化,必须首先调用MPI_Init(&argc, &argv);
  • 获取指定通信器中进程的数目MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
  • 获取在指定通信器中的进程号MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
  • 退出MPI系统MPI_Finalize();

环境信息

  • MPI_Get_processor_name(processor_name,&namelen); 处理器名称
  • char processor_name[MPI_MAX_PROCESSOR_NAME];
  • int namelen;
  • startwtime = MPI_Wtime(); 获取墙上时间
    • double startwtime;

Datatype 原始数据类型(MPI 系统中数据的发送与接收操作都必须指定数据类型 )

  • MPI_INT
  • MPI_FLOAT
  • MPI_DOUBLE
  • MPI_SHORT
  • MPI_LONG
  • MPI_CHAR
  • MPI_UNSIGNED_CHAR
  • MPI_UNSIGNED_SHORT
  • MPI_UNSIGNED
  • MPI_UNSIGNED_LONG
  • MPI_LONG_DOUBLE
  • MPI_BYTE
  • MPI_PACKED

Communication通信

  • P2P点对点
    • blocking阻塞
      • MPI_Send
      • MPI_Recv
    • non-blocking非阻塞
      • MPI_Isend
      • MPI_Irecv
      • Check Status
        • MPI_Wait
        • MPI_Test
    • Mode模式
      • Standard标准
        • MPI_Send
      • buffered缓存
        • MPI_Bsend
      • synchronous 同步
        • MPI_Ssend
      • ready 就绪
        • MPI_Rsend
  • 聚合通信与同步
    • 障碍同步(MPI_Barrier)
      • 障碍同步函数 MPI_Barrier 用于一个通信器中所有进程的同步。调用该函数时进程将处于等待状态,直到通信器中所有进程都调用了该函数后才继续执行。
    • 广播(MPI_Bcast)
      • 一个进程 (称为根进程) 同时发送同样的消息给通信器中的所有其他进程。
    • 数据收集(MPI_Gather)
    • 数据散发(MPI_Scatter)
    • 数据转置(MPI_Alltoall)
    • 归约(MPI_Reduce)

tags: MultiCPU