并行编译简介.

Slides:



Advertisements
Similar presentations
第2章 证券市场的运行与管理.
Advertisements

贴近教学 服务师生 方便老师.
第一章 棉花初加工与纺纱原料选配 第一节 轧棉与脱糖 第二节 配棉 第三节 化纤原料的选配 第四节 配料方法与配料计算.
第十五章 控制方法.
NOI 2008 employee 招募一批志愿者,这个项目需要N 天才能完成,其中第i 天至少需要Ai 个人。 一共有M 类志愿者可以招募。其中第i 类可以从第Si 天工作到第Ti 天,招募费用是每人Ci 元。用尽量少的费用招募足够的志愿者.
第四章 组合逻辑电路 第 四 章 组 合 逻 辑 电 路.
牛 汉 ——《华南虎》 …… 恍惚之中听见一声 石破天惊的咆哮, 有一个不羁的灵魂 掠过我的头顶 腾空而去, 我看见了火焰般的斑纹
牛 汉 …… 恍惚之中听见一声 石破天惊的咆哮, 有一个不羁的灵魂 掠过我的头顶 腾空而去, 我看见了火焰似的斑纹 火焰似的眼睛,
人教版语文 三年级下册 语文园地四 作者:佚名 来源:网络.
§2 线性空间的定义与简单性质 主要内容 引例 线性空间的定义 线性空间的简单性质 目录 下页 返回 结束.
统计基础知识 复习指导 (仅供参考) 2013年8月.
品读论语之四---- 巧言令色非君子.
先秦诸子散文.
姓名:劉芷瑄 班級:J201 座號:39號 ISBN:957-33-1963-2
陈情表 李密 龙江一中高二语文备课组.
16.桥 南边小学 韩巧仪 写法 洪水 形象 语言1 语言2 语言3 语言4 想象说话 图片.
《愛》 張愛玲 指導老師:胡翰平 國二甲 S 黃宜宣.
十年寒窗无人问,一朝成名天下知。 范进中举 吴敬梓.
人力资源市场统计工作介绍 人力资源市场与人员调配处 郭俊霞 2014年12月.
机器设备评估底稿(操作类) ( ) 王建军.
組員:4A140013張瓊云 4A1I0039石宜芬 4A1I0909許峻綱 指導老師:王立杰老師
安恩和奶牛 约翰尼斯·延森.
第一部分 自然地理 第二单元 宇宙中的地球 第6课 昼夜长短的变化.
图论算法 ---最大流问题 长沙市雅礼中学 朱 全 民.
人教版小学语文四年级下册 语文复习资料.
21、掌声.
國立花蓮女中101學年度 開學典禮簡報.
三级综合医院评审解读-生物安全 安徽医科大学第一附属医院检验科 徐元宏.
全面突破正午太阳高度 ——分布规律及实际应用.
指導老師:陳韻如 班級:幼保二甲 姓名:林靜宜 學號:4A0I0033
说一说 现在的你和小时候的你 相比有什么变化?.
题型复习.
習作2-1 題目+解答 紐約港 紐約中央公園 格陵蘭島.
优化模型 1 存贮模型 配件厂为装配线生产若干种产品,轮换产品时因更换设 备要付生产准备费,产量大于需求时要付贮存费。该厂
习题解答.
中国科学技术大学计算机科学与技术系 国家高性能计算中心(合肥) 2004年12月
数据、模型与决策 汕头大学商学院 林佳丽.
党员干部要争做社会主义 社会公德的表率 党员干部要争做 社会公德的表率 中共河南省委党校 周海涛.
第6章 计算机的运算方法 6.1 无符号数和有符号数 6.2 数的定点表示和浮点表示 6.3 定点运算 6.4 浮点四则运算
猜一猜 身穿五彩衣, 头上一双大眼睛, 要问我从哪里来, 江河湖海是我家。.
选自《三国演义》.
黄土高原的水土流失 标题 水土流失的原因 水土流失的危害 治理措施 参考文献 小组成员.
经典算法之 冒 泡 排 序.
第四章 向量处理机 银河-I巨型计算机 银河-II巨型计算机
第二章 基本遗传算法(GA) 2.1 基本遗传算法描述 基本遗传算法的构成要素 (1) 染色体编码方法
统筹安排   成本最低.
组合逻辑电路 ——中规模组合逻辑集成电路.
第一课 围城里的男人和女人.
第1章 绪论(二) 教学目标 理解算法的特性及评价标准 掌握算法时间复杂度和空间复杂度的分析方法 1/
统筹安排   成本最低.
语文百花园八.
第 四 章 迴歸分析應注意之事項.
第三章 行列式 第一节 线性方程组与行列式 第二节 排列 第三节 n阶行列式 第四节 余子式与行列式展开 第五节 克莱姆规则.
第3章 运 输 问 题 3 内容提要  运输问题模型的特点  产销平衡运输问题的表上作业法  产销不平衡运输问题的转化
20 谈礼貌 合肥市螺岗小学 赵勋.
第二章 基本遗传算法(GA) 2.1 基本遗传算法描述 基本遗传算法的构成要素 (1) 染色体编码方法
19 草船借箭.
第四章 根轨迹法 闭环系统的稳定性和性能指标主要由闭环系统的极点在复平面的位置决定,因此,分析或设计系统时确定出系统闭环极点的位置是十分有意义的。
家.
紫藤萝瀑布.
人民教育出版社义务教育教科书物理(八年级下册)
臺中市龍山國小 校園常見瓢蟲辨識   瓢蟲屬於鞘翅目瓢蟲科。目前世界上約有5000多種瓢蟲,台灣地區約有80種以上,其中能捕食有害生物的瓢蟲約七十種之多。瓢蟲因為捕食有害生物為主食,所以又稱為『活農藥』。
習作2-1 題目+解答 紐約港 紐約中央公園 格陵蘭島.
一棵小树十个杈, 不长叶子不开花, 能学会算还会画, 天天干活不说话。 猜一猜.
复习四 拼音宝宝的聚会.
15 玩出了名堂 1、知识与技能:会认6个生宇,会写12个生字。正确读写“名堂、浪费、镜片、看守、定时、清闲
15 玩出了名堂.
数列求和 Taojizhi 2019/10/13.
算法基础习题课2 助教:刘倩玉.
你知道普通話有多少個聲母嗎﹖ 答案:23個.
Presentation transcript:

