基于OpenMP的多核程序设计

更新时间:2023-05-31 08:21:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2010年第9期

SCIENCE&TECHNOLOGYINFORMATIONOIT论坛。科技信息

基于OpenMP的多核程序设计

周淑贤

(中南林业科技大学信息与计算机工程学院

湖南长沙410004)

【摘要J多核技术的发展正引领软件研发发生基础性的变化。开发人员可以在代码中添加线程来利用系统所提供的多个内核。从而提升PC应用软件的功能和性能。本文介绍了共享存储系统并行编程接口OpenMP的模型、指令和库函数,以厦IntelC++编译嚣9.1和MicrosoftVisualStudio2005等对OpenMP的支持;着重探讨了二雏离散快速傅里叶变换并行算法的设计、实现与优化技术;展望了高性能并行计算软构件库的开发前景。

【关键词】多核计算机;并行计算;多线程;OpenMP

OpenMP-basedProgramming

(College

【Abstract]Softwaredevelopmentwill

to

on

Multi--corePC

ZHoUShu-xian

ofComputer&InformationEngineering,CentralSouthUniversityofForestry&Technology,ChangshaHunan,410004)

receive

foundationalinnovation

makefull

USe

ofthenew

processor,thatimprovesbothfunction

requires

all

byreasonofmulti--coretechnology.Programmersaddthreadsintocodes

andperformanceofIntemetapplications.Originatesfromparallelprogrammingon

multi--corecomputers.UsingtheOpenMPprograms

9.1

andMicrosofiVisualStudio2005

design,realizationand

are

Open

MP--eompatiblecompilerandthread--safelibraries.bothIntelC++compiler

perfectchoice,Thenstudiedtwo--dimensionaldiscretefastFouriertechnology.Finally,thoughtthathish

transform(F踊,focused

software

component

on

parallel

programoptimization

performanceparallel

computing

librarymustbe

perfectexploitationfieldinthefurtherfuture.

【Keywords】Multi--corecompute;OpenMP

O背景

在现有工艺下.改善CPU性能的传统方法如提升时钟速度和指令吞吐量等在摩尔定律限制下已经难有大的进展。近年来新型芯片性能提升将主要从超线程.多核和缓存三个方面人手,其中最为瞩目的当属多核技术。Intel、AMD等主要的处理器厂商均将提高处理器性能的途径从提高主频转向整合多个处理引擎。多核引领软件研发发生基础性变化。开发人员需要在代码中添加线程来利用系统所提供的多个内核,并将对性能比较敏感的代码分隔在多个内核上,但同时又必须确保代码具有良好的可伸缩性,无论在单核、双核、四核或者更高级别的计算机七,同样的代码都必须能够运行良好。传统程序基本上是为顺序处理器书写的.大部分程序在多处理器上不能直接获得加速。解决这一问题的途径之一是使用多处理器编译器把顺序程序自动转换为并行程序。多核处理器编译器的自动并行化功能能够解决一部分问题,但是依然不能令人满意。解决这一问题的另一途径是手工重写程序库。长期以来.计算机界积累了大量的库程序,尤其是在科学计算领域,经典算法均已收入库程序。如果把程序库中所有程序用适合并行计算的方法莺写。那么用户在写应用程序时就可以直接调用这些并行程序库,从而加速应用程序的运行。目前可选择的多核多线程开发工具有Win32线程库、p111read库以及OpenMP。Win32线程库运行于winNT和win9X平台,拥有完善丽复杂的函数库.目前比较成熟,但对编程人员有较高的要求:pThread库是Linux下最常用的多线程支持库,具有方便移植的特点,但使用难度比较大:OpenMP则针对共享地址空间的并行计算机提供并行计算支持,具有使用简单的特点。目前Intel极力推荐多线程开发工具OpenMP,在IntelC++编译器9.1、

MicrosoftVisual1

共享存储模型是一般的集中式多处理机的抽象。其底层为一系列处理器,这砦处理器访问同一个共享存储器。由于所有处理器可以访问内存中的同一位置.因而它们可以通过共享变量进行交互和同步。OpenMP采用了共享存储中标准的并行模式fjrk—ioin,当程序开始执行时只有主线程存在。主线程执行程序的串行部分,通过派生出其他的线程来执行其他的并行部分。当重新执行程序的串行部分时.这些线程将终止。

1.2

OpenMP指令

工业标准OpenMP是对C语言的一个扩展。目的是支持并行程序设计。书写OpenMP程序同书写C语言程序相似,只是在c程序中加入了OpenMP的编译指示。这些编译指示描述了程序应该以何种方式并行执行。加入了OpenMP指示的C程序可以由任意支持OpenMP的编译器编译,在不同平台的硬件上执行。OpenMP编译器命令以#pragma开始.在其后面是omp,名字和可选的子句,并用新行结束。某些子句可出现在不同的命令中,但需要对它们加以分别的定义。某些命令将作用于整个结构块,所渭的构造是由编译器命令及跟在其后的结构块所组成。在C/C++中,OpenMP指令使用格式是#pragmaomp指令【子句[子句】...】。OpenMP编译制导包括并行域结构、共享任务结构、组合的并行共享任务和同步结构四类。OpenMP编译制导可根据需要包含子句项,在没有其它约束条件下.子句可以无序,也可以任意地选择。#pragma

omp

parallelfor{子句…]是最频繁使用的编译指导语句,可

搭配使用的子句有firstprivate,if,lastprivate。private,reduction,schedule等。fimtprivate子句指定每个线程都有它自己的变景私有副本,并且变量要被继承主线程中的初值;lastprivate子句指定将线程中的私有变量的值在并行处理结束后复制回主线程中的对应变量:private子句指定每个线程都有它自己的变量私有副本:reduction子句指定一个或多个变量是私有的。并且在并行处理结束后这些变量要执行指定的运算;schedule子句指定如何调度for循环迭代。

1.3

Studi02005等都增加了对OpenMP的支持。

OpenMP剖析

OpenMP是一个为在共享存储的多处理机上编写并行程序而设计的应用编程接口.由一个小型的编译器命令集组成。包括一套编译制导语句和一个用来支持它的函数库。OpenMP是通过与标准Fortran,C和c+十结合进行工作的,对于同步共享变量、合理分配负载等任务,都提供了有效的支持.具有简单通用、开发快速的特点。OpenMP是可移植多线程应用程序开发的行业标准,在细粒度(循环级别)与粗粒度(函数级别)线程技术上具有很高的效率。OpmMP自动将循环线程化,提高多处理器系统上的应用程序性能。用户不必处理迭代划分、数据共享、线程调度及同步等低级别的细节。目前IntelC++编译器9.1、Studi02005均支持OpenMP2.5。文中

Studio主要介绍在MierosofiVisual2005中OpenMP的使用。

Visual

OpeaMP库函数

OpenMP使用库函数<omp.h>,库函数包括执行环境函数、锁函数

和定时三类。

2FFT并行算法探讨

2.1二维离散快速傅里叶变换(H)数字图像处理中进行频谱分析经常使用二维傅里叶变换(Fn),二维傅里叶变换在一维傅里叶变换的基础上推导得出.即将一个二维傅里叶变换的运算分解成水平和垂直方向上的一维傅里叶变换运算。一维离散傅里叶变换公式为:

C++8.0和MicrosofiVisual

1.1

OpenMP模型

删=古弘弦~

科技信息OIT论坛0

SCIENCE&TECHNOLOGYINFORMATION

2010年第9期

在此基础上的一个尺寸为MxN的图像二维离散傅里叶变换由

}l

