std :: vector的mpi_send/recv不匹配

MPI_Send/Recv of std::vector not matching

本文关键字:recv 不匹配 send mpi vector std      更新时间:2023-10-16

我不明白为什么此代码在收到的向量上打印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;
}