所以,這是我的任務。我應該在主進程中讀K - 1三元組(K - 是進程的數量)。三聯由兩個整數號碼和一個雙一。我必須使用MPI_Pack和一個集合操作將這個三元組發送到其他進程。但是,當使用MPI_Pack我得到一個錯誤:無效的緩衝區指針。 這是我的代碼:MPI_Pack:緩衝區指針無效
int flag;
MPI_Initialized(&flag);
if (flag == 0)
return;
int rank, size;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
int* intbuf = new int[2];
double doublebuf;
byte* rbuf = new byte[(size - 1)*(2 * sizeof(int)+sizeof(double))];
if (rank == 0) {
int pos = 0;
for (int i = 0; i < size - 1; ++i){
pt >> intbuf[1] >> intbuf[2] >> doublebuf; //pt is from the special library and it's okay
MPI_Pack(intbuf, 2, MPI_INT, rbuf, sizeof(int)* 2, &pos, MPI_COMM_WORLD);
MPI_Pack(&doublebuf, 1, MPI_DOUBLE, rbuf, sizeof(double), &pos, MPI_COMM_WORLD);
}
}
MPI_Bcast(rbuf, sizeof(rbuf), MPI_PACKED, 0, MPI_COMM_WORLD);
if (rank != 0){
int pos = 0;
for (int i = 0; i < size - 1; ++i){
MPI_Unpack(rbuf, sizeof(int)* 2, &pos, intbuf, 2, MPI_INT, MPI_COMM_WORLD);
MPI_Unpack(rbuf, sizeof(double), &pos, &doublebuf, 1, MPI_DOUBLE, MPI_COMM_WORLD);
pt << intbuf[1] << intbuf[2] << doublebuf;
}
}
我在做什麼worng?
非常感謝這樣一個詳細的答案。我對MPI是一個新手。但有一點點不同的錯誤(我剛剛回答我自己的問題來解釋它)。 –
@ O.Phillips主要錯誤是堅持使用MPI_Pack。 –