This paper shows how to build a sparse tensor algebra compiler that is agnostic to tensor formats (data layouts). We develop an interface that describes formats in terms of their capabilities and properties, and show how to build a modular code generator where new formats can be added as plugins. We then describe six implementations of the interface that compose to form the dense, CSR/CSF, COO, DIA, ELL, and HASH tensor formats and countless variants thereof. With these implementations at hand, our code generator can generate code to compute any tensor algebra expression on any combination of the aforementioned formats. To demonstrate our technique, we have implemented it in the taco tensor algebra compiler. Our modular code generator design makes it simple to add support for new tensor formats, and the performance of the generated code is competitive with hand-optimized implementations. Furthermore, by extending taco to support a wider range of formats specialized for different application and data characteristics, we can improve end-user application performance. For example, if input data is provided in the COO format, our technique allows computing a single matrix-vector multiplication directly with the data in COO, which is up to 3.6$\times$ faster than by first converting the data to CSR.
翻译:本文展示了如何构建一个稀薄的 Exor 代数编译器, 该编译器对 Exmoor 格式( 数据布局) 。 我们开发了一个界面, 描述格式的功能和属性, 并展示如何构建模块代码生成器, 可以将新格式添加为插件。 我们然后描述6个界面的安装过程, 构成密度、 CSR/ CSF、 COO、 DIA、 ELL 和 HASASH 代数格式及其无数变量。 有了这些实施, 我们的代码生成器可以生成代码, 以计算上述格式组合中的任何 Exor 代数表达式( 数据布局 ) 。 为了演示我们的技术, 我们已在 Taco Exor 代数编译器中应用了它。 我们的模块生成器设计简单易添加对新的 Exmoor 格式的支持, 而生成的代码的性能与手操作优化的实施过程是竞争性的。 此外, 通过扩展 taco 支持范围更广的用于不同应用和数据特性, 我们可以改进终端用户应用程序的性性性表现。 例如, 如果输入数据是以 CO$ $ 为 C, 我们的技术可以将数据直接转换为 Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx