Poplar and PopLibs
SparsityParams.hpp
Go to the documentation of this file.
1// Copyright (c) 2020 Graphcore Ltd. All rights reserved.
6#ifndef popsparse_SparsityParams_hpp
7#define popsparse_SparsityParams_hpp
8
9#include <array>
10#include <ostream>
11#include <tuple>
12#include <utility>
13
14namespace popsparse {
15namespace dynamic {
16
18enum class SparsityType {
20 Element,
21
24 Block,
25};
26
27std::ostream &operator<<(std::ostream &os, const SparsityType &t);
28
30enum class SparsityStructure { Unstructured };
31
32std::ostream &operator<<(std::ostream &os, const SparsityStructure &s);
33
34struct SparsityParams {
35
37 SparsityType type;
38
40 SparsityStructure structure;
41
43 std::array<std::size_t, 2> blockDimensions;
44
45 SparsityParams(SparsityType type_ = SparsityType::Element,
46 SparsityStructure structure_ = SparsityStructure::Unstructured,
47 std::array<std::size_t, 2> blockDimensions_ = {1, 1}) {
48 // This parameter is redundant and should be removed from the constructor.
49 (void)type_;
50 type = blockDimensions_[0] * blockDimensions_[1] == 1
53 structure = structure_;
54 blockDimensions = std::move(blockDimensions_);
55 }
56
57 SparsityParams(const SparsityParams &) = default;
58
59 friend bool operator<(const SparsityParams &a, const SparsityParams &b);
60 friend bool operator==(const SparsityParams &a, const SparsityParams &b);
61 friend bool operator!=(const SparsityParams &a, const SparsityParams &b);
62
63 friend std::ostream &operator<<(std::ostream &os, const SparsityParams &p);
64};
65
66} // namespace dynamic
67} // namespace popsparse
68
69#endif // popsparse_SparsityParams_hpp
std::ostream & operator<<(std::ostream &os, const CollectiveOperator &op)
Write op to output stream os.
SparsityStructure
Sparsity structure.
Definition: SparsityParams.hpp:30
SparsityType
Sparsity type.
Definition: SparsityParams.hpp:18
@ Element
Sparsity is defined at an element level.
@ Block
Sparsity is defined at a block level.
Support for sparse matrices.
Definition: codelets.hpp:8