为什么我的MPI应用程序会触发断点?

时间:2017-05-17 16:48:01

标签: c++ windows visual-studio mpi breakpoints

我有一个简单的MPI应用程序,用于在输入所需值时将值从进程0传递到其他进程,但它在“else”上触发断点。

我错过了什么?

#include "stdafx.h"
#include "mpi.h"
#include "stdio.h"
#include "stdlib.h"

int main(int argc, char* argv[])
{
    int rank;
    int value;
    int size;

    MPI_Status status;
    MPI_Init(&argc, &argv);

    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    do
    {
        if (rank == 0)
        {
            printf("Enter the value: ");
            scanf_s("%d", &value);
            MPI_Send(&value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD);
        }

        else
        {
            MPI_Recv(&value, 1, MPI_INT, rank - 1, 0, MPI_COMM_WORLD, 
                     &status);

            if (rank < size - 1)
                MPI_Send(&value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD);
        }

        printf("Process %d got %d ", rank, value);

    } while (value >= 0);

    MPI_Finalize();
    return 0;
}

这是从debug输出的:

  

'MPIHelloWorld.exe'(Win32):已加载'C:\ WINDOWS \ SysWOW64 \ KernelBase.dll'。无法找到或打开PDB文件。

     

'MPIHelloWorld.exe'(Win32):加载'C:\ WINDOWS \ SysWOW64 \ gdi32.dll'。无法找到或打开PDB文件。

     

'MPIHelloWorld.exe'(Win32):加载'C:\ Program Files(x86)\ Bonjour \ mdnsNSP.dll'。无法找到或打开PDB文件。

     

MPIHelloWorld.exe已触发断点。

     

MPIHelloWorld.exe已触发断点。

     

线程0x3308已退出,代码为0(0x0)。

     

线程0x1dfc已退出,代码为0(0x0)。

     

线程0x2e5c已退出,代码为0(0x0)。

     

程序'[4400] MPIHelloWorld.exe'已退出,代码为0(0x0)。

更新:

当我按下CTRL + 5时,我在控制台中写了这个错误:

工作中止: [排名]消息

[0]致命错误 MPI_Send中的致命错误: 无效等级的值为1,但必须为非负且小于1

1 个答案:

答案 0 :(得分:1)

好的,我终于找到了答案!

因为我正在运行Visual Studio 2015,所以我无法使用Cluster Debugger for MPI 问题是只有一个进程正在运行。

我打开CMD并使用&#34; mpiexec.exe -n 4 myMpiApp.exe&#34;运行我的应用程序。它起作用了。