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



我有一个简单的 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;
}

这是调试的输出:

'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

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

我无法使用 MPI 的群集调试器,因为我正在运行 Visual Studio 2015 问题是只有 1 个进程在运行。

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

最新更新