This paper shows how to generate efficient tensor algebra code that compute on dynamic sparse tensors, which have sparsity structures that evolve over time. We propose a language for precisely specifying recursive, pointer-based data structures, and we show how this language can express a wide range of dynamic data structures that support efficient modification, such as linked lists, binary search trees, and B-trees. We then describe how, given high-level specifications of such data structures, a compiler can generate code to efficiently iterate over and compute with dynamic sparse tensors that are stored in the aforementioned data structures. Furthermore, we define an abstract interface that captures how nonzeros can be inserted into dynamic data structures, and we show how this abstraction guides a compiler to emit efficient code that store the results of sparse tensor algebra computations in dynamic data structures. We evaluate our technique and find that it generates efficient dynamic sparse tensor algebra kernels. Code that our technique emits to compute the main kernel of the PageRank algorithm is 1.05$\times$ as fast as Aspen, a state-of-the-art dynamic graph processing framework. Furthermore, our technique outperforms PAM, a parallel ordered (key-value) maps library, by 7.40$\times$ when used to implement element-wise addition of a dynamic sparse matrix to a static sparse matrix.
翻译:本文展示了如何生成高效的 Exor 代数代码, 用于计算动态稀散的 蒸汽器, 且具有随时间演变的宽度结构。 我们提出一种语言, 用于精确指定递归性、 指针数据结构, 我们展示该语言如何表达支持高效修改的多种动态数据结构, 例如链接列表、 二进搜索树 和 B- 树 。 我们然后描述如何, 鉴于这类数据结构的高度规格, 一个编译器能够生成高效的代码, 以上述数据结构中存储的动态稀散 散 推进器进行循环和计算 。 此外, 我们定义了一个抽象界面, 以显示如何将非零星插入动态的数据结构, 并且我们展示该抽象界面如何引导一个高效的编译器, 以将稀散的 Exgorgebra 计算结果存储在动态数据结构中。 我们评估了我们的技术, 并发现它产生高效的动态稀薄的 Exmor ebra 内核内核。 代码, 我们的技术将存储 Pelack- main commus- loginal logy logy matial ma- train maturkedudududududustrutus a view a vidudududududududududustral- ex- viduduce.