并行编译简介

并行编译简介 并行编译器的组成及任务 数据依赖关系 循环的向量化与并行化 国家高性能计算中心(合肥) 2019/1/2

并行编译器的组成及任务 源代码 程序分析 程序优化 并行代码生成 向量机: 组织向量循环 寄存器分配 流水线调度 共享存储多机系统: 数据依赖与控制依赖关系分析 数据流分析 程序分析 程序优化 包括循环向量化与并行化在内的各种优化 并行代码生成 并行语义识别,处理指令级并行调度 向量机: 组织向量循环 寄存器分配 流水线调度 共享存储多机系统: 任务划分 处理机调度 同步 分布存储多机系统: 数据和计算分布 通信 同步 国家高性能计算中心(合肥) 2019/1/2

数据依赖关系 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; 国家高性能计算中心(合肥) 2019/1/2

依赖关系示例 S : A = B + D T : C = A * 3 U : A = A + C V : E = A / 2 e.g. 考虑语句序列: S : A = B + D T : C = A * 3 U : A = A + C V : E = A / 2 IN: B D ,OUT:A IN: A ,OUT:C IN: A C ,OUT:A IN: A ,OUT:E S f T S f U S o U T f U T a U U f V 国家高性能计算中心(合肥) 2019/1/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 a S(1) : A[1] = B[3] + 1 T(1) : B[1] = A[0] – 1 S(2) : A[2] = B[4] + 1 T(2) : B[2] = A[1] – 1 S(3) : A[3] = B[5] + 1 T(3) : B[3] = A[2] – 1 . . . S(100) : A[100] = B[102] + 1 T(100) : B[100] = A[99] – 1 f 依赖关系: S f T S a T 国家高性能计算中心(合肥) 2019/1/2

