版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lusongno1/article/details/82926930
VS2013的MPI和OpenMP并行环境配置
linux下的ddd调试MPI程序
- 编译时要使用
-g
选项生成调试信息; - 用形如
ddd a.out
开启ddd调试的GUI; - 在代码行上设置断点(通过单击将光标挪到对应代码行上,然后单击的“Break”按钮)。
display x
监视变量,Step
按钮前进,找到哪一行错误后,可以用kill
杀死进程。
这里提ddd调试,是为了说明linux下的调试工具是相当不好使,即使是带GUI的ddd调试,十分丑不说,用起来也十分费劲。对于稍微大一点的程序,或者错误稍微隐蔽一点的程序,Debu无疑是大海捞针。
如果不是以并行为专业方向或者工作的,不建议花费太多时间去在linux环境下利用GDB或者DDD调试。不是吃这碗饭的,何必吃这个苦。
我们可以再win下使用我们惯用的Visual Studio,建立一个项目,配置好项目属性,使之支持MPI和OpenMP,作为一个专门编辑和调试并行程序的模板,以后要调试并行代码,直接拷贝进来即可,等调试好了,再拷贝出去保存。VS不好的地方就是块头太大,有时候显得笨重。
VS2013下MPI环境的配置
- 下载安装相关库文件:下载地址,找到MS-MPI vx.x.x (new!) ,下载,静静等待,傻瓜式安装。
- 新建一个空项目
Visual C++ >> Win32 >>Win32控制台应用程序>>随意起个名>>在向导中选择控制台应用程序,附加选项选空项目>>完成
。这个步骤没有太高要求,你能建出一个项目就行。 - 打开新建的项目后,点击
“调试”->“属性”
,点击“配置属性” -> “配置管理器”
,在“活动解决方案平台”
下选择“新建”
把“ARM”
替换为“X64”
,这样就新建了一个新的项目平台。 C/C++ ->预处理器->预处理器(下拉)-->编辑
,添加:MPICH_SKIP_MPICXX。C/C++ -> 代码生成 -> 运行库
,选择:多线程调试(/MTd)
。链接器 -> 输入 -> 附加依赖项
,添加:msmpi.lib
。VC++目录
中:包含目录
中添加D:\Microsoft SDKs\MPI\Include
。库目录
的里面添加:D:\Microsoft SDKs\MPI\Lib\x64
。- 重启VS。
现在,可以新建cpp文件,编写MPI程序,MPI程序的单机调试同VS中C程序的调试方式。下附一个MPI程序简单模板:
#include <stdio.h>
#include "mpi.h"
#include <math.h>
int main(int argc, char *argv[]) {
int myrank;
int size;
MPI_Status status;
MPI_Init(0, 0);//这个得写在MPI_Comm_rank和MPI_Comm_size前面
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
//这里编写程序主体
MPI_Finalize();
return 0;
}
程序的运行:生成解决方案成功后,在xxx\template\X64\Debug
目录下,代开CMD窗口,运行mpiexec -n 10 ./template.exe
。
OpenMP支持
在配置属性下,选择C/C++,找到语言,把OpenMPI支持打开即可。
OpenMP程序运行:在程序末尾加上getchar()
,保持dos窗口的停留,按F5运行即可。
这有一个简单的程序示例:
#include <stdio.h>
#include <omp.h>
int main()
{
int x;
x = 7;
//#pragma omp parallel num_threads(4) shared(x)
#pragma omp parallel private(x)
{
// 定义私有变量y。
int y;
y = 3;
if (omp_get_thread_num() == 0)
{
x = 5;
y = 6;
}
else
{
x = omp_get_thread_num();
}
//sleep(4-x);
fprintf(stderr, "Thread# %d: x = %d, y = %d\n", omp_get_thread_num(), x, y);
} // end for pragma omp parallle
fprintf(stderr, "x = %d\n", x);
}
Windows下,VS和Dev C++、Visual C++ 6.0相比,还是十分令人满意的,除了块头大点,写个小脚本还要建个项目外,在很多方面,都是很有优势的。所以,吃过6.0和dev的各种亏后,最后还是决定转战VS。