- 1、本文档共61页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
08-第八章-并行编译,算法实践-并行计算实践(共11章)
并 行 计 算 中国科学技术大学计算机科学与技术系 国家高性能计算中心(合肥) 2003年9月 并行编译概述 并行编译器的组成及任务 数据依赖关系 循环的向量化与并行化 并行编译器的组成及任务 数据依赖关系 Def1: 语句S和T,若存在变量x使之满足下述条件之一,则称语句T依赖于语句S,记为S ? T,否则S和T之间没有数据依赖关系: (1)流依赖 : S ?f T,若x?OUT(S)且 x?IN(T) 且T使用S计算出的x的值;T流依赖于S; (2)反依赖 : S ?a T,若x?IN(S)且 x?OUT(T) 但S使用x值先于T对x的定值;T反依赖于S; (3)输出依赖 : S ?o T,若x?OUT(S)且 x?OUT(T)但S较之T先对x进行定值; T输出依赖于S; 依赖关系示例 e.g. 考虑语句序列: S : A = B + D T : C = A * 3 U : A = A + C V : E = A / 2 依赖关系示例 e.g. 循环语句: for i = 1 to 100 do S : A[i] = B[ i+2] + 1; T : B[i] = A[i-1] – 1; end for 数据依赖关系 Def2:语句S和T在循环L中。如果S的实例S(i)和T的实例T(j)以及变量u?S,变量v ?T,满足: (1)u和v至少有一个是输出变量; (2)u?S(i)和变量v ?T(j)表示同一个存储单元M (3)在L的顺序执行中,S(i)先于T(j) (4)在L的顺序执行中, S(i)之间T(j)没有其他对M的写操作;则u、v引起T依赖于S,即S ? T,称为T(j)依赖于S(i), 其中: 流依赖: u ?OUT(S) , v ?IN(T) 反依赖: u ?IN(S) , v ?OUT(T) 输出依赖:u ?OUT(S) , v ?OUT(T) T 对S的依赖即为满足上述条件的偶对(S(i),T(j))的集合。 依赖距离和依赖向量 令α=(α1,α2,…,αn) 和β=(β1,β2,…,βn)是n层循环内的n个整数下标向量,假定α和β存在数据相关性,则依赖距离向量(Dependent Distance Vector)D = (D1,D2,…,Dn)定义为β-α;而依赖方向向量(Dependent Direction Vector)d = (d1,d2,…,dn)定义为: 例如,有如下的三层循环嵌套: for i = l1 to u1 do for j = l2 to u2 do for k = l3 to u3 do A(i + 1, j, k – 1) = A(i, j, k) + C endfor endfor endfor 则数组A的三维迭代之间的相关距离向量D = (i + 1 – i, j – j, k – 1 – k ) = (1, 0, -1)和相关方向向量= (, =, )。 相关方向向量对计算循环体间相关性十分有用,其相关性是通过相关方向向量不是”=”号的外层循环传递的;相关距离向量指明在同一存储单元的两次访问之间循环迭代的实际距离。它们对开发并行性或优化存储器层次结构时起到指引作用。 语句依赖图和迭代依赖图 语句依赖图-依赖关系?的有向图。将语句,如S和T,看成结点,若有S ? T,则: 间接依赖关系- ,即依赖关系?的传递闭包。 若S T,则在语句依赖图中存在S到T的一条路径。 迭代依赖图-即(循环)迭代之间的依赖关系。在循环L中,若语句T依赖于语句S,即S ? T。令S(I)和T(J)是满足依赖关系的偶对,S(I) ? T(J),此时应该有I≤J。在IJ时,称迭代H(J)依赖于迭代H(I),记为H(I) ? H(J)。 语句依赖图示例 有如下循环语句: for i = 4 to 200 do S: A(i) = B(i) + c(i) T: B(i+2) = A(i-1) + A(i-3) + C(i-1) U: A(i+1) = B(2*i+3) + 1 endfor 各语句间依赖关系如何呢? 语句T流依赖于语句S,即S ?f T,满足依赖关系的偶对集合为: { S(i), T(j) | i = j -1 ; 5≤j≤200 } ∪ { S(i), T(j) | i = j -3 ; 7≤j≤200 } 语句S流依赖于语句T,即T ?f S,满足依赖关系的偶对集合为:{ T(i), S(j) | i = j -2 ; 6≤j≤200 } 语句S输出依赖于
文档评论(0)