MPI_ERR_BUFFER使用MPI_Bsend()和大消息

时间:2017-05-11 10:14:28

标签: c mpi

我尝试使用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的新手。

0 个答案:

没有答案