Presburger算术在内存访问优化中的应用
1. 内存访问操作的问题
在内存访问操作中存在一个特定的缺点。为了让内核一次性计算 w 个工作项,对 tid 的访问会被转换为返回一个包含 w 个连续值的向量。相应地,每个依赖操作都必须转换为其向量对应形式,例如标量加法会变成向量加法。然而,如今大多数SIMD指令集中的内存操作向量对应形式仅支持访问连续地址。因此,如果地址不连续,就必须使用 w 个顺序操作,这会降低WFV(Wavefront Vectorization)相对于理论因子 w 的整体增益。
为了利用向量加载或存储,编译器必须自动证明地址计算永远不会产生不连续的值。但对应于该地址计算的表达式树可能包含任意代码,这通常会导致不可判定的问题。当前的方法仅限于通过常量进行线性转换的表达式,而新方法将可分析的表达式类别扩展到了Presburger算术及其可定义的函数,尤其涵盖了常量的整数除法和取模运算以及某些输入变量的出现情况。
2. 转换为Presburger算术
为了进行更数学化的表示,用变量 t 表示 tid ,用 a 表示输入。对于整数除法和取模运算,引入一元函数 divk 和 modk ( k ∈ Z\{0} ),强调除数和模数仅限于数字。例如,对于表达式 2*step * (tid / step) + (t
超级会员免费看
订阅专栏 解锁全文
60

被折叠的 条评论
为什么被折叠?