#pr8smaompparallel指定后面的语句块由每个CPU并行执行。串行版本中的for循环分派到2个CPU中,每个CPU分别对图像中的

m,”)2亩磊磊触,力e和删M

给出。具体实现算法如下:

(1)获取原图像的数据区首地址、图像的高度和宽度,计算进行傅里叶变换的图像宽度和高度及水平、垂直方向的迭代次数。

(2)按行列顺序依次读取数据区的值,存储到开辟的复数存储区。(3)调用一维傅里叶变换函数进行垂直方向的变换。

(4)转换变换结果,将垂直方向的变换结果转存回时域存储区。(5)调用一维傅里叶变换函数进行水平方向的变换。

(6)将计算结果转换成可显示图像,并将坐标原点移至图像中心位置,使图像可以显示整个周期频谱。

二维离散快速傅里叶变换是数字信号处理的重要工具。但是计算量较大运算时间较长在某种程度上限制了使用。为了解决这一矛盾,引入OpenMP,充分利用双核技术从而达到快速运算目的。2.2FFT算法的并行处理

实验平台为DellOptiplexGX630系列双核台式机。采用IntelLakeport--Gi945G芯片组,IntelPen—tiumDCPU2.80GHz,高速缓存1MB,前端总线800MHz,内存HYDualDDR2SDRAM1G。操作系统为MicrosoftWindowsXPProfessional5.1.2600(WinXPRetail).编译器为Micmsoft

Visual

,邕盟

奇、偶数列做一维FFr变换。parallel指令用于为一段代码创建多个线程且并行执行的。与传统的创建线程函数相比,相当于为一个线程入口函数重复调用创建线程函数来创建线程并等待线程执行完。转换变换结果代码部分使用#pra肿aompparallelfor语句将一个for循环分配到多个线程中执行。OpemnP具有运行时为当前计算机自动创建最佳线程数的优异特性,如果在单核处理器上运行代码,则将在一个线程上运行所有代码.如果在双核处理器上运行相同代码,就将在两个线程上运行代码。代码将在其当前计算机上自动调整至最佳状态.以尽可能实现最大加速比。3结语