数据依赖关系 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))的集合。 国家高性能计算中心(合肥) 2019/1/2

依赖距离和依赖向量 令α=(α1,α2,…,αn) 和β=(β1,β2,…,βn)是n层循环内的n个整数下标向量,假定α和β存在数据相关性,则依赖距离向量(Dependent Distance Vector)D = (D1,D2,…,Dn)定义为β-α;而依赖方向向量(Dependent Direction Vector)d = (d1,d2,…,dn)定义为: 或 1 或 0 或 -1 国家高性能计算中心(合肥) 2019/1/2

例如,有如下的三层循环嵌套: 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 则数组A的三维迭代之间的相关距离向量D = (i + 1 – i, j – j, k – 1 – k ) = (1, 0, -1)和相关方向向量= (<, =, >)。 相关方向向量对计算循环体间相关性十分有用,其相关性是通过相关方向向量不是”=”号的外层循环传递的;相关距离向量指明在同一存储单元的两次访问之间循环迭代的实际距离。它们对开发并行性或优化存储器层次结构时起到指引作用。 国家高性能计算中心(合肥) 2019/1/2

语句依赖图和迭代依赖图 语句依赖图-依赖关系的有向图。将语句,如S和T,看成结点,若有S  T,则: 间接依赖关系- ,即依赖关系的传递闭包。 若S T,则在语句依赖图中存在S到T的一条路径。 迭代依赖图-即(循环)迭代之间的依赖关系。在循环L中,若语句T依赖于语句S,即S  T。令S(I)和T(J)是满足依赖关系的偶对,S(I)  T(J),此时应该有I≤J。在I<J时,称迭代H(J)依赖于迭代H(I),记为H(I)  H(J)。  S T 国家高性能计算中心(合肥) 2019/1/2

语句依赖图示例 有如下循环语句: 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 各语句间依赖关系如何呢? 国家高性能计算中心(合肥) 2019/1/2

语句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输出依赖于语句U,即 U o S ,满足依赖关系的偶对集合为: { <U(i), S(j)> | i = j -1 ; 5≤j≤200 } 语句T反依赖于语句U,即U a T ,满足依赖关系的偶对集合为:{ <U(i), T(j)> | j = 2*i + 1 ; 4≤i≤99 } 语句T是否流依赖于语句U呢? 国家高性能计算中心(合肥) 2019/1/2

语句依赖图示例 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 S f f o T a U 国家高性能计算中心(合肥) 2019/1/2

迭代依赖图示例(1) 有如下二重循环: for i = 0 to 5 do for j = 0 to 4 do S: A(i+1, j+1) = A(i,j) + B (i,j) endfor 显然,S f S 。满足依赖关系的偶对集合: { <S(i1,i2), S(j1,j2)> | j1 = i1 + 1 , j2 = i2 + 1, 0≤i1≤4, 0≤i2≤3 } // 依赖方向向量和距离向量各是什么? 国家高性能计算中心(合肥) 2019/1/2

迭代依赖图(1) 国家高性能计算中心(合肥) 2019/1/2

迭代依赖图示例(2) 有如下二重循环: L1 : for i1 = 0 to 4 do L2 : for i2 = 0 to 4 do S : A(i1+1, i2) = B(i1, i2) + C(i1, i2) T : B(i1, i2+1) = A(i1, i2+1) + 1 U : D(i1, i2) = B(i1, i2+1) – 2 endfor 国家高性能计算中心(合肥) 2019/1/2

