Is Search Really Necessary to Generate High-Performance BLAS

 

搜索对于生成高性能BLAS真的必要吗? 

 

程序优化的一个关键步骤是评估参数的最优值,例如tile sizes和loop unrolling factors(循环展开因子)。传统编译器使用分析模型来计算这些值,而ATLAS库则在参数的取值空间中进行全局搜索,得到不同的取值组合,再在真实硬件上运行,以此决定哪些取值可以得到最好的性能。 广泛认为基于传统模型的优化,比不上基于搜索的,因为分析模型没法涵盖现代高性能架构的复杂性,但迄今为止很少有对这两者的量化比较。

为了做这种量化比较,我们把ATLAS中的全局搜索引擎替换成模型优化引擎,然后在大量架构上测试两种实现的性能。我们的实验表明,基于模型的优化比全局搜索更高效。

 

介绍

一个广为接受的事实是,编译器生成的代码,效率比不上微调的。例如矩阵乘法。 

 

手动微调程序最简单的方法就是,给定一个平台,写不同版本的程序,然后评估各自的性能,从中选出表现最好的版本。不同版本之间的算法通常是一样的,只是参数取值不一样,例如tile sizes和loop unrolling factors。

 

ATLAS代码生成器

 

内存层面优化

分块是一种算法变换,把矩阵乘法转化成一系列小的矩阵乘法,其中每个小矩阵乘法都针对原矩阵的一些块。 

 

 

 

评估机器参数

 

 

总结和后续工作

本文的实验结果表明,对于ATLAS系统中的参数最优化问题,分析模型可以得到接近最优解来生成高性能的BLAS代码。 

 

 

参考链接

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.59.9686&rep=rep1&type=pdf

 

posted @ 2019-06-19 15:31  happyyoung  阅读(157)  评论(0编辑  收藏  举报