【发布时间】:2017-05-17 16:48:01
【问题描述】:
我有一个简单的 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
【问题讨论】:
-
你在调试吗?
-
@Mgetz 是的,我是
-
你在
MPI_Send处设置断点了吗? -
@Mgetz 不,我还没有...该应用程序刚刚从控制台中断,并且断点出现在 else 旁边
-
你检查过调试输出面板看它说什么了吗?打赌你会导致异常
标签: c++ windows visual-studio mpi breakpoints