0≤i1≤3, 1≤i2≤4} ,距离向量为(1,-1),方向向量为(1, -1)。此依赖关系由循环L1携带; 语句T流依赖于语句S,即S f T,满足依赖关系的偶对:{ < S(i1,i2), T(j1,j2) | j1 = i1+1, j2=i2-1, 0≤i1≤3, 1≤i2≤4} ,距离向量为(1,-1),方向向量为(1, -1)。此依赖关系由循环L1携带; 语句S流依赖于语句T,即T f S,满足依赖关系的偶对:{ < T(i1,i2), S(j1,j2) | j1 = i1, j2=i2+1, 0≤i1≤4, 0≤i2≤3} ,距离向量为(0,1),方向向量为(0, 1)。此依赖关系由循环L2携带; 语句U流依赖于语句T,即T f U,满足依赖关系的偶对:{ < T(i1,i2), U(j1,j2) | j1 = i1, j2=i2, 0≤i1≤4, 0≤i2≤4} ,距离向量为(0,0),方向向量为(0,0)。此依赖关系与循环无关。 国家高性能计算中心(合肥) 2019/1/2

S T U f 语句依赖图 迭代依赖图 国家高性能计算中心(合肥) 2019/1/2

S: A(I, J) = A(I-1, J) + A(I, J-1) endfor 考虑如下循环的迭代依赖图: for I = 1 to 4 do for J = 1 to 4 do S: A(I, J) = A(I-1, J) + A(I, J-1) endfor 国家高性能计算中心(合肥) 2019/1/2

依赖关系方程 假定循环中数组下标是循环索引变量的线性表达式 循环的一般表示:(X是n维数组,f和g是循环索引变量I=(I1,I2,…,Im) 的线性函数 ) L1: for I1 = p1 to q1 do L2: for I2 = p2 to q2 do . . . Lm: for Im = pm to qm S : X(f1(I), f2(I), …, fn(I)) = . . . T : . . . = . . . X(g1(I), g2(I), …, gn(I)) . . . endfor 国家高性能计算中心(合肥) 2019/1/2

依赖关系方程(丢番图方程) 上述循环L中语句S和T,令u= X(f1(I), f2(I), …, fn(I)) 是S的变量,而v= X(g1(J), g2(J), …, gn(J)) ,u或v至少一个是相应语句的输出变量。若u、v导致S和T之间的依赖关系,则以下方程组 f1(I) - g1(J) = 0 f2(I) - g2(J) = 0 . . . fn(I) - gn(J) = 0 有满足下述约束条件的整数解(i, j),i=(i1,i2,…,im) , j=(j1,j2,…,jm) : pr≤ir≤qr pr≤jr≤qr ;且该解满足下述特定情况下的附加条件: (1) 若S < T 且 S  T 则 i≤j (2)若S = T 且 S  S 则 i < j (3)若S < T 且 T  S 则 i > j 国家高性能计算中心(合肥) 2019/1/2

如果依赖方程(丢番图方程)有满足上述条件的整数解(i,j),那么 (1) 若 i < j , 则S ’ T (2)若 i > j , 则T ’ S (3)若 i = j , 且 S=T ,则S ’ T 其中’ 表示间接依赖关系。 国家高性能计算中心(合肥) 2019/1/2

f1(I) = 2 * I ; g1(J) = 3 * J + 1 。依赖方程为: 考虑如下程序段: L1 : for I = 1 to 50 do . . . S : X(2*I) = . . . T : . . . = . . . X(3*I + 1 ) . . . endfor 这里: f1(I) = 2 * I ; g1(J) = 3 * J + 1 。依赖方程为: f1(I) - g1(J) = 0  2*I – 3*J = 1 , 而依赖约束为: 1≤I≤50 ,1≤J≤50。该方程的解(I,J)对应的数组变量会导致S和T之间的依赖。 国家高性能计算中心(合肥) 2019/1/2

循环向量化 循环向量化 将仅含有数组赋值语句的循环L转换成等价的向量语句 如:循环 for I = 1 to N do S: A(I) = D(I) * E T: C(I) = A(I) + B(I) endfor 可以改写为等价的向量语句: S’: A(1:N) = D(1:N) * E T’: C(1:N) = A(1:N) + B(1:N) 国家高性能计算中心(合肥) 2019/1/2

