zoukankan      html  css  js  c++  java
  • OpenMP编程指南 周伟明的多核、测试专栏 博客频道 CSDN.NET

    OpenMP编程指南 - 周伟明的多核、测试专栏 - 博客频道 - CSDN.NET

    OpenMP编程指南


    28708人阅读
    评论(10)
    收藏
    举报

    OpenMP编程指南

    进入多核时代后,必须使用多线程编写程序才能让各个CPU核得到利用。在单核时代,通常使用操作系统提供的API来创建线程,然而,在多核系统中,情况发生了很大的变化, 如果仍然使用操作系统API来创建线程会遇到一些问题。具体来说,有以下三个问题:

    1CPU核数扩展性问题

    多核编程需要考虑程序性能随CPU核数的扩展性,即硬件升级到更多核后,能够不修改程序就让程序性能增长,这要求程序中创建的线程数量需要随CPU核数变化,不能创建固定数量的线程,否则在CPU核数超过线程数量上的机器上运行,将无法完全利用机器性能。虽然通过一定方法可以使用操作系统API创建可变化数量的线程,但是比较麻烦,不如OpenMP方便。

    2)方便性问题

    在多核编程时,要求计算均摊到各个CPU核上去,所有的程序都需要并行化执行,对计算的负载均衡有很高要求。这就要求在同一个函数内或同一个循环中,可能也需要将计算分摊到各个CPU核上,需要创建多个线程。操作系统API创建线程时,需要线程入口函数,很难满足这个需求,除非将一个函数内的代码手工拆成多个线程入口函数,这将大大增加程序员的工作量。使用OpenMP创建线程则不需要入口函数,非常方便,可以将同一函数内的代码分解成多个线程执行,也可以将一个for循环分解成多个线程执行。

    3)可移植性问题

    目前各个主流操作系统的线程API互不兼容,缺乏事实上的统一规范,要满足可移植性得自己写一些代码,将各种不同操作系统的api封装成一套统一的接口。OpenMP是标准规范,所有支持它的编译器都是执行同一套标准,不存在可移植性问题。

    综上所述,在多核编程中,使用OpenMP就很有必要,下面列出以前发表在我的CSDN博客中的OpenMP文章,供大家参考。

    1OpenMP并行程序设计(一)

    介绍OpenMP程序在并行计算时的效率,在双核CPU上效率增加了整整一倍。 阅读全文

    2OpenMP并行序设计(二)

    1fork/join并行执行模式的概念 2OpenMP指令和库函数介绍 3parallel 指令的用法 4for指令的使用方法 5 sectionssection指令的用法。阅读全文

    3OpenMP中的数据处理子句

    本文主要介绍了OpenMP中的privatefirstprivatelastprivatethreadprivatereductioncopyincopyprivate等数据处理子句的用法。 阅读全文

    4OpenMP中的任务调度

    本文主要介绍了OpenMP中任务调度子句schedule的使用方法。阅读全文

    5OpenMP创建线程中的锁及原子操作性能比较

    主要比较了原子操作,Windows CriticalSection OpenMP库带的锁在单任务运行情况下和多任务运行情况下的性能情况,在多核CPU上,多任务的锁竞争花费的时间是单任务时的锁运行花费时间的18倍。锁竞争带来的效率下降完全出乎意料之外,由此也可见多核编程和单核多线程编程是有很大区别的。 阅读全文

    6OpenMP程序设计的两个小技巧

    讲述了如何动态设置线程数量以适应硬件和软件的扩展性,如何将嵌套循环并行化的技巧。 阅读全文

     

    上面列出的这些OpenMP知识,属于初步的入门知识,如果需要进一步深入掌握OpenMP或者了解其实现原理,则需要看更多的参考文献。下面列出我写的《多核计算与程序设计》一书的第3OpenMP程序设计中的参考文献,供需要深入掌握的人参考。其中的文献2讲解了OpenMP的实现原理。

  • 相关阅读:
    java实现微信红包分配算法
    认识J2SE
    java设计模式(2)
    java设计模式(1)
    模拟做饭系统(java+线程中的join方法)
    学习接水系统(java+thread线程)
    1. linux系统简介
    Codeforces Round #350 (Div. 2)解题报告
    2014蓝桥杯决赛解题报告
    末学者笔记--Python函数一玄
  • 原文地址:https://www.cnblogs.com/lexus/p/2648424.html
Copyright © 2011-2022 走看看