HPC
写在前面
开始学习
mpi(Message Passing Interface)
六个基础函数
- 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:通信域。