算法的数据相关性
数据无关算法与数据相关算法
本节主要介绍数据无关算法和数据相关算法的定义、性质、区别与联系。
数据无关算法
定义: 算法运行时的访存行为不依赖于任何存储单元的具体值。
数据无关算法(Data Independent Algorithm,DIA)的访存关系在编译期已经确定。无论存储单元存储的数据值是什么,其访存关系也不会改变。这个良好的性质导致这类算法容易通过编译器或者手工调整访存的次序来提高访存的规则性和局部性,容易使用硬件进行加速。许多高性能数值算法(矩阵乘法、FFT、卷积等)即属于这一类,这类算法的研究已经比较成熟。如算法 1所示为基本的稠密矩阵乘法算法。图 1表示矩阵乘算法中数组A、B、C的访存模式,无论A、B、C中存储的内容是什么,这个访存顺序都不会改变。常见的优化手段有循环交换、循环展开、分块、SIMD、预取、脉动阵列等。
数据相关算法
定义: 算法运行时的访存行为依赖于某些存储单元的具体值。
数据相关算法(Data Correlation Algorithm,DCA)的本质特征是运行时的访存地址依赖于某些存储单元的值,这导致数据无关算法的优化手段对于数据相关算法可能是无效的,数据相关算法的优化比数据无关算法的优化更难。这类算法的一个典型代表是图算法(BFS、SSSP、PageRank等)。除了图算法属于这个分类,数据中心许多的应用也是属于这个分类。