《高性能科学与工程计算》——3.3 案例分析:Jacobi算法

简介:

本节书摘来自华章计算机《高性能科学与工程计算》一书中的第3章,第3.3节,作者:(德)Georg Hager Gerhard Wellein 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 案例分析:Jacobi算法

Jacobi算法是数值分析和模拟中许多基于stencil循环方法的原型。在其最简单的形式中,可以用来求解一个标量函数Φ (r→, t)的扩散方程:


6935477fcdbdba688434da563d51a8db1e49f96c

求解一个长方形区域的狄利克雷边界条件。当使用有限差分法时,其微分算子是离散的(在不丧失一般性的前提下,这里我们限定为二维方程。但请分析习题3.4中,二维和三维性能的区别)。

<a href=https://yqfile.alicdn.com/8804c4dad97f4db8d05562192a51a3edce664c51.png" >

在每一个时间步长,Φ在坐标(xi, yi)处的修正值δΦ,由式(3-7)使用其四个邻居点的原值计算获得。当然,Φ的新值必须写回第二个数组中。当所有点都完成更新后,算法进入下一层迭代。代码清单3-1是该内核的一个可能实现。该实现解决了稳定状态的问题但缺乏收敛条件,当然这不是我们考虑的重点(注意交换t0和t1区域不需要逐个元素交换。同该算法的初步实现相比,仅通过交换第三个数组的索引,我们就获得了两倍的性能提升)。
许多优化方法都可能加速这段代码。我们首先使用平衡分析预测这段代码的性能,然后和实测值相比较。图3-5说明了一个二维Jacobi算法的五点更新过程。每次更新需要四次数据加载和一次数据存储操作,但是其“下行邻居”(downstream)phi(i+1, k, t0)在两次迭代之后一定会再次用到(从cache中),所以在计算代码平衡值时,只有三次数据读取操作(共有四次):Bc = 1.0 W/F(如包含写分配,则代码平衡值为1.25 W/F)。然而,如图3-5所示,按行遍历会将k坐标最大(即phi(i,k+1,t0))的元素第一次加载到cache中。这是在内存传输中不可避免的。如果cache足以容纳超过两行的数据元素,那么在cache中三次连续的行遍历会使用这个元素。在这种情况下,我们可以假设加载k和k-1行没有时间消耗,所以代码平衡值降为Bc = 0.5 W/F(如果包含写分配,其值为0.75 W/F)。如果内层维度逐渐变大(如图3-5所示,列变多),必然要增加一个,最终三个额外的数据加载操作导致代码平衡值回到令人不愉快的Bc = 1.0(1.25) W/F。
代码清单3-1 二维Jacobi算法的简单实现

0cab912d181f14bec190f46964b8702897cfa8a2

根据这些平衡因子,我们可以计算出给定硬件架构上代码的lightspeed。3.1.2节已经给出了在英特尔Xeon 5160平台上的STREAM结果。当cache足以容纳两个连续行时,数据传输特点和STREAM COPY以及SCALE相匹配:一次数据加载、一次数据存储,再加上一次强制性写分配。因为Jacobi内核只包含一次乘法操作,而不是三次加法操作,所以理论的机器平衡值Bm = 0.111 W/F不得不进行修改。因此我们使用


<a href=https://yqfile.alicdn.com/f617fc7ea37162fa19d58297b82f576be4380b1b.png
" >

基于这个理论值,并假定写分配不能避免,因此:

<a href=https://yqfile.alicdn.com/ae186818b4f41dee138f36cd03358fb8769fd148.png
" >

其中,修正的理论峰值性能为P+max = 12•4/6GFlop/s = 8 GFlop/s,则预测性能为1.78GFlop/s。然而,基于表3-3列出的STREAM COPY值,该预测性能应再乘以0.38,实际预测性能为675 MFlop/s。随着内层维度的增大,cache已经不能够同时容纳两个甚至一个连续行,代码平衡值第一次上升为Bc = 1.0 W/F,最终为Bc = 1.25 W/F。图3-6 显示了附加各种限制和预测的、不同内层维度的性能对比图(为节省内存,当N较大时(即kmax<图3-6同时也引入一个新的性能指标:更新的区域数目(LUP) /秒。因为它强调“工作完成”而不是MFlop/s,所以更适合stencil算法。在我们的案例分析中,Flop和LUP间有一个简单的1 : 4的对应关系。但在一般情况下,MFlop/s会随着算法优化方法的使用而变化,例如使用不同编译器重新排列代码序列而导致每次更新所要执行的浮点数运算数目不同。然而,用户最感兴趣的是在一定时间内可以完成多少实际工作。LUP/s使得当底层问题相同时,不管采用何种优化方法,所有的性能都具有可比性。例如,许多处理器提供了Fused Multiply-Add(FMA)机器指令执行r = a + b•c操作:一次可执行两次浮点数运算。在这种情况下,因为每次浮点数运算延迟的减少,FMA可大幅提高性能。将代码清单3-1 Jacobi算法代码重写如下:

022d32933ab4af960526cdc57f86afd65cb2a157

这个版本用7次浮点数运算代替了4次浮点数运算;当算法是访存受限时,MLUP/s性能指标并没有发生变化(这留给读者使用平衡分析方法证明),但是MFlop/s却发生了变化。

相关文章
|
8天前
|
JSON 监控 算法
员工上网行为监控:利用Scala编写数据处理和分析算法
企业在数字化时代利用Scala进行员工上网行为监控,以确保合规和网络安全。通过Scala的数据处理和分析能力,读取CSV日志数据转换为DataFrame,分析员工行为,如统计最常访问网站。此外,还展示了将监控数据以JSON格式提交至公司网站的函数,实现实时信息更新与安全防护。
36 5
|
3天前
|
机器学习/深度学习 算法 数据可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
10 0
|
4天前
|
算法 搜索推荐 数据挖掘
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
13 0
|
4天前
|
算法 数据可视化 数据挖掘
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
10 0
|
4天前
|
数据采集 存储 算法
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
15 2
|
7天前
|
机器学习/深度学习 数据采集 算法
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
14 0
|
8天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
10天前
|
算法 数据可视化 搜索推荐
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
31 11
|
10天前
|
算法 数据可视化 大数据
圆堆图circle packing算法可视化分析电商平台网红零食销量采集数据
圆堆图circle packing算法可视化分析电商平台网红零食销量采集数据
36 13
|
10天前
|
算法 数据可视化 Python
R语言中使用多重聚合预测算法(MAPA)进行时间序列分析
R语言中使用多重聚合预测算法(MAPA)进行时间序列分析
16 0