基于OpenMP的多核程序设计(2)
时间:2025-03-09
时间:2025-03-09
科技信息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].北京 …… 此处隐藏:1013字,全部文档内容请下载后查看。喜欢就下载吧 ……