首页IT科技openmp源码(OpenMP编程指南 周伟明的多核、测试专栏 博客频道 CSDN.NET)

openmp源码(OpenMP编程指南 周伟明的多核、测试专栏 博客频道 CSDN.NET)

时间2025-08-02 09:47:36分类IT科技浏览6650
导读:2009-04-20 10:13 28708人阅读...

2009-04-20 10:13 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文章       ,供大家参考                      。

1               、OpenMP并行程序设计(一)

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

2                       、OpenMP并行序设计(二)

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

3       、OpenMP中的数据处理子句

本文主要介绍了OpenMP中的private                      、firstprivate                、lastprivate、threadprivate                      、reduction                       、copyin、copyprivate等数据处理子句的用法               。 阅读全文

4               、OpenMP中的任务调度

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

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

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

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

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

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

声明:本站所有文章        ,如无特殊说明或标注               ,均为本站原创发布                。任何个人或组织                       ,在未征得本站同意时        ,禁止复制               、盗用                       、采集        、发布本站内容到任何网站       、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益       ,可联系我们进行处理                      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网络推广网站的方法(网络推广怎样进行排名靠前) dhcp面临的安全威胁包括(DHCP安全维护范围有哪些?)