提到使用OpenMP实现多线程编程,相对比叫便捷,很多兄弟一定已经很熟悉了。一般的用法都是把OpenMP用在for等循环上,论坛上好多OpenMP在这上的用法也有好多的解释了,我也不班门弄斧了。
但for等循环如果要用在OpenMP上,一般的限制还是比较多的,比如循环不同序列间的数据或逻辑依赖不能过强,必须可以将其分解为或转化为互相独立的关系。此外,有时候虽然看是做到互相独立,但代价很大,比如加了很多的锁,多线程的效果不是很好。这就导致了对OpenMP的使用受到了比较大的限制。一般以我的经验,当for循环处理大的矩阵、数组等时,用OpenMP比较合适,但如果涉及到了很多的逻辑判断,就不是很理想。
从上面可以看出,for等循环不总是适合使用OpenMP。但是不是除了循环,OpenMP就没有用武之地了呢?当然不是,还可以用OpenMP的section,如下图说示,原先线性执行的程序被分成了并行的三段:
#pragma omp parallel sections
{
#pragma omp section
{
Function1
}
#pragma omp section
{
Function2
}
#pragma omp section
{
Function3
}
}
 
这里就给大家讲一个我遇到的使用Section的实例:某段程序执行非常繁重的初始化操作,不同部分之间依赖性不大。那么使用了上述OpenMP之后,终于并行了,大大加快了初始化进程。

转载于:https://blog.51cto.com/intelisn/130733

使用OpenMP实现多线程,不仅是用在循环处理上相关推荐

  1. 在C++中使用openmp进行多线程编程

    一.前言 多线程在实际的编程中的重要性不言而喻.对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始支持的std::thread,也可以使用操作系统相关 ...

  2. 在多线程应用程序中使用循环缓冲区高效地进行日志记录

    在多线程应用程序中使用循环缓冲区高效地进行日志记录 在关键的计算机应用程序的生存期中,日志记录是一件非常重要的活动,特别是当故障的症状并不十分明显时.日志记录提供了故障前应用程序状态的详细信息,如变量 ...

  3. python多线程加速for循环_多线程-如何在Python的循环中对操作进行多线程

    首先,在Python中,如果您的代码受CPU约束,那么多线程将无济于事,因为只有一个线程可以持有全局解释器锁,因此一次只能运行Python代码. 因此,您需要使用进程,而不是线程. 如果您的操作&qu ...

  4. Java多线程(全)学习笔记(上)

    2019独角兽企业重金招聘Python工程师标准>>> 一.线程的创建和启动 java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每条线程的作用是 ...

  5. 全面详解Android实现多线程的几种方式(史上最全,最详细)

    一.前言 Android多线程实现方式包括: 1.基础使用 继承Thread类 实现Runnable接口 Handler 2.复合使用 AsyncTask HandlerThread IntentSe ...

  6. win32多线程程序设计笔记(第四章上)

    前面已经介绍了线程的创建.销毁过程,如何判断一个线程是否结束:但是撰写多线程程序的一个挑战性问题就是:如何让一个线程和另外一个线程合作. 在同一时间段会存在多个线程,当这些线程同时存取同一数据时,就会 ...

  7. 多线程学习--案例-子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次

    子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序. package Demo4; public class ThreadTe ...

  8. java一道多线程题,子线程循环10次,主线程接着循环100次,如此循环50次的问题

    <span style="font-size:18px;">/*** 实现功能:子线程循环10次,接着主线程循环15次,接着又回到子线程循环10次,接着再回到主线程又循 ...

  9. Jarvis-拍立淘里面的深度学习引擎

    介绍 深度学习的原理?局部响应归一化的作用?兄弟今天不是来讨论这个的,那都是科学家和算法同学的事儿.作为一个深度学习引擎,使命只有一个--就是快速和准确的计算.那怎么才能快呢?在编程技能和算法技能没有 ...

最新文章

  1. 项目性能优化(实现页面静态化1)
  2. 基于物理尺寸的响应式设计(转)
  3. 2021年秋季学期“大数据能力提升项目”证书办理及领取通知
  4. AR智能提升工业效率的4大场景与应用实践!
  5. 【博弈论】【SG函数】bzoj1457 棋盘游戏
  6. 【深度学习入门到精通系列】R2 Unet解释
  7. cocos2d-x游戏开发(十一)细说场景切换
  8. SAP Spartacus里Commerce后台CMS Component和前台Angular的一一映射关系
  9. 私有GIT服务器的免密提交
  10. Android学习笔记---HttpClient入门,使用方法,及简介
  11. 亲串 (hdu 2203 KMP)
  12. CarMaker支持导入的道路格式
  13. 遗传算法原理和优缺点
  14. 数据总线和地址总线区别是什么?作用分别是什么
  15. 植发搞笑图片_搞笑:终于找到原图了!像不像?
  16. 查看dll文件的两种办法
  17. (华为社招岗位,部门---上海海思,GTS,海思,2012,华为云):北京北京北京!
  18. 如何区分电梯卡为id卡ic卡_电梯ic卡系统与ID卡系统有什么区别
  19. 反证法在计算机领域,人工智能的基础研究领域——问题求解、逻辑推理与定理证明...
  20. java中文转拼音_java中文转拼音

热门文章

  1. Enum类的非一般用法汇总(工作中遇到时持续更新)
  2. ThinkPHP5 清除runtime缓存文件
  3. 1091 线段的重叠
  4. 124. Binary Tree Maximum Path Sum
  5. 1874畅通工程续(dijkstra算法)
  6. DFT-软件篇 from 陈新武
  7. 循环控制结构程序05 - 零基础入门学习C语言20
  8. 输入防抖 vue # 输入搜索的时候 及时搜索的快速访问接口的 解决方案 vue 中使用防抖和节流
  9. Centos6.X升级glibc解决“libc.so.6 version GLIBC_2.14 not found”报错问题
  10. SVN地址正确,能在网页打开,但是检出失败解决方法