使用Visual Studio对c++编写而成的MPI程序进行断点调试
本方法归纳自MPI debugging with VS2012以及b站视频VS中调试MPI程序
这是一段简单示例代码,我们以它为例子展示如何在Visual Studio中调试MPI程序
#include <mpi.h>
#include <iostream>
#include <Windows.h>
int main(int argc, char* argv[])
{
MPI_Init(&argc, &argv);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
Sleep(20000);
if (world_rank == 0)
{
// Sending a message
const int message = 42;
MPI_Send(&message, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
std::cout << "Process 0 sends number " << message << " to process 1\n";
}
else if (world_rank == 1)
{
// Receiving a message
int received_message;
MPI_Recv(&received_message, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
std::cout << "Process 1 received number " << received_message << " from process 0\n";
}
MPI_Finalize();
return 0;
}
设置调试参数
如下图所示,将命令修改为mpiexec.exe
所在的路径,默认路径是C:\Program Files\Microsoft MPI\Bin\mpiexc.exe
,按照自己的需求修改命令参数为-n count $(TargetPath)
,这里的count
是你想要同时运行的进程个数,这里为2.
添加Sleep语句以及设置断点
在断点之前设置Sleep语句以便我们有时间进行操作,一般20s左右即可Sleep(20);
。
调试并附加到进程
开始调试,点击调试>开始调试
后点击调试>附加到进程
后会弹出如下界面,搜索并选择你所运行的程序,可以看到由于我在开始设置参数时命令参数设置为2,这里出现了两个进程,将它们附加到进程中。
观察不同进程中的值
稍等片刻之后会出现下列画面,如果没有出现右侧的并行监视窗口,则在调试>窗口>并行监视
中可以打开窗口。
此时我们在并行监视中查看到的进程是world_rank=1
的进程,我们双击进程ID为20716的进程可以进入world_rank=0
的进程。
然后其他调试操作与串行程序并没有区别。