【问题标题】:MPI_Wait crashes simple programMPI_Wait 使简单程序崩溃
【发布时间】:2016-05-15 02:15:58
【问题描述】:

我用 MPI 写了一个简单的程序,在调用 MPI_Wait 后它崩溃了:

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);

MPI_Request request;
double test = 0;
if (rank == 0) {
    MPI_Isend(&test, 1, MPI_DOUBLE, 1, 2, MPI_COMM_WORLD, &request);
} else {
    MPI_Irecv(&test, 1, MPI_DOUBLE, 0, 2, MPI_COMM_WORLD, &request);
    MPI_Wait(&request, NULL);
}

我可能多次忽略了代码,但无法理解程序崩溃的原因。
我正在使用 Visual Studio 2010。

【问题讨论】:

  • @flatmouse "test.exe 已触发断点"。 Stackstrace 以 Kernelbase.dll 中的未知过程结束。
  • 尝试将MPI_Status 传递为非空

标签: c++ mpi


【解决方案1】:

我认为您需要使用 MPI_STATUS_IGNORE 而不是 NULL。 免责声明:我从未使用过这个库。

https://www.mpi-forum.org/docs/mpi-2.0/mpi-20-html/node47.htm

【讨论】:

  • 谢谢!有用!我正在关注那个大学教程,对此我很生气:) mathcs.emory.edu/~cheung/Courses/561/Syllabus/92-MPI/async.html
  • @ArtemMostyaev,教程作者手头有不同的 MPI 实现。 Open MPI 将 MPI_STATUS_IGNORE 定义为 NULL 指针,因此代码将起作用。基于 MPICH 的 MPI 实现将其定义为特殊的非零常量值,因此代码失败。当你不关心状态时,传递MPI_STATUS_IGNORE 是使用MPI_Wait 的唯一正确方法。
猜你喜欢
  • 2012-08-12
  • 2016-07-09
  • 2013-08-06
  • 2011-07-08
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多