std::vector 个中的 MPI_Send/Recv 个不匹配
MPI_Send/Recv of std::vector not matching
我不明白为什么这段代码在接收到的向量上打印 0 而不是 1,我做错了什么吗?
通信正常,但它只打印五个零而不是四个零和一个一。
int main(int arg, char** argvs) {
int rank, numOfProcess;
MPI_Init(&arg, &argvs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numOfProcess);
MPI_Status status;
if (rank == 0) {
vector<int> prova(5);
prova.push_back(1);
MPI_Send(prova.data(), 5, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
if (rank == 1) {
vector<int> rec(5);
MPI_Recv(rec.data(), 5, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
cout << rec.back() << endl;
}
MPI_Finalize();
return 0;
}
您的 push_back 将向量的长度增加一。因此,您正在通信两个小向量。
#include <mpi.h>
#include <iostream>
#include <vector>
using namespace std;
int main(int arg, char** argvs) {
int rank, numOfProcess;
MPI_Init(&arg, &argvs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numOfProcess);
MPI_Status status;
if (rank == 0) {
std::vector<int> prova(5);
prova.push_back(1);
MPI_Send(prova.data(), 6, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
if (rank == 1) {
std::vector<int> rec(6);
MPI_Recv(rec.data(), 6, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
cout << rec.back() << endl;
}
MPI_Finalize();
return 0;
}
我不明白为什么这段代码在接收到的向量上打印 0 而不是 1,我做错了什么吗?
通信正常,但它只打印五个零而不是四个零和一个一。
int main(int arg, char** argvs) {
int rank, numOfProcess;
MPI_Init(&arg, &argvs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numOfProcess);
MPI_Status status;
if (rank == 0) {
vector<int> prova(5);
prova.push_back(1);
MPI_Send(prova.data(), 5, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
if (rank == 1) {
vector<int> rec(5);
MPI_Recv(rec.data(), 5, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
cout << rec.back() << endl;
}
MPI_Finalize();
return 0;
}
您的 push_back 将向量的长度增加一。因此,您正在通信两个小向量。
#include <mpi.h>
#include <iostream>
#include <vector>
using namespace std;
int main(int arg, char** argvs) {
int rank, numOfProcess;
MPI_Init(&arg, &argvs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numOfProcess);
MPI_Status status;
if (rank == 0) {
std::vector<int> prova(5);
prova.push_back(1);
MPI_Send(prova.data(), 6, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
if (rank == 1) {
std::vector<int> rec(6);
MPI_Recv(rec.data(), 6, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
cout << rec.back() << endl;
}
MPI_Finalize();
return 0;
}