1
我無法讓MPI_Gatherv
與std :: vector一起使用。我已經寫了一個小程序,應該用一個整數的秩+1來填充一個向量(避免0,因爲向量初始化爲0)。這只是一個使用2個MPI進程運行的示例程序,我意識到它不具有可擴展性。問題與MPI_Gatherv爲std :: vector
#include <iostream>
#include <vector>
#include "mpi.h"
int main(int argc, char **argv)
{
int my_rank; //rank of process
int p; //number of MPI processes
int tag=50; //Tag for message
int X = 32;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &p);
std::vector<int> rcvvec(X);
std::vector<int> sndvec(X/p);
int rcounts[p];
int rdisp[p];
for(int i=0; i<p; ++i) {
rcounts[i] = X/p;
rdisp[i] = my_rank*(X/p);
}
for (int i = 0; i < X/p; ++i)
sndvec[i] = my_rank+1;
MPI_Gatherv(&sndvec.front(), rcounts[my_rank], MPI_INT, &rcvvec.front(), rcounts, rdisp, MPI_INT, 0, MPI_COMM_WORLD);
if (!my_rank) {
for (int i = 0; i < rcvvec.size(); ++i) {
std::cout<<rcvvec[i]<<" ";
} std::cout<<std::endl;
}
MPI_Finalize();
}
我希望rcvvec
包含1111111122222222
而是我得到2222222200000000
因此,對於某種原因,它只是在矢量上半年插入過程1的整數。有誰知道這裏發生了什麼?我也試着用一個普通的C風格的數組來實現它,並得到相同的結果。但如果我用C而不是C++編寫它,它就可以工作。這是否對我對C++和MPI的理解失敗?
感謝您的幫助!