如果将循环内的数组赋值改为相应的向量语句后,按原来语句次序执行所得结果与原来串行执行一样,那么. . . 可向量化循环 如果将循环内的数组赋值改为相应的向量语句后,按原来语句次序执行所得结果与原来串行执行一样,那么. . . 但以下循环不可向量化: for I = 1 to N do S: A(I) = A(I-1) + 1; //不能写成A(1:N) = A(0:N-1) + 1 endfor 而以下循环却可以向量化: S1: A(I) = A(I+1) + 1; //可以写成A(1:N) = A(2:N+1) + 1 为什么? 国家高性能计算中心(合肥) 2019/1/2

对于循环L=(L1,L2,. . ., Lm)其最内层循环Lm可向量化当且仅当:Lm中任意两个语句S和T, 可向量化循环的充要条件 对于循环L=(L1,L2,. . ., Lm)其最内层循环Lm可向量化当且仅当:Lm中任意两个语句S和T, (1) 当S<T时,不存在方向向量为(0,0,…,1)的S对T的依赖关系,T  S;(三种依赖关系中任何一种) (2) 当S=T时,不存在方向向量为(0,0,…,1)的S对T的流依赖关系,T f S; 换言之,最内层循环中如果不存在与语句词法顺序相反的依赖关系(即反向依赖),则最内层循环可向量化。 再次考察: for I = 1 to N do S: A(I) = A(I-1) + 1; //不能写成A(1:N) = A(0:N-1) + 1 endfor //此循环中存在 S  f S,且方向为(1),距离为(1) 国家高性能计算中心(合肥) 2019/1/2

S: A(I, 2:N-1) = B(I-1,2:N-1) + C T: B(I, 2:N-1) = A(I, 3:N) * 2 考查以下循环可向量化的情况。 (1)for I = 2 to N – 1 do for J = 2 to N – 1 do S : A(I, J) = B( I-1, J ) + C T : B(I, J) = A(I, J+1) * 2 endfor 如果向量化内层的J循环,则形成: for I = 2 to N – 1 do S: A(I, 2:N-1) = B(I-1,2:N-1) + C T: B(I, 2:N-1) = A(I, 3:N) * 2 但此向量化运算的结果不对!为什么? (a)存在依赖T f S, 方向为(1,0) (b)存在依赖T a S, 方向为(0, 1) 国家高性能计算中心(合肥) 2019/1/2

S: A(I, 2:N-1) = B(I-1,2:N-1) + C T: B(I, 2:N-1) = A(I, 3:N) * 2 考查以下循环可向量化的情况。 (1)for I = 2 to N – 1 do for J = 2 to N – 1 do S : A(I, J) = B( I-1, J ) + C T : B(I, J) = A(I, J+1) * 2 endfor 如果向量化内层的J循环,则形成: for I = 2 to N – 1 do S: A(I, 2:N-1) = B(I-1,2:N-1) + C T: B(I, 2:N-1) = A(I, 3:N) * 2 向量化内层循环是错误的哦! 举例来说,在(I=2,J=2)的迭代中,原来的内层循环中语句T先行读取了A(2,3)的旧值来计算B(2,2);而在向量化后的循环中,向量化的语句S则在(I=2)迭代中先行更新了A(2,3)的值;而随后向量化语句T则只能使用新的A(2,3)来计算!显然是错误的! 国家高性能计算中心(合肥) 2019/1/2

考查以下循环可向量化的情况。 (2) for I = 1 to N do for J = 1 to N do S : D(I, J) = A( I, J ) + C T : A(I+1, J+1) = B(I, J) * 2 endfor 尝试向量化内层循环如下: for I = 1 to N do S : D(I, 1:N) = A( I, 1:N ) + C T : A(I+1, 2:N+1) = B(I, 1:N) * 2 存在依赖T f S, 方向为(1,1) 向量化正确吗? 不存在(0,1)的T f S 国家高性能计算中心(合肥) 2019/1/2

