Skip to content

HPC

写在前面

开始学习

mpi(Message Passing Interface)

alt text

六个基础函数

  • MPI_Init(&argc, &argv);
  • MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  • MPI_Comm_size(MPI_COMM_WORLD, &size);
  • MPI_Finalize();
  • MPI_SEND(buf, count, datatype, dest, tag, comm, ierr);
  • MPI_RECV(buf, count, datatype, source, tag, comm, status, ierr)
    • 前3个参数可以用来描述消息的内容,在 MPI 中称为消息缓冲(Message Buffer),这三个参数分别对应着 消息起始地址(buf)、消息长度(count)和消息类型(datatype)
    • 后三个参数可以用来描述接收/发送者的地址,在 MPI 中被称为消息信封(Message Envelop),这三个参数分别对应着 接收/发送进程号(dest/source),消息标签(tag)和通信域(comm)
    • 最后一个参数是 ierr,返回错误代码
    • MPI_RECV 倒数第二个参数是描述了消息接收的状态 status

DANGER

MPI_SEND和MPI_REC都是阻塞式的通信,只有发送/接受完消息才能继续。

其余函数

MPI_Reduce(&local_pi, &global_pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

  将所有进程的 local_pi 求和(MPI_SUM),结果保存到主进程(rank 0)的 global_pi 中。   参数解释:

  • &local_pi:发送缓冲区。
  • &global_pi:接收缓冲区(仅 rank 0 有效)。
  • 1:数据数量。
  • MPI_DOUBLE:数据类型。
  • MPI_SUM:归约操作(求和)。
  • 0:接收结果的进程 rank。
  • MPI_COMM_WORLD:通信域。