- 浏览: 171580 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
boz.lee:
不错, 好多地方因为这里而出错
全局变量和局部变量在内存里的区别 -
issllx:
看到此文后对iteye深表遗憾
Yahoo S4 -
wohenshuaiba:
请问你有这个的代码吗?
k均值聚类(K-means) -
yxwang0615:
大神:
apr-1.3.3.tar.bz2
apr-util- ...
log4cxx编译方法 -
yxwang0615:
比csdn上的说的清楚干练,早看到这个就好了,我编了一天
p ...
log4cxx编译方法
进入多核时代后,必须使用多线程编写程序才能让各个CPU核得到利用。在单核时代,通常使用操作系统提供的API来创建线程,然而,在多核系统中,情况发生了很大的变化, 如果仍然使用操作系统API来创建线程会遇到一些问题。具体来说,有以下三个问题:
1)CPU核数扩展性问题
多核编程需要考虑程序性能随CPU核数的扩展性,即硬件升级到更多核后,能够不修改程序就让程序性能增长,这要求程序中创建的线程数量需要随CPU核数变化,不能创建固定数量的线程,否则在CPU核数超过线程数量上的机器上运行,将无法完全利用机器性能。虽然通过一定方法可以使用操作系统API创建可变化数量的线程,但是比较麻烦,不如OpenMP方便。
2)方便性问题
在多核编程时,要求计算均摊到各个CPU核上去,所有的程序都需要并行化执行,对计算的负载均衡有很高要求。这就要求在同一个函数内或同一个循环中,可能也需要将计算分摊到各个CPU核上,需要创建多个线程。操作系统API创建线程时,需要线程入口函数,很难满足这个需求,除非将一个函数内的代码手工拆成多个线程入口函数,这将大大增加程序员的工作量。使用OpenMP创建线程则不需要入口函数,非常方便,可以将同一函数内的代码分解成多个线程执行,也可以将一个for循环分解成多个线程执行。
3)可移植性问题
目前各个主流操作系统的线程API互不兼容,缺乏事实上的统一规范,要满足可移植性得自己写一些代码,将各种不同操作系统的api封装成一套统一的接口。OpenMP是标准规范,所有支持它的编译器都是执行同一套标准,不存在可移植性问题。
综上所述,在多核编程中,使用OpenMP就很有必要,下面列出以前发表在我的CSDN博客中的OpenMP文章,供大家参考。
介绍OpenMP程序在并行计算时的效率,在双核CPU上效率增加了整整一倍。 阅读全文
1、fork/join并行执行模式的概念 2、OpenMP指令和库函数介绍 3、parallel 指令的用法 4、for指令的使用方法 5 sections和section指令的用法。阅读全文
本文主要介绍了OpenMP中的private、firstprivate、lastprivate、threadprivate、reduction、copyin、copyprivate等数据处理子句的用法。 阅读全文
本文主要介绍了OpenMP中任务调度子句schedule的使用方法。阅读全文
主要比较了原子操作,Windows CriticalSection, OpenMP库带的锁在单任务运行情况下和多任务运行情况下的性能情况,在多核CPU上,多任务的锁竞争花费的时间是单任务时的锁运行花费时间的18倍。锁竞争带来的效率下降完全出乎意料之外,由此也可见多核编程和单核多线程编程是有很大区别的。 阅读全文
讲述了如何动态设置线程数量以适应硬件和软件的扩展性,如何将嵌套循环并行化的技巧。 阅读全文
上面列出的这些OpenMP知识,属于初步的入门知识,如果需要进一步深入掌握OpenMP或者了解其实现原理,则需要看更多的参考文献。下面列出我写的《多核计算与程序设计》一书的第3章OpenMP程序设计中的参考文献,供需要深入掌握的人参考。其中的文献【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 OpenMP,A Directive-based API for Parallel Processing on Shared-memory Computers,http://scv.bu.edu/documentation/tutorials/OpenMP/
【6】 Michael J. Quinn, “MPI与OpenMP并行程序设计”,陈文光等译,清华大学出版社,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.
发表评论
-
Yahoo S4
2011-04-06 21:19 3480目前最流行的大规模数据处理是MapRed ... -
Yahoo S$
2011-04-06 21:19 53目前最流行的大规模数据处理是MapReduce ... -
CUDA SDK2.3 示例程序说明
2010-12-21 17:13 2271alignedTypes 演示了数据类 ... -
Tesla架构下的CUDA程序优化
2010-09-02 17:41 1405CUDA优化的最终目的是:在最短的时间内,在允许的误差范围 ... -
正确设置编译选项以利于英特尔® Parallel Inspector线程错误分析
2010-04-02 16:33 1302简介:英特尔® Parallel Inspector 能够分析 ... -
在英特尔® Parallel Amplifier 中使用求差功能查找性能下降
2010-04-02 16:33 810简介: 应用程序开发 ... -
揭秘英特尔® Parallel Amplifier
2010-04-02 16:32 838英特尔® Parallel Amplifier ... -
与英特尔® Parallel Amplifier 有关的编译器选项
2010-04-02 16:32 1300简介:英特尔® Parallel Amplifier 能够分析 ... -
英特尔® Parallel Amplifier 入门
2010-04-02 16:31 1046英特尔® Parallel Amplifier 可分析并提供关 ... -
英特尔® Parallel Composer 入门
2010-04-02 16:31 1127英特尔® Parallel Composer 软件开发产品能够 ... -
转载笔记(Windows下配置和运行)
2010-04-02 16:25 937我想主要的问题是权限 ... -
VC6环境下的MPI配置(转)
2010-04-02 16:24 2099MPI开发包安装 下载完毕,开始安装MPI ... -
MPI的并行程序设计
2010-04-02 16:23 1794使用VC8.0及MPICH2-1.0.5 for ... -
MPICH2 与编译环境的整合
2010-04-02 16:23 1555我所使用的开发语言是C/C++,运行在两种环境下,分别是:Mi ... -
MPICH2在WINDOWS下的安装配置
2010-04-02 16:22 4726MPICH2是与MPI-2相对应的MP ... -
MPICH 的安装
2010-04-02 16:22 3202MPICH 的安装(for winXP) 为了做MPI ... -
hadoop 学习(转)
2010-04-02 16:20 1070Hadoop 的文件系统,最重 ... -
Hadoop安装部署(转)
2010-04-02 16:20 671本文主要是以安装和使 ... -
Hadoop入门(转)
2010-04-02 16:19 760Hadoop 是Google MapReduce的 ... -
Hadoop分布式文件系统:架构和设计要点Ⅱ(转)
2010-04-02 16:18 730五、文件系统元数据的持久化 Namenode存储HDFS ...
相关推荐
### OpenMP编程指南知识点概述 #### 一、OpenMP简介及背景 - **多核时代的挑战**:随着处理器技术的发展,现代计算机系统普遍采用多核架构。为了充分利用这些硬件资源,开发人员需要采用多线程编程技术。在单核...
OpenMP编程指南.ppt
OpenMP是一种编程接口,用于在共享内存系统上进行多线程并行程序设计。它支持C、C++和Fortran这三种广泛使用的编程语言。OpenMP提供了API(应用程序编程接口),允许程序员在不改变原有代码结构的情况下,加入多线程...
OpenMP API用户指南全面覆盖了OpenMP的核心概念、功能、使用技巧和最佳实践,是开发者学习并行编程、优化多线程应用程序性能的重要资源。通过遵循指南中的指导原则,开发者能够更有效地利用多核处理器的潜力,提高...
本资料包含《CUDA并行程序设计 GPU编程指南》和《CUDA专家手册++GPU编程权威指南》两本书,将深入探讨CUDA编程的核心概念和技术。 《CUDA并行程序设计 GPU编程指南》可能涵盖了以下内容: 1. **CUDA概述**:解释...
OpenMP(Open Multi-Processing)是一种并行编程模型,它主要设计用于共享内存的多处理器系统,例如桌面计算机。在单线程的程序执行中,如果计算机拥有两个或更多的处理器、核心,或者支持超线程的处理器,那么只有...
OpenMP(Open Multi-Processing)是一个被广泛使用的并行编程模型,它提供了一种简单高效的方式来实现Fortran程序的并行化。本文将详细介绍OpenMP在Fortran中的使用方法,包括并行区域的创建、并行循环、数据环境...
### OpenMP API 用户指南知识点详解 #### 一、OpenMP API 简介 **OpenMP** (Open Multi-Processing) 是一种应用编程接口(API),用于并行编程,主要针对多线程共享内存计算机。它允许开发人员通过简单的编译器指令...
《iwomp2005_tutorial_openmp》一文提供了对OpenMP的全面入门指导,旨在帮助初学者理解和掌握OpenMP编程模型与技术。OpenMP(Open Multi-Processing)是一种多线程编程标准,用于在共享内存架构上并行化程序,特别...
《OpenMP 3.0并行编程指南》 OpenMP(Open Multi-Processing)是一种用于共享内存多处理器系统上的并行编程模型,它为C、C++和Fortran等编程语言提供了一种标准的接口。OpenMP 3.0是这一系列规范的一个重要版本,...
Fortran90编程指南 Fortran90是Fortran语言的一个重大更新版本,它在保留了Fortran传统优势的同时,引入了许多现代化的编程特性,旨在提高代码的可读性、可维护性和模块化。本指南将深入探讨Fortran90的基础知识、...
“FORTRAN编程指南”文档应该包含逐步教程、实例代码和常见问题解答,帮助初学者快速掌握Fortran的基本语法和编程技巧。此外,还可以参考其他在线资源,如GFortran官方文档、Netlib的Fortran资源库以及各种Fortran...
OpenMP命令速查表是一种快速参考指南,帮助开发者查找和应用OpenMP中常用的指令。 在C/C++中,OpenMP使用预处理指令#pragma来引入并行性。一个典型的OpenMP指令以 omp 前缀开始,例如 #pragma omp parallel for。...
### OpenMP 入门指南 #### 一、OpenMP简介 OpenMP(Open Multi-Processing)是一种用于共享内存多处理器编程的标准API,在C/C++和Fortran语言中广泛应用。它提供了一种简单的方法来创建并行程序,尤其适用于那些...
1. **OpenMP简介**:OpenMP是一种多线程并行编程模型,主要用于在共享内存架构上实现并行处理。 2. **科学与工程计算**:讨论了如何在科学计算和工程领域应用OpenMP进行高效计算。 3. **数据并行编程**:介绍了一种...
本指南针对初学者,将深入探讨多核编程的基本概念,帮助你理解和掌握如何利用多核处理器的并行计算能力。 首先,我们要理解什么是多核编程。多核编程是指在具有两个或更多处理核心的处理器上编写程序,以便同时执行...
手册《OpenMP 4.0 手册》提供了详细的指南和规范,帮助开发者理解和利用OpenMP 4.0进行高效编程。 1. **并行计算基础** 并行计算是同时处理多个任务或数据的技术,以提高计算速度和系统吞吐量。OpenMP通过提供一种...
### OpenMP API 用户指南(Sun Studio) 知识点概览 #### 1. OpenMP API 简介 **OpenMP** (Open Multi-Processing) 是一种用于编写可移植的共享内存多线程程序的标准应用程序接口(API)。Sun Studio 的 OpenMP API ...