OpenMP是针对共享地址空间并行计算机提供的并行计算库.目前Microsoft和Borland公司都有相应产品支持OpenMP2.5。使用OpenMP不必写诸如CreateThread之类的线程管理代码.编写多线程程序简便高效,而且OpcnMP提供了丰富的指令,对于同步共享变量、合理分配负载等任务,都提供了有效的支持。不过OpenMP也存在着一些不可避免的缺点:第一.OpenMP主要以预编译指令(#pragnm)实现多线程并行.所以在单核机器上编译的程序在多核机器上运行时无法体现多核的优势;第二,OpenMP对编译器要求比较高,一般要求MicrosoftVisualStudio2005或者需要Intel编译器。不过长远来讲,OpenMP的优势是明显的。Intel技术官曾说“今后的处理器发展是内部优化与集成多核而不是单纯地提升处理器的频率.采用多线程的软件也将会是今后软件的主流。”世界正在进入多处理器时代,OpenMP

Studi02005。并行版本:Microsoft

VisualStudio2005

中通过一个编译开关选项支持OpenMP。在并行版本的项目属性对话框“配置属性”中的“C/c++”语言页里.将OpenMP支持选项改为“是/

(0pe眦P)“就能够支持OpenmP。在二维离散快速傅里叶变换C程序串

行版本中,一维离散快速傅里叶变换主要以列(或者行)的方式进行n变换,f研循环中不存在数据相关的限制,每次循环基本独立。后一次循环不依赖于前面的循环,即满足并行执行的要求.因此在双核平台上可以使用Open--MP指令把一维离散快速傅里叶变换的操作分派到2个CPU上分别执行。下面以垂直方向一维快速傅里叶变换为例.并行计算的主要代码如下:

#pragnmompparallel

库将成为程序员必不可少的工具。≮

【参考文献】

[1]陈国良.并行算法实践[MI.北京:高等教育出版社.2004.

[2]赖建新,胡长军.赵字迪,等,0penMP任务调度开销及负载均衡分析m.计算机工程.2006.18:(sup)58—60.[3]Gmnm,Ananth.Int_,xMuction

2003.

tOparalel

private(i)

int

id=omF--get---thread--num0;

i=id;

computing[M].北京:机械工业出版社,

while(i<w)

QrC(&t[i4h],s4i+h】,hp);

i---i+2:

[4][需,]ShameemAkhter,f美llasonRoberts.李宝峰,等,译.电子工业出版社,

2007.

【责任编辑:汤静】

(上接第62页)应进行周期性的检查。使所有的El常操作都符合用户需求分析中所制定的要求。

严格的说,电子记录和电子签名的使用并不是制药企业所特有的,可以说适合于所有类型的企业。但由于药品的特殊性,需特别提出对于制药企业使用电子记录和电子签名所要关注的应用和管理方法.同时,这也是GMP审计过程中计算机系统验证的一个要点。5权限管理

权限管理是ERP系统中的难点,相对其他模块的设置更复杂和难以维护。除了需要了解业务中的具体操作流程.还要清晰了解流程中可能潜在出现的问题。权限分离是通过在系统中对日常业务流程中分离操作权限来降低产生错误(包括有意无意的)的可能性。它的目标是在设置权限分离以后,确保在系统中没有任何人可以在权限范围内产生错误,并能在不被人发现的情况下掩饰错误。这对于及早发现并阻止公司内恶意的欺诈行为有着非常重要的意义。

权限分离的设计思路通常首先搜寻在业务流程中可能潜在出现的职权滥用和冲突,然后分离流程的步骤并把每一步授权给不同的人员,同时需要确保所授权限与授权人的岗位描述所一致。在日常流程中,公司需没有专职人员对设置的权限分离进行周期性查看修正并由主管部门审核。而由于客观原因缺乏权限分离机制的操作(例如公司

人员数量不够).则需建立额外的审核工作以确保流程中没有出现潜在的问题,并由主管部门审核特别批准。6文档管理

GMP要求在药品生产相关电子设备运行的过程中必须须根据既定的书面规范对其做定期的检查,检验和校准,以保证其性能稳定.同时,检验检查的书面报告必须存档保存。对于日常业务的操作也需要有可追溯性,因此对文档需要做全面的规范管理。

总的来说,在ERP实施过程中对于控制点的管理并不能单独地.孤立地应用某一方案去解决,而是需要交叉地。综合地运用多种策略共同对要点进行管理,例如通过操作和监控。不同模块之间的数据相互检验,权限的审批和复查,文档和报表的记录来做到控制。ERP项目实施没有统一的标准,但希望企业能抓住其要点并由此展开,实施出一套能

够运营流畅,并能符合专业审计要求的系统来满足企业需求。l,’

作者简介:戴鼻.上海交通大学信息安全学院项目管理专业在读硕士研究生,三德士(中国)制药有限公司IT经理。

[责任编辑:翟成梁】

本文来源:https://www.bwwdw.com/article/49u4.html

Top