Poplar and PopLibs
TensorRearranger.hpp
1// Copyright (c) 2020 Graphcore Ltd. All rights reserved.
2
3#ifndef poplar_TensorRearranger_hpp
4#define poplar_TensorRearranger_hpp
5#include <poplar/ArrayRef.hpp>
6#include <poplar/Interval.hpp>
7#include <poplar/Tensor.hpp>
8
9namespace poplar {
10namespace core {
11class TensorRearranger;
12}
13
20public:
23 TensorRearranger(TensorRearranger &&other) noexcept;
24 TensorRearranger &operator=(const TensorRearranger &other) &;
25 TensorRearranger &operator=(TensorRearranger &&other) &noexcept;
27
29 Tensor rearrange(const Tensor &t) const;
30
33
40 std::vector<Interval> rearrange(ArrayRef<Interval> is) const;
41
48 std::vector<Interval> undoRearrangement(ArrayRef<Interval> is) const;
49
50 // Implementation
51 TensorRearranger(std::unique_ptr<core::TensorRearranger>);
52 core::TensorRearranger &getImpl() const { return *impl; }
53 std::unique_ptr<core::TensorRearranger> *getPImpl() { return &impl; }
54 bool valid() const { return impl.get() != nullptr; }
55
56private:
57 std::unique_ptr<core::TensorRearranger> impl;
58};
59
60} // end namespace poplar
61
62#endif // poplar_TensorRearranger_hpp
References to arrays.
TensorRearranger can be used to re-order the view on a tensor and to undo that re-ordering.
Definition: TensorRearranger.hpp:19
Tensor undoRearrangement(const Tensor &t) const
Undo the rearrangement done with the rearrange() method.
std::vector< Interval > undoRearrangement(ArrayRef< Interval > is) const
Undo the rearrangement of intervals.
std::vector< Interval > rearrange(ArrayRef< Interval > is) const
Rearrange intervals.
Tensor rearrange(const Tensor &t) const
Rearrange a tensor.
A reference to a subset of tensor elements.
Definition: Tensor.hpp:38
Poplar classes and functions.
Definition: ArrayRef.hpp:14