Real world arrays often contain underlying structure, such as sparsity, runs of repeated values, or symmetry. Specializing for structure yields significant speedups. But automatically generating efficient code for structured data is challenging, especially when arrays with different structure interact. We show how to abstract over array structures so that the compiler can generate code to coiterate over any combination of them. Our technique enables new array formats (such as 1DVBL for irregular clustered sparsity), new iteration strategies (such as galloping intersections), and new operations over structured data (such as concatenation or convolution).
翻译:真实的世界阵列通常包含基本结构, 如宽度、 重复值的运行或对称。 专门用于结构可以产生显著的超速。 但自动生成结构化数据的有效代码具有挑战性, 特别是当阵列与不同结构相互作用时。 我们展示如何在阵列结构上抽象, 以便编译者能够生成对任何组合的编译代码。 我们的技术可以启用新的阵列格式( 比如, 用于不规则的聚集聚度的 1DVBL ), 新的迭代策略( 比如, 划线交叉点 ), 以及结构化数据的新操作( 比如 concatenation 或 convolution ) 。