…(外层 I 循环依然串行执行,保持I层依赖关系,如 A(2,2)的写与读。) (2) for I = 1 to N do for J = 1 to N do S : D(I, J) = A( I, J ) + C T :A(I+1, J+1) = B(I, J) * 2 endfor 部分展开循环如下: I=1时:J = 1,2,…N S(1,1): D(1,1) = A(1,1) … T(1,1): A(2,2) = B(1,1)… S(1,2): D(1,2) = A(1,2)… T(1,2): A(2,3) = B(1,2)… …(外层 I 循环依然串行执行,保持I层依赖关系,如 A(2,2)的写与读。) I=2时:J=1,2,…,N S(2,1): D(2,1) = A(2,1) … T(2,1): A(3,2) = B(2,1)… S(2,2): D(2,2) = A(2,2)… T(2,2): A(3,3) = B(2,2)… … 向量化为: D(1,1:N) = A(1,1:N)… 向量化为: A(2,2:N+1) = B(1,1:N)… 向量化为: D(2,1:N) = A(2,1:N)… 向量化为: A(3,2:N+1) = B(2,1:N)… 国家高性能计算中心(合肥) 2019/1/2

循环并行化 循环并行化 将循环的迭代空间划分成不同的子集,分布到不同的处理机上执行(此时对各迭代子集的执行次序不作要求)。一般用doall(或 par-do)表示将循环并行化。 可并行化循环 如果一个循环的各个迭代(子集)可按任意次序执行而结果与串行执行相同的话。 以下循环可以并行化: for I = 1 to N do doall I = 1 to N A(I) = A(I) + B(I) A(I) = A(I) + B(I) endfor enddoall 国家高性能计算中心(合肥) 2019/1/2

可并行化循环的充要条件 循环L=(L1,L2,. . ., Lm)中内层循环Lk可并行化当且仅当循环L中不存在层次为k的依赖关系,即不存在方向向量为(0,…,0,1k,*,…,*)(含k-1个前导零)的依赖关系(即由K层携带的依赖关系)。 考察以下循环: L1: for I = 0 to 4 do L2: for J = 0 to 4 do S: X(I+1, J+2) = Y( I, J) + 1 T: Y(I+2, J+1) = X(I, J) + 1 endfor for I = 1 to N do for J = 1 to M do X(I, J) = X( I, J-1) + X(I, J+1) endfor 存在方向为(1,1)的依赖关系: S  T 和 T  S 存在方向为(0,1)的依赖关系 国家高性能计算中心(合肥) 2019/1/2

for I = 1 to N do for J = 1 to M do X(I, J) = X( I, J-1) + X(I, J+1) endfor L1: for I = 0 to 4 do L2: for J = 0 to 4 do S: X(I+1, J+2) = Y( I, J) + 1 T: Y(I+2, J+1) = X(I, J) + 1 endfor 并行化 外层循环I 并行化内层循环J doall I = 1 to N for J = 1 to M do X(I, J) = X( I, J-1) + X(I, J+1) endfor enddoall L1: for I = 0 to 4 do L2: doall J = 0 to 4 S: X(I+1, J+2) = Y( I, J) + 1 T: Y(I+2, J+1) = X(I, J) + 1 enddoall endfor 国家高性能计算中心(合肥) 2019/1/2

循环变换 循环变换的主要目的在于发掘程序中更多的并行性 循环变换-是改变循环中语句实例的执行次序但不改变语句实例集合的程序变换技术。对于循环L中的语句实例S(i)和T(j),如果存在T(j)依赖于S(i),且在变换后的循环L’中仍然有T(j)的执行迟于S(i),那么称该循环变换合法,循环L和L’等价。 循环变换技术很多,如 循环交换、语句重排、循环分布与置换等等等等。 国家高性能计算中心(合肥) 2019/1/2

循环分布 循环分布(loop distribution) 是一种语句级变换,将一个循环分解为多个小循环,每个小循环和原来的循环有相同的迭代空间,只是包含的语句少些。该变换主要用于: - 分解出可向量化或可并行化的循环 - 将原循环分解为较小循环以改善cache局部性 - 创建紧嵌套循环 - 分解原循环为若干使用较少变量的循环以提高寄存器的使用效率 该变换根据语句依赖图进行其上的强连通子图分类,得到所谓凝聚图,并按其中的偏序关系执行分解后的循环 国家高性能计算中心(合肥) 2019/1/2

