1)
PolyBench 包含30 个带
有静态控制流的数值计算,选自线性代数计算、图像处理、物理模拟、动态编
程、统计信息等多个领域,具有广泛代表性。
2)
使用PolyBench 测试集中自带的POLYBENCH_DUMP_ARRAYS 选项,可
以使得编译后的程序,通过运行打印出计算结果。对PolyBench 中30 个测试用
例验证移植到DCU 平台及优化后的正确性,测试结果如表5.2 所示。
3)
测试用例类型移植后
correlation 相关性计算通过
covariance 协方差计算通过
2mm 2 维矩阵乘通过
3mm 3 维矩阵乘通过
atax 矩阵转置和向量乘法通过
bicg 双共轭梯度法通过
doitgen 多分辨率分析内核通过
mvt 矩阵矢量积和转置通过
gemm 矩阵乘通过
gemver 向量乘法与矩阵加法通过
gesummv 标量、向量和矩阵乘法通过
symm 三角矩阵相乘通过
syrk 一阶对称矩阵运算通过
syr2k 二阶对称矩阵运算通过
trmm 三角矩阵乘法通过
cholesky 乔莱斯基分解通过
durbin 托普利兹系统求解器通过
gramschmidt 线性代数通过
lu LU 分解通过
ludcmp 前向替换后的LU 分解通过
trisolv 三角形求解器通过
deriche 德里奇边缘检测器通过
floyd-warshall 弗洛伊德算法通过
nussinov 序列比对的动态规划算法通过
adi 交替方向隐式求解器通过
fdtd-2d 二维时域有限差分通过
heat-3d 三维热传导方程通过
jacobi-1d 一维雅可比模板计算通过
jacobi-2d 二维雅可比模版计算通过
seidel-2d 赛戴尔迭代法通过
就是这些例子吧,也不错,可以测试一下
4)
部分实例实现了倒加速的情况,
排除这部分实例,生成代码的计算性能相比于CPU 取得了3.79 的加速比。
图5.1 中为通过并行计算性能提高的实例。对于多数实例,通过循环分块,
循环合并等策略,工具将循环嵌套转换为可分块的并行循环,并映射到DCU 上,
计算速度加快,同时提高了数据重用,增加了粗粒度并行性。在测试时使用更
大数据规模,DCU 分配更多的线程来计算,体现出DCU 内存带宽优势。
5)
在性能测试中,根据DCU 线程束大小,默认循环分块大小为64。图5.3 所
示为基于数据重用算法来计算最优分块大小与面向DCU 源源编译器的默认分块
大小64 进行对比测试结果,平均性能得到19%的提升。
PolyBench-GPU 是基于PolyBench 测试集,使用手工优化方法对程序进行优
化,直接能够在GPU 上并行化使用的测试集,是使用CUDA、OpenCL、HMPP
等编程模型实现的测试集,其中实现了PolyBench 测试集中13 个适合在GPU 平
台并行运行的测试用例。
7)
应用本算法生成的代码平均性能达到了PolyBench-GPU 的1.87 倍,大部分
实例达到PolyBench-GPU 的70%以上,其中,correlation、covariance 和syr2k
这三个实例运行的性能得到很大的提升。通过对比代码,PolyBench-GPU 中实现
的手工优化没有进行额外的并行性发掘,而使用优化后的代码生成的kernel 数
量更多,选择最优的分块大小,进一步充分利用DCU 的计算能力,并且使用更
多的寄存器参与计算,大大减少了数据访存延迟,加快了计算速度。
感谢《基于多面体模型的国产DCU源源编译优化技术研究_牛靖钰》