//===- COO.h - Coordinate-scheme sparse tensor representation ---*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains a coordinate-scheme representation of sparse tensors. // //===----------------------------------------------------------------------===// #ifndef MLIR_EXECUTIONENGINE_SPARSETENSOR_COO_H #define MLIR_EXECUTIONENGINE_SPARSETENSOR_COO_H #include <algorithm> #include <cassert> #include <cinttypes> #include <functional> #include <vector> namespace mlir { namespace sparse_tensor { /// An element of a sparse tensor in coordinate-scheme representation /// (i.e., a pair of coordinates and value). For example, a rank-1 /// vector element would look like /// ({i}, a[i]) /// and a rank-5 tensor element would look like /// ({i,j,k,l,m}, a[i,j,k,l,m]) /// /// The coordinates are represented as a (non-owning) pointer into a /// shared pool of coordinates, rather than being stored directly in this /// object. This significantly improves performance because it reduces the /// per-element memory footprint and centralizes the memory management for /// coordinates. The only downside is that the coordinates themselves cannot /// be retrieved without knowing the rank of the tensor to which this element /// belongs (and that rank is not stored in this object). template <typename V> struct Element final { … }; /// Closure object for `operator<` on `Element` with a given rank. template <typename V> struct ElementLT final { … }; /// A memory-resident sparse tensor in coordinate-scheme representation /// (a collection of `Element`s). This data structure is used as an /// intermediate representation, e.g., for reading sparse tensors from /// external formats into memory. template <typename V> class SparseTensorCOO final { … }; } // namespace sparse_tensor } // namespace mlir #endif // MLIR_EXECUTIONENGINE_SPARSETENSOR_COO_H