循环分布 考虑如下循环: 依赖关系如下: L1:for I = 4 to 100 do S1 f S3 S1 : A(I) = B(I-2) + 1 S2: C(I) = B(I-1) +F(I) S3: B(I) = A(I-1) + 2 S4: D(I) = D(I+1) + B(I-1) endfor 依赖关系如下: S1 f S3 S3 f S1 S3 f S2 S3 f S4 S4 a S4 国家高性能计算中心(合肥) 2019/1/2

S1  {S1,S3}  S2     S3 {S2} {S4}  S4 语句依赖图 凝聚图 国家高性能计算中心(合肥) 2019/1/2

这样把原循环分解成两大部分: L1: for I = 4 to 100 do S1 : A(I) = B(I-2) + 1 S3: B(I) = A(I-1) + 2 endfor L2:for I = 4 to 100 do S2: C(I) = B(I-1) +F(I) L3:for I = 4 to 100 do S4: D(I) = D(I+1) + B(I-1) 语句实例执行次序为: (1)首先执行循环L1 (2)L1执行完后,可同时执行循环L2和L3 此外: 循环L2可以并行化执行; 循环L3可以向量化执行; 国家高性能计算中心(合肥) 2019/1/2

语句重排 语句重排(statement reordering)是基于语句依赖图的程序变换,它改变语句的词法顺序但不改变语句间依赖关系。该变换常用于循环向量化。当循环中语句间有循环依赖关系时,可通过此变换将与语句执行顺序相反的依赖关系改变为与语句执行顺序一致的依赖关系,从而使循环向量化。 考虑如下循环例1: L : for I = 2 to N do S1 : A(I) = B(I) + C(I+1) S2: D(I) = A(I+1) + 1 S3: C(I) = D(I) endfor 国家高性能计算中心(合肥) 2019/1/2

S2 a S1 S1 a S3 和 S2 f S3,其中依赖关系 S2 a S1使得循环不能向量化。 上述循环中依赖关系为: S2 a S1 S1 a S3 和 S2 f S3,其中依赖关系 S2 a S1使得循环不能向量化。 S1 S2   语句重排  S2  S1   S3 S3 原语句依赖图 重排后的语句依赖图 国家高性能计算中心(合肥) 2019/1/2

语句重排后,原来的循环可以向量化,语句顺序为: S2:D(2:N) = A(3:N+1) + 1 S1 : A(2:N) = B(2:N) + C(3:N+1) S3: C(2:N) = D(2:N) 国家高性能计算中心(合肥) 2019/1/2

循环置换 循环置换(loop permutation)是改变循环位置的程序变换,属于迭代级的变换,而循环交换即是此种变换的特例。该变换有如下特点: - 置换外层无循环依赖的循环与内层有依赖的循环,使得置换后内层可向量化; - 置换无依赖的循环到外层使得整个循环嵌套可以并行执行,可增加每次迭代的并行粒度并减少障碍同步次数; - 在有多层可向量化的循环时,置换范围较大的循环到外层可以增加向量的长度。 国家高性能计算中心(合肥) 2019/1/2

循环中存在(0,1)的依赖关系TS,不能对内层向量化。可以利用循环置换(交换): L2: for J = 1 to M do 考虑如下循环例2 : L1 : for I = 1 to M do L2: for J = 1 to M do S : B(I,J) = A(I,J-1) T : A(I,J) = B(I,J) * C(I,J) endfor 循环中存在(0,1)的依赖关系TS,不能对内层向量化。可以利用循环置换(交换): L2: for J = 1 to M do L1: for I = 1 to M do 此时,上述循环嵌套在内层可以向量化! 国家高性能计算中心(合肥) 2019/1/2

