基于c++使用mpi点对点通信将“i im a student”发送给接收进程,打印发送,接收进程和信息
时间: 2024-10-26 14:16:27 浏览: 22
C++ MPI多进程并发
在C++中使用MPI(Message Passing Interface)进行点对点(P2P)通信,首先你需要安装MPI库,比如MPICH、Open MPI等,并包含相关的头文件。以下是一个简单的例子,展示了如何使用MPI Send和Recv函数来发送字符串"i am a student":
```cpp
#include <iostream>
#include <string>
#include "mpi.h"
int main(int argc, char** argv) {
// 初始化MPI环境
MPI_Init(&argc, &argv);
// 获取进程编号和总进程数
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
std::string message = "i am a student";
// 确定发送者和接收者的角色
if (rank == 0) { // 发送进程
// 发送目标进程编号
int dest = 1; // 接收进程的编号,这里假设大小为2,0发给1,反之亦然
MPI_Send(message.c_str(), message.length() + 1, MPI_CHAR, dest, 0, MPI_COMM_WORLD);
std::cout << "Sender (" << rank << ") sent the message: " << message << std::endl;
} else { // 接收进程
char buffer[1024];
int received_count, source;
MPI_Recv(buffer, sizeof(buffer), MPI_CHAR, MPI_ROOT, 0, MPI_COMM_WORLD, &received_count, MPI_STATUS_IGNORE);
std::cout << "Receiver (" << rank << ") received: " << buffer << std::endl;
}
// 清理并退出MPI
MPI_Finalize();
return 0;
}
```
在这个例子中,如果`main()`函数运行在进程0,它会发送消息给进程1;如果在进程1,则从进程0接收消息。注意,这里假设进程总数为2(主进程和一个从属进程),实际应用中需要根据实际情况调整。
阅读全文