桥梁结构有限元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页)