S: A(I,J) = ( A(I-1,J) + A(I+1,J) ) /2 endfor 再考虑以下循环例3 : for I = 2 to N do for J = 2 to N do S: A(I,J) = ( A(I-1,J) + A(I+1,J) ) /2 endfor 此循环中依赖关系:方向向量为(1,0)的S f S和(1,0)的S a S;因此循环嵌套中外层不可并行,内层可以并行(没有依赖关系),但并行粒度仅为一条语句。可以采用交换循环的方式: 此时外层循环可以并行,其粒度为一个(内层)循环。 国家高性能计算中心(合肥) 2019/1/2

假定P是mXm的置换矩阵,由P定义的m层循环嵌套L的置换是合法的,当且仅当对于L的每一个方向向量,均有 P > 0 成立。 循环置换的充要条件: 假定P是mXm的置换矩阵,由P定义的m层循环嵌套L的置换是合法的,当且仅当对于L的每一个方向向量,均有 P > 0 成立。 这里mXm的置换矩阵P定义为: - 每个元素非0即1 - 每行有且仅有一个元素为1 - 每列有且仅有一个元素为1 令(i)表示P中第i列中为1的元素所在的行号,则函数:i (i)是集合{1,2,…,m}上的一个置换,它完全确定矩阵P。P可以表示为: 1, 2, …, m (1), (2),…, (m) P = 或 (1), (2),…, (m) 国家高性能计算中心(合肥) 2019/1/2

考虑循环例2和例3: 对于例2,置换矩阵P = [ 2, 1 ] , 而原循环中的方向向量为 = (0,1), P = (0,1) [ 2,1 ] = ( 1,0 ) > 0。因此该循环交换是合法的。 对于例3,置换矩阵P = [ 2, 1 ] , 而原循环中的方向向量为 = (1,0), P = (1,0) [ 2,1 ] = ( 0,1 ) > 0。因此该循环交换是合法的。 这里P=[2,1] 其矩阵形式为: 而P’= [3, 2, 1]的矩阵形式为: 0 1 1 0 0 0 1 0 1 0 1 0 0 国家高性能计算中心(合肥) 2019/1/2

循环逆转 循环逆转(loop reversal)-颠倒循环中迭代执行的顺序,改变了循环迭代方向的变换,也使得变换循环中方向向量发生逆转。 如果循环在逆转变换后,它的方向向量均为正向量,则称该变换前后的循环等价,该变换是合法的。 考虑如下循环例4: for I = 1 to 100 do for J = 1 to 5 do S: A(I,J) = A(I-1,J+1) +1 endfor 国家高性能计算中心(合肥) 2019/1/2

循环例4的迭代依赖图如下,可知它含有方向向量为 (1,-1)的依赖关系,其内层循环可以并行化(但粒度为5次迭代),其外层不能并行化,也不能进行循环交换。(为什么?) 对循环J进行并行,粒度为5次迭代 国家高性能计算中心(合肥) 2019/1/2

但对例4中,循环J进行逆转,则方向向量变为(1,1)。 可以对循环嵌套进行循环交换。此时内层循环I可以并行化(粒度为100次迭代!),迭代依赖图如右所示: for J = 5 downto 1 do for I = 1 to 100 do S: A(I,J) = A(I-1,J+1) +1 endfor 国家高性能计算中心(合肥) 2019/1/2

圈收缩 圈收缩(cycle shrinking)-此变换技术一般用于依赖距离大于1的循环中,它将一个串行循环分成两个紧嵌套循环,其中外层依然串行执行,而内层则是并行执行(一般粒度较小)。 考虑循环例5:(K 为正整数) for I = 0 to N do S: A(I+K) = B(I) T: B(I+K) = A(I) + C(I) endfor S   T 语句依赖图 国家高性能计算中心(合肥) 2019/1/2

循环例5既不能向量化,也不能并行化(why?) 考察(K=4时)迭代依赖图: for J = 0 to N step K doall I = J to J+K-1 S: A(I+K) = B(I) T: B(I+K) = A(I) + C(I) enddoall endfor 国家高性能计算中心(合肥) 2019/1/2