由于专选有一门课布置了作业,便来学习下openMP。把自己之前的一些疑惑和经过各类查阅获得的资讯进行了整理,供自己和感兴趣的朋友查阅!
什么是OpenMP?
起初,老师布置了用OpenMP写个HelloWorld的入门级程序,我以为是要下一个全新的软件或者编译平台,可把我吓坏了。
实际上,OpenMP 是 Open MultiProcessing 的缩写。OpenMP 并不是一个简单的函数库,而是一个诸多编译器支持的框架,或者说是协议吧,总之,不需要任何配置,你就可以在 Visual Studio 或者 gcc 中使用它了。
如何配置?
如果你电脑中装有VS,那么只需要右键项目->属性->C/C+±>语言 具体如图
那我们开始 Hello World的编程吧
首先送上代码
#include <iostream>
#include<omp.h> //这就是OpemMP的头文件 只要按上述配置好就行
using namespace std;
int main()
{
int tid;//定义线程号
omp_set_num_threads(4);//设置四个线程
/*并行区域开始*/
#progma omp parallel private(tid)
{
tid=omp_get_thread_num;
cout<<"This is No. “<<tid<<"thread"<<endl;
cout<<"Hello World"<<endl;
}
return 0;
}
这里,在我第一尝试的时候,出现了”C++/CLI、C++/CX或OpenMP不支持两阶段名称查找“的报错,那么大家只需要 项目->属性->C/C+±>语言->符合模式:否 就可解决问题。
现在我们来看看结果:
似乎好像和我们常规想象的形式不一样。
我们可能会认为应该是
This is No.0 thread
Hello World!
This is No.1 thread
Hello World!..
这里就是并行计算和串行计算的区别了
我理解的是,我们以为的输出形式其实可以理解成一个For循环,但实际上处理时还是按顺序一个个来处理。而并行计算,也就意味着,多个处理器同时处理。之前是一个人跑400m,现在是4个人均跑100m。那么也就没有了所谓的顺序,谁都有可能是在最前面的,也有可能之前在前面后面被反超了。
关于OpenMP相关基础知识,将在后续有空时间继续扩展,同时,我也要多去学习相关内容,毕竟我也是第一次接触,也不太懂。
好啦,第一篇博文就这样结束了,虽然好像没啥干货,但还是整出了个Hello world!
刘绉绉 发布了1 篇原创文章 · 获赞 0 · 访问量 31 私信 关注