1 / 26

龙芯编译器中多面体优化技术的研究与实现

龙芯编译器中多面体优化技术的研究与实现. 胡士文 指导老师:冯晓兵 连瑞琦. 大 纲. 大 纲. 学位论文研究情况和已完成的研究内容. 学位论文研究情况和已完成的研究内容. 学位论文研究情况和已完成的研究内容. 大 纲. 龙芯编译器中的多面体模型. WHIRL. SCoP 分析: WRaP -IT 程序分析和变换: PLuTo 代码生成: CLooG. WRaP -IT. w2pscop. SCoP_Cvt. clan_scop. PLuTo. . cloog 文件. CLooG. clast. WLooG. WHIRL.

heaton
Download Presentation

龙芯编译器中多面体优化技术的研究与实现

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 龙芯编译器中多面体优化技术的研究与实现 胡士文 指导老师:冯晓兵 连瑞琦

  2. 大 纲

  3. 大 纲

  4. 学位论文研究情况和已完成的研究内容

  5. 学位论文研究情况和已完成的研究内容

  6. 学位论文研究情况和已完成的研究内容

  7. 大 纲

  8. 龙芯编译器中的多面体模型 WHIRL SCoP分析:WRaP-IT 程序分析和变换:PLuTo 代码生成:CLooG WRaP-IT w2pscop SCoP_Cvt clan_scop PLuTo .cloog文件 CLooG clast WLooG WHIRL

  9. 龙芯编译器中的多面体模型 • w2pscop转换成clan_scop • 语句的迭代域存在对应关系,直接转换 • 调度函数的转换 # i j n 1 1 1 0 0 0 1 -1 0 1 -1 1 0 1 0 0 1 0 -1 1 -1 S1的迭代域 for (i = 0; i < n; i++) for (j = 0; j < n; j++) S1: a[i][j] = b[i][j]; # p0 p1 p2 p3 p4 i j n 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 w2pscop中S1的调度函数 # i j n 1 [ 0 0 0 0 0] [ 0 1 0 0 0 ] [ 0 0 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 0 0 ] clan_scop中S1的调度函数

  10. 龙芯编译器中的多面体模型 for (i = 0; i < n; i++) for (j = 0; j < n; j++) S1:a[i][j] = b[i][j]; • w2pscop转换成clan_scop • 仿存函数的转换 Accessed array strings: a b # i j n 1 [ 1 1 0 0 0 ] [ 0 0 1 0 0 ] [ 2 1 0 0 0 ] [ 0 0 1 0 0 ] clan_scop中S1的仿存函数形式 a 0 1 0 0 1 0 0 0 b 0 1 0 0 1 0 0 0 w2pscop中S1的仿存函数形式

  11. 龙芯编译器中的多面体模型 • CLooG中生成AST的地方,生成相应的WHIRL • 变换前后WHIRL的对应问题 • 程序的多面体表示形式没有原来的中间表示的符号信息以及循环中语句的信息 • 变换结果可以用符号的对应关系来表达 • 变换之前,我们需要收集循环变量和循环参数的信息 • 变换之后,将符号变换的赋值语句和原来的循环语句插入循环中 • 多面体模型在编译器内部的交互问题 • 额外调用一次Pre_Optimizer来维护du和别名信息

  12. 龙芯编译器中的多面体模型 for (k=0; k<N; k++) { for (j=k+1; j<N; j++) a[k][j] = a[k][j]/a[k][k]; 原程序 #define S1(k,j) a[k][j]=a[k][j]/a[k][k]; for (t0=0;t0<=floord(N-1,90);t0++) for (t1=0;t1<=floord(N-1,90);t1++) for (t2=max(2,90*t1);t4<=min(N-1,90*t1+89);t4++) for (t3=max(2,90*t2);t5<=min(N-1,90*t2+89);t5++) S1(t2,t3); Pluto优化后的结果

  13. 龙芯编译器中的多面体模型 for (k=0; k<N; k++) { for (j=k+1; j<N; j++) a[k][j] = a[k][j]/a[k][k]; 原程序 for (t0=0;t0<=floord(N-1,90);t0++) for (t1=0;t1<=floord(N-1,90);t1++) for (t2=max(2,90*t1);t4<=min(N-1,90*t1+89);t4++) for (t3=max(2,90*t2);t5<=min(N-1,90*t2+89);t5++) { k = t2; j = t3; S1(k, j); } 多面体模型优化后的抽象表示

  14. 多面体模型的优化 • 强大的tiling • 在polybench的17个程序上,平均加速2.2倍 • 优化mgrid的最热循环,加速7.2%(166 -> 178) • 缺乏一个好的loop fusion模型 • 对swim优化效果不佳 • 缺乏自动计算最优tile size的算法

  15. POLYBENCH上的优化效果

  16. 多面体模型的优化 • 指导SIMD优化 • 在多面体中识别可向量化的循环 • 循环迭代间依赖分析 • 迭代和仿存的步长分析 • 按照SIMD宽度tile一次,并在LOOP INFO中标记,为后续代码生成做准备 • Jacobi等用例可被向量化 SIMD优化的三个步骤

  17. 扩展多面体模型的适用范围

  18. 扩展多面体模型的适用范围

  19. 大 纲

  20. 与预期计划不符情况及原因 • 实际情况 • 多面体模型不能处理很多大型程序(如spec)中的循环结构的表示形式 • 发现除多面体变换算法以外的影响性能的因素(tile size的选择) • 原计划 • 2011.7~8 • 实现龙芯编译器中的多面体优化 • 2011.9~10 • 解决多面体优化在编译器中的交互问题 • 2011.11~2012.2 • 分析性能并改进多面体程序变换算法 • 2012.3~2012.5 • 技术改进,撰写论文

  21. 大 纲

  22. 下一步工作计划 • 多面体模型的进一步调优 • Tile后tile size的选择算法 • SIMD优化跟后端代码生成的集成 • 增强模型的实用性 • 提高正确性 • 支持spec06中复杂的循环表示形式,为优化奠定基础 • 向open64提交 • 为开源社区做出贡献 • 测试X86上的性能

  23. 大 纲

  24. 科研项目的完成情况

  25. 课程完成情况

  26. 谢谢! 祝各位老师、同学新春愉快!

More Related