并行编译简介.pptVIP

  • 4
  • 0
  • 约1.34万字
  • 约 51页
  • 2017-02-16 发布于湖北
  • 举报
国家高性能计算中心(合肥) * * 可并行化循环的充要条件 循环L=(L1,L2,. . ., Lm)中内层循环Lk可并行化当且仅当循环L中不存在层次为k的依赖关系,即不存在方向向量为(0,…,0,1k,*,…,*)(含k-1个前导零)的依赖关系(即由K层携带的依赖关系)。 考察以下循环: for I = 1 to N do for J = 1 to M do X(I, J) = X( I, J-1) + X(I, J+1) endfor 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 endfor 存在方向为(0,1)的依赖关系 存在方向为(1,1)的依赖关系: S ? T 和 T ? S 国家高性能计算中心(合肥) * * for I = 1 to N do for J = 1 to M do X(I, J) = X( I, J-1) + X(I, J+1) endfor 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 endfor 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 并行化 外层循环I 并行化内层循环J 国家高性能计算中心(合肥) * * 循环变换 循环变换的主要目的在于发掘程序中更多的并行性 循环变换-是改变循环中语句实例的执行次序但不改变语句实例集合的程序变换技术。对于循环L中的语句实例S(i)和T(j),如果存在T(j)依赖于S(i),且在变换后的循环L’中仍然有T(j)的执行迟于S(i),那么称该循环变换合法,循环L和L’等价。 循环变换技术很多,如 循环交换、语句重排、循环分布与置换等等等等。 国家高性能计算中心(合肥) * * 循环分布 循环分布(loop distribution) 是一种语句级变换,将一个循环分解为多个小循环,每个小循环和原来的循环有相同的迭代空间,只是包含的语句少些。该变换主要用于: - 分解出可向量化或可并行化的循环 - 将原循环分解为较小循环以改善cache局部性 - 创建紧嵌套循环 - 分解原循环为若干使用较少变量的循环以提高寄存器的使用效率 该变换根据语句依赖图进行其上的强连通子图分类,得到所谓凝聚图,并按其中的偏序关系执行分解后的循环 国家高性能计算中心(合肥) * * 循环分布 考虑如下循环: L1:for I = 4 to 100 do 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 国家高性能计算中心(合肥) * * ? ? ? ? S1 S2 S3 S4 ? ? ? {S1,S3} {S2} {S4} 语句依赖图 凝聚图 国家高性能计算中心(合肥) * * 这样把原循环分解成两大部分: 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) endfor L3:for I = 4 to 100 do S4: D(I) = D(I+

文档评论(0)

1亿VIP精品文档

相关文档