`
ld_hust
  • 浏览: 171580 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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的实现原理。

【1】           Ananth Grama, Anshul Gupta,“并行计算导论”,张武等译,机械工业出版社,2005.01

【2】           Barbara Chapman How OpenMP is Compiled ”,http://cobweb.ecn.purdue.edu/ParaMount/iwomp2008/documents/chapman-underthehood

【3】           Bruce McMillin等,“Parallel Algorithm Fundamentals and Analysis”,http://citeseer.ist.psu.edu/mcmillin93parallel.html

【4】           Common Language Infrastructure (CLI) Partitions I to VI http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-335.pdf

【5】           Introduction to OpenMPA Directive-based API for Parallel Processing on Shared-memory Computershttp://scv.bu.edu/documentation/tutorials/OpenMP/

【6】           Michael J. Quinn, “MPIOpenMP并行程序设计”,陈文光等译,清华大学出版社,2004.10

【7】           Mitsuhisa Sato, Shigehisa Satoh, Kazuhiro Kusano and Yoshio Tanaka, “Design of OpenMP Compiler for an SMP Cluster”,

http://www.hpcs.is.tsukuba.ac.jp/~msato/pdplab/papers/ewomp99.pdf

【8】           MSDN帮助材料

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vclang/html/652414c5-78ed-4b7f-8283-1a9fe4c5e78d.htm  

【9】           Omni OpenMP compiler, http://phase.hpcc.jp/omni/home.html.

【10】       OpenMP2.0规范     http://www.openmp.org/

【11】       OpenMP2.5规范     http://www.openmp.org/

【12】       OpenMP: Simple, portable, scalable SMP Programming, http://www.OpenMP.org.

【13】       Rudolf Eigenmann and Timothy G. mattson. OpenMP tutorial, part 2: Advanced OpenMP.”, http://www.cise.ufl.edu/research/ParallelPatterns/sc01-omp-tut-advanced.ppt.

【14】       Ruud van der Pas ,“An Introduction Into OpenMP”,http://www.nic.uoregon.edu/iwomp2005/iwomp2005_tutorial_openmp_rvdp.pdf

【15】       Sanjiv Shah, Grant Haab, Paul Petersen, & Joe Throop,“Flexible Control Structures for Parallelism in OpenMP”,http://www.it.lth.se/ewomp99/papers/grant.pdf

【16】       Shameem Akhter等,“多核程序设计技术-通过软件多线程提升性能”,电子工业出版社,2007.03

【17】       Special issue on OpenMP and its applications. Scientific Programming, 11(2),2003.

【18】       Y. Charlie Hu, Honghui Lu, Alan L. Cox, and Willy Zwaenepoel. OpenMP for networks of SMPs”,In Proceedings of 13th International Parallel Processing Symposium and 10th Symposium on Parallel and Distributed Processing, page 302-310. IEEE Computer Society, 1999.

分享到:
评论

相关推荐

    openmp编程指南.pdf

    ### OpenMP编程指南知识点概述 #### 一、OpenMP简介及背景 - **多核时代的挑战**:随着处理器技术的发展,现代计算机系统普遍采用多核架构。为了充分利用这些硬件资源,开发人员需要采用多线程编程技术。在单核...

    OpenMP编程指南.ppt

    OpenMP编程指南.ppt

    OpenMP用户指南.pdf

    OpenMP是一种编程接口,用于在共享内存系统上进行多线程并行程序设计。它支持C、C++和Fortran这三种广泛使用的编程语言。OpenMP提供了API(应用程序编程接口),允许程序员在不改变原有代码结构的情况下,加入多线程...

    OpenMP_API_用户指南

    OpenMP API用户指南全面覆盖了OpenMP的核心概念、功能、使用技巧和最佳实践,是开发者学习并行编程、优化多线程应用程序性能的重要资源。通过遵循指南中的指导原则,开发者能够更有效地利用多核处理器的潜力,提高...

    CUDA并行程序设计 GPU编程指南 + CUDA专家手册

    本资料包含《CUDA并行程序设计 GPU编程指南》和《CUDA专家手册++GPU编程权威指南》两本书,将深入探讨CUDA编程的核心概念和技术。 《CUDA并行程序设计 GPU编程指南》可能涵盖了以下内容: 1. **CUDA概述**:解释...

    openMP学习指南.doc

    OpenMP(Open Multi-Processing)是一种并行编程模型,它主要设计用于共享内存的多处理器系统,例如桌面计算机。在单线程的程序执行中,如果计算机拥有两个或更多的处理器、核心,或者支持超线程的处理器,那么只有...

    Fortran与OpenMP:并行编程实践指南

    OpenMP(Open Multi-Processing)是一个被广泛使用的并行编程模型,它提供了一种简单高效的方式来实现Fortran程序的并行化。本文将详细介绍OpenMP在Fortran中的使用方法,包括并行区域的创建、并行循环、数据环境...

    OpenMP+API+用户指南.pdf、并行计算

    ### OpenMP API 用户指南知识点详解 #### 一、OpenMP API 简介 **OpenMP** (Open Multi-Processing) 是一种应用编程接口(API),用于并行编程,主要针对多线程共享内存计算机。它允许开发人员通过简单的编译器指令...

    iwomp2005_tutorial_openmp

    《iwomp2005_tutorial_openmp》一文提供了对OpenMP的全面入门指导,旨在帮助初学者理解和掌握OpenMP编程模型与技术。OpenMP(Open Multi-Processing)是一种多线程编程标准,用于在共享内存架构上并行化程序,特别...

    openmp-3.0.rar

    《OpenMP 3.0并行编程指南》 OpenMP(Open Multi-Processing)是一种用于共享内存多处理器系统上的并行编程模型,它为C、C++和Fortran等编程语言提供了一种标准的接口。OpenMP 3.0是这一系列规范的一个重要版本,...

    Fortran90编程指南

    Fortran90编程指南 Fortran90是Fortran语言的一个重大更新版本,它在保留了Fortran传统优势的同时,引入了许多现代化的编程特性,旨在提高代码的可读性、可维护性和模块化。本指南将深入探讨Fortran90的基础知识、...

    fortran 编程指南 应该有用

    “FORTRAN编程指南”文档应该包含逐步教程、实例代码和常见问题解答,帮助初学者快速掌握Fortran的基本语法和编程技巧。此外,还可以参考其他在线资源,如GFortran官方文档、Netlib的Fortran资源库以及各种Fortran...

    openmp命令速查表

    OpenMP命令速查表是一种快速参考指南,帮助开发者查找和应用OpenMP中常用的指令。 在C/C++中,OpenMP使用预处理指令#pragma来引入并行性。一个典型的OpenMP指令以 omp 前缀开始,例如 #pragma omp parallel for。...

    OpenMP--HowToGuide

    ### OpenMP 入门指南 #### 一、OpenMP简介 OpenMP(Open Multi-Processing)是一种用于共享内存多处理器编程的标准API,在C/C++和Fortran语言中广泛应用。它提供了一种简单的方法来创建并行程序,尤其适用于那些...

    Using OpenMP英文原版

    1. **OpenMP简介**:OpenMP是一种多线程并行编程模型,主要用于在共享内存架构上实现并行处理。 2. **科学与工程计算**:讨论了如何在科学计算和工程领域应用OpenMP进行高效计算。 3. **数据并行编程**:介绍了一种...

    多核编程指南

    本指南针对初学者,将深入探讨多核编程的基本概念,帮助你理解和掌握如何利用多核处理器的并行计算能力。 首先,我们要理解什么是多核编程。多核编程是指在具有两个或更多处理核心的处理器上编写程序,以便同时执行...

    OpenMP 4.0 手册

    手册《OpenMP 4.0 手册》提供了详细的指南和规范,帮助开发者理解和利用OpenMP 4.0进行高效编程。 1. **并行计算基础** 并行计算是同时处理多个任务或数据的技术,以提高计算速度和系统吞吐量。OpenMP通过提供一种...

    OpenMP API 用户指南(Sun Studio).pdf

    ### OpenMP API 用户指南(Sun Studio) 知识点概览 #### 1. OpenMP API 简介 **OpenMP** (Open Multi-Processing) 是一种用于编写可移植的共享内存多线程程序的标准应用程序接口(API)。Sun Studio 的 OpenMP API ...

Global site tag (gtag.js) - Google Analytics