社区
英特尔边缘计算技术
帖子详情
关于在if语句中使用critical的OpenMP简单问题
yasaka
2011-12-12 08:46:51
请问,使用OpenMP,在if语句中用到critical,
if(depth == 0)
{
#pragma omp critical
InsertHashTable(...);
}
这样写好,还是
#pragma omp critical
if(depth == 0)
{
InsertHashTable(...);
}
这样写好?
...全文
308
2
打赏
收藏
关于在if语句中使用critical的OpenMP简单问题
请问,使用OpenMP,在if语句中用到critical, if(depth == 0) { #pragma omp critical InsertHashTable(...); } 这样写好,还是 #pragma omp critical if(depth == 0) { InsertHashTable(...); } 这样写好?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yasaka
2011-12-25
打赏
举报
回复
depth的值不会发生变化,如果发生变化,我肯定会在InsertHashTable对depth作判断并加锁。不过还是谢谢你了。
Intel_Shenghong
2011-12-19
打赏
举报
回复
如果你的depth变量在InsertHashTable()操作之后不会发生变化,那么,我觉得你这里的两种写法本质上差不多,应该没有谁比谁更好的问题。
如果你的depth变量在InsertHashTable()之后会发生变化(比如表示你的哈希表的深度等,Insert后变化,那么两种写法应该都不是你想要的,在Insert之后要获取一下depth的值。由于你这里的代码片段看不出你的depth是什么含义,也不知道你要实现的功能,所以如果只是从这段代码来看,我觉得没有谁比谁好的问题,都是一样的。critical只是一个类似临界区的概念,得根据你的整体的代码和你希望的结果来分析,而且或许需要考虑“对不对”的问题,而不是“好不好”的问题。
OpenMP
criti
ca
l临界区
临界区用在可能产生数据访问竞争的地方,用法:#pragma omp
criti
ca
l (name) (name可省略)。保证每次只有一个线程进入。 注意:
criti
ca
l语句不允许互相嵌套 例:在一个并行域内的for任务分担域
中
,各个线程逐个进入到
criti
ca
l保护的区域内,比较当前元素的最大值得关系并可能进行最大值的更替,从而避免了数据竞争的情况。 #include <stdio.h&g...
OpenMP
简介和
使用
(
简单
算法并行化处理)
OpenMP
概述 1.
OpenMP
应用编程接口API(Appli
ca
tion Programming Interface)是在共享存储体系结构上的一个编程模型。 2.包括编译制导(Compiler Directive)、运行库例程(Runtime Library)和环境变量(Environment Variables) 3.支持增量并行化(Incremental Parallelization) 注意:
OpenMP
不是建立在分布式存储系统上的/不是在所有的环境下都一样/不是能让多数共享存储器均能有效
OpenMP
的配置及
简单
使用
1.VS配置
OpenMP
项目属性 --> C/C++ --> 语言 -->
OpenMP
支持,下拉菜单选择“是(/
openmp
)” 2.
简单
使用
(1)测试本机是几核的。 添加如下 说明本计算机是8核,或者说是8线程的。 代码 #include #include int main() { std::cout << "parallel begin:\n
openmp
多线程
简单
编程
OpenMP
支持的编程语言包括C、C++和Fortran,
简单
的说,就是一种API,来编写多线程应用程序。通过
使用
简单
的指令#pragma omp …就可以对程序进行多线程并行。
OpenMP
使得程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。对基于数据分集的多线程程序设计,它是一个很好的选择。但是,作为高层抽象,
OpenMP
并不适合需要复杂的线程间同步和互斥的场合。
OpenMP
的另一个缺点是不能在非共享内存系统(如计算机集群)上
使用
。在这样的系统上,MPI
使用
较多。 用
OpenMP
编写的程
在C++
中
使用
openmp
进行多线程编程
一、前言 多线程在实际的编程
中
的重要性不言而喻。对于C++而言,当我们需要
使用
多线程时,可以
使用
boost::thread库或者自从C++ 11开始支持的std::thread,也可以
使用
操作系统相关的线程API,如在Linux上,可以
使用
pthread库。除此之外,还可以
使用
omp来
使用
多线程。它的好处是跨平台,
使用
简单
。 在Linux平台上,如果需要
使用
omp,只需在编译时
使用
"-f
openmp
"指令。在Windows的visual studio开发环境
中
,开启omp支持的步骤为“项目属性 ->
英特尔边缘计算技术
566
社区成员
7,027
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章