FreeTensor
Loading...
Searching...
No Matches
tape_strategy.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_TAPE_STRATEGY_H
2#define FREE_TENSOR_TAPE_STRATEGY_H
3
4#include <unordered_set>
5#include <variant>
6
7#include <selector.h>
8#include <stmt.h>
9
10namespace freetensor {
11
15enum class GradTapeMode : int {
16 All,
17 Nothing,
21};
22
24 std::unordered_set<std::variant<ID, std::string, Ref<Selector>>>
25 alwaysTape_, neverTape_;
27
28 public:
30 const std::unordered_set<std::variant<ID, std::string, Ref<Selector>>>
31 &tape)
32 : alwaysTape_(tape) {}
34 std::unordered_set<std::variant<ID, std::string, Ref<Selector>>> &&tape)
35 : alwaysTape_(std::move(tape)) {}
36
37 TapeStrategy(const std::ranges::range auto &r)
38 : alwaysTape_(std::ranges::begin(r), std::ranges::end(r)) {}
39
40 TapeStrategy(GradTapeMode mode) : mode_(mode) {}
41
42 TapeStrategy alwaysTape(const std::ranges::range auto &r) {
43 auto ret = *this;
44 ret.alwaysTape_.insert(std::ranges::begin(r), std::ranges::end(r));
45 return ret;
46 }
47
48 TapeStrategy neverTape(const std::ranges::range auto &r) {
49 auto ret = *this;
50 ret.neverTape_.insert(std::ranges::begin(r), std::ranges::end(r));
51 return ret;
52 }
53
54 std::unordered_set<ID> getIdsToTape(const Stmt &ast) const;
55};
56
57} // namespace freetensor
58
59#endif // FREE_TENSOR_TAPE_STRATEGY_H
Definition: id.h:18
Definition: ref.h:24
Definition: tape_strategy.h:23
std::unordered_set< ID > getIdsToTape(const Stmt &ast) const
Definition: tape_strategy.cc:9
TapeStrategy(const std::ranges::range auto &r)
Definition: tape_strategy.h:37
TapeStrategy alwaysTape(const std::ranges::range auto &r)
Definition: tape_strategy.h:42
TapeStrategy neverTape(const std::ranges::range auto &r)
Definition: tape_strategy.h:48
TapeStrategy(GradTapeMode mode)
Definition: tape_strategy.h:40
TapeStrategy(std::unordered_set< std::variant< ID, std::string, Ref< Selector > > > &&tape)
Definition: tape_strategy.h:33
TapeStrategy(const std::unordered_set< std::variant< ID, std::string, Ref< Selector > > > &tape)
Definition: tape_strategy.h:29
Definition: allocator.h:9
GradTapeMode
Definition: tape_strategy.h:15
@ NoReuseOnly
Store nothing.
@ Nothing
Store all variables including local scalars.
STL namespace.