我尝试使用MPI_Bsend
发送大型消息(整数)。但是如果消息大于1006个整数,我会得到错误“MPI_ERR_BUFFER:无效的缓冲区指针”。我尝试使用MPI_Buffer_attach
附加缓冲区,但它没有更改错误消息中的内容。
最小的工作示例是
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
int world_rank, world_size;
MPI_Init(NULL, NULL);
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
if (world_size < 2) {
fprintf(stderr, "World size must be greater than 1");
MPI_Abort(MPI_COMM_WORLD, 1);
}
int msg_size = 1007;
int msg[msg_size];
int i;
int buf_size = 2^16;
int buf[buf_size];
MPI_Buffer_attach(buf, buf_size);
if (world_rank == 0) {
for (i = 0; i < msg_size; ++i) {
msg[i] = rand();
}
MPI_Bsend(&msg, msg_size, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
else if (world_rank == 1) {
MPI_Recv(&msg, msg_size, MPI_INT, 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
MPI_Buffer_detach(&buf, &buf_size);
MPI_Finalize();
}
有人能给我一些线索吗?对不起,如果它是显而易见的,我是MPI的新手。