桥梁结构有限元OpenMP并行计算研究

  • 格式:pdf
  • 大小:276.90 KB
  • 文档页数:4

2014年6月第6期 城市道桥与防洪 科技研究265 

桥梁结构有限元OpenMP并行计算研究 

杜亚光 (武汉市政工程设计研究院有限责任公司,湖北武汉430023) 

摘要:为提高程序计算速度,探索了并行编程方法及OpenMP在桥梁结构有限元程序计算过程中的应用,进行了桥梁结构有 限元程序中全过程并行化效率优化的实践,通过算例验证了并行计算的速度提升。OpenMP并行编程是一种适用于桥梁有限 元程序全过程的效率提升的方法 关键词:有限元;桥梁结构;OpenMP 中图分类号:U441 文献标识码:A 文章编号:1009—7716(2014)06—0265—03 

0前言 

通过整体刚度矩阵的带宽优化,更好的数值 

求解方法,只能在矩阵求解部分对计算速度有所 

提高,对于桥梁结构的设计计算分析任务,除了 

求解之外,各工况受力分析、活载计算分析等等 

工作,也需要花费很长时间,更理想的是探索一 

种适用于全过程的效率提升方法。 

随着现代计算机硬件技术迅速发展,并行计 

算这一技术已经成功的应用在了各个领域的计算 

分析中,以求达到充分利用硬件资源,提高计算 

分析效率的目的。 

目前针对具体矩阵求解有许多行之有效的方 

法[3_5],通用有限元理论 和编程方法【 】上的并行 

技术也有较多研究,然而,国内现有的一般桥梁 

结构分析软件鲜有能够并行计算的,本文基于这 

样的现状,针对多核PC机上的一般设计分析任 

务,运用OpenMP进行桥梁结构有限元程序的并行 

化,以提高设计算工作中的效率,缩短或者避免 

桥梁计算分析中“人等机器”的时间。 

1 OpenMP简介 

OpenMP[OMP]是基于共享变量的共享存储系 

统的一个编译器指令和库函数的集合,通过适当 

的添加一些编译制导语句,创建一种多线程的并 

行程序…,见图1。 

在一个串行程序的OpenMP并行编程工作中, 

主要包括任务划分、任务调度、任务同步和任务 通信几部分1 ,其中主要任务是考虑负载平衡和 

通信开销的并行任务划分,需要综合考虑执行总 

时间情况。在无重叠操作的假定下,并行程序的 

收稿时间:2014—02—19 作者简介:杜亚光(1988一),男,湖北京山人,助理工程师 从事桥梁设计工作。 F J F J O O O 0 主线程 R I R I L N L N 

图1 Fork-Join并行执行模型 执行时间 1为: 

= +ZT册+ 一 (1) 式中: 一 ——计算时间; 

——并行开销时间; 

——并行任务间相互通信时间。 

2桥梁结构有限元程序并行化 

根据共享变量的共享存储并行编程特点,在 

一般桥梁结构有限元计算的全过程中,可以在如 

下部分模块的并行化中开展工作:单元刚度矩阵 

的计算和整体刚度矩阵的组集,方程求解,单元 

杆端力及应力等计算,各种荷载工况的单独计 

算,活载影响线加载计算,一切数据依赖性较 

小、耗机时严重的循环任务等。本文在编制的串 

行有限元程序的基础上,进行了基于OpenMP的程 

序并行化工作。 

2.1 单元刚度矩阵的计算和整体刚度矩阵的组集 

并行化 

首先,单元数为eno,整体刚度阵和荷载向量 

分别为K和F,对单元刚度矩阵的计算和整体刚度 

矩阵的组集,过程如下: 

for(Long i=O;i<eno;++i) 

{ 1.计算i单元刚度矩阵ek,单元荷载等效节点 

荷载向量ef 

2.整体刚度矩阵拼装(ek一>K) 

3.整体荷载向量拼装(ef->F) 

 266科技研究 城市道桥与防洪 2014年6月第6期 

分析以上过程可知,相对于共享变量的并行 

模式,对于以上过程,ek和ef为私有变量,可以 

使用功能函数pfivate(ek,ef)指明;其余的变量都 

是共享的,而其中K和F需要进行写操作,在多进 

程并行计算时,写操作需要设置互斥区域,添加 

#pragma omp critical{}子句制导;同时,为了减小 

并行任务分担时调度决策的系统开销,宜指定任 

务分块大小,此处使用功能函数schedule(static, 

block)完成,也可以有其他分块划分,最优情况 

需要根据进程数和任务量试算几次决定。 

进行了以上简单并行化处理之后,程序结构 

过程如下: 

int block=eno/core/x; 

#pragma omp parallel for private(ek,ef)schedule 

(static,block) 

for(Long i=0;i<eno;++i) 

{ 1.计算i单元刚度矩阵刚度矩阵ek,单元荷载 

等效节点荷载向量ef 

#pragma omp critical{ 2.整体刚度矩阵拼装(ek一>K) 

3.整体荷载向量拼装(ef_>F) 

} } 其中,程序在#pragma omp parallel for private 

(ek,ef)schedule(dynamic,block)处派生出若干线 

程,按最小任务块block ̄分任务,#pragma omp 

critical{}有效范围内的代码执行互斥,同时只能一 

个线程进行K和F的写操作。 block=eno/core/x是本文建议的一种任务块划 

分策略经验值,core为处理器核数(或者派生线程 

数),x为一个合适的正整数(1O、2O)。例如此处 

core为2(硬件环境:PC笔记本电脑,CPU为intel酷 

睿i3双核,内存2G),设置x为10,则schedule 

(static,block)可以指示将总任务划分为大 ̄'bblock 

(由于不能整除的原因,任务块大小和block接近) 

的20块任务的队列,由4个线程依次排队完成, 

这样,每个线程几乎可以均匀的分摊任务,达到 负载平衡的原则,同时避免默认按1为大小划分 

任务,缩小调度决策时间。 

2.2方程求解并行化 

方程求解在有限元程序计算中占用很大的时 

间,也存在着一定的并行化的可能性,以下仅就 

串行程序中使用的LDL 分解法并行化工作进行 

介绍。 

LDL 分解法由于整体刚度矩阵【 的正定对 

称性,可以唯一分解为[K]=LDL ,其中:为 的 转置矩阵,此时利用矩阵展开对应关系有: 

l巩=‰一∑ 

】f 

‰一∑ 1,2,… 

l m=l = +1,k+2,…, = /巩 分解后回带公式为: 

=6 一∑z i=1,2,…,n k=l zi=yi/d i=n,n-1,…,1 

z 一∑l , 一1,…,1 

可以看出,在三角分解和回带过程中,都存 

在按顺序计算的循环段,如式(2)中的累加计算 

k—l Ukm ,不存在数据依赖,就可以进行并行制 m=l 导。 

需要特别注意的是:程序使用了二维等带宽 

存储 ,进行LDLr分解法求解时,由于只有带宽 

Bw内的元素才需要参与计算,所有的三角分解和 

带入求解步骤中,每个元素的直接影响范围都是 

Bw行或者Bw行列,所以以上并行执行的效果都是 将Bw步内的任务并行执行,只有当Bw很大时,并 

行的优化效果才会更明显,通过对不同带宽实例 

的计算发现,Bw较小时,没有太大优势,甚至由 

于并行任务划分和线程调度,使程序更慢。 

2.3单元杆端力计算并行化 杆端力求解是典型的循环任务并行的例子, 

没有私有的变量,例如3 1300个杆单元的杆端力计 

算,可以完全分离为3 000个互不干涉的计算任 

务,简单的使用#pragma omp parallel for语句制导 

完成并行化,基本流程如下: 

//读取单元等效节点荷载 、单元杆端位移解 

vn和单元刚度矩阵关键元素文件ke 

read(); 

#pragma omp parallel for 

for(1ong i_0;i<单元数eno;i++) 

{ 1.计算单元方向向量,杆端位移转化到单元 

坐标系下; 

2.计算杆端力; 

} 

3并行编程效率验证及分析 

为了验证串行程序在进行并行化之后的效率 2014年6月第6期 城市道桥与防洪 科技研究267 

提升,以一个桁架结构计算为例进行说明,结构 

模型见图2,图中粗线平面为1 m×1 m的框架, 

延长度方向均匀布置,构成一个节点数6 000,单 

元数11 920的桁架结构。面内杆件为0.1 m×0.1 

m矩形杆件,轴向连接杆件采用0.3 m×0-3 m矩 

形杆件,材料为Q235钢,计算结构在自重作用下 

的节点位移和杆端力。 

图2并行算例结构图 首先利用编写的有限元程序串行执行,然后 

利用并行化后的程序执行计算,程序运行硬件环 境为PC笔记本电脑(处理器为intel酷睿i3双核,内 

存2G),对比了刚度矩阵计算及组集、结构求解 

和杆端力求解3部分的计算时间。 

表1中对比了A方案(半带宽54的节点编号方 

案)和B方案(半带宽138的节点编号方案)执行 

情况,分别列出了两种方案在串行及并行执行计 算中,各功能模块计算时间(除了数学计算,还 

包含了相应部分的数据文件输入输出)和CPU最大 

使用率情况。 

通过计算运行及上表的各项数值可以看出: 

(1)相对于串行执行,并行执行的机时在各部 

分都有一定的改善,其中,提速最明显的是“刚 

度矩阵计算及组集”,加速率高大46.2%,接近于 提高一倍;“结构求解”模块由于程序所用LOL 分 

解法数据的前后依赖性较强,可以并行执行的任 

务量相对较少;相比A,带宽更大的B方案可并行 

任务量更大,加速率有明显提高,为11.24%; 

“杆端力求解”中,单纯针对计算部分,加速率 

任然可以达到40%左右; 

(2)并行执行过程中,CPU最大使用率达98%, 

而串行执行不能突破25%,表明CPU资源在串行 

程序运行时存在严重闲置,并行计算时可以充分 

利用; 

在本算例中,并行执行的效率总不低于串行 

执行,虽然加速率有所浮动,但是加速总是有利 

(正)的。所以,结构有限元程序设计中,实施合 

理的并行编程是有利的。 

4 总结 

本文分析了OpenMP并行编程基础并编制了并 

行桥梁有限元程序,一般杆系有限元程序中并行 

化的过程和要点,并结合算例分析了并行程序执 

行的效率,通过分析可以发现: 

(1)有限元求解全过程中,相对于串行执行, 

并行执行的机时在各部分都有一定的改善,当于 

数据依赖和共享变量的访问冲突很少,双核CPU 

计算提高效率接近于一倍; 

(2)并行编程对程序的全过程执行效率提升都 有可观的效果和巨大的开发潜力,OpenMP并行编 

程概念清晰、编程简便,对于数据前后依赖性 小、变量的读写访问冲突少的重复任务的执行, 

有很好的提速效果,适合用于有限元程序的并 

行化。 

表1两种编号方案下程序各部分运行时间对} 

(下转第288页)