Poplar and PopLibs
GlobalExchangeConstraints.hpp
1// Copyright (c) 2018 Graphcore Ltd. All rights reserved.
2
3#ifndef poplar_GlobalExchangeConstraints_hpp
4#define poplar_GlobalExchangeConstraints_hpp
5#include <poplar/ArrayRef.hpp>
6
7#include <functional>
8#include <vector>
9
10namespace poplar {
11
12struct GlobalExchangeFlow {
13 unsigned src;
14 unsigned dst;
15 GlobalExchangeFlow(unsigned src, unsigned dst) : src(src), dst(dst) {}
16
17 bool operator==(const GlobalExchangeFlow &other) const;
18
19 bool operator<(const GlobalExchangeFlow &other) const;
20};
21
22struct GlobalExchangeConstraint {
24 double bandwidth;
26 std::vector<GlobalExchangeFlow> flows;
27
28 GlobalExchangeConstraint(double bandwidth, ArrayRef<GlobalExchangeFlow> flows)
29 : bandwidth(bandwidth), flows(flows.begin(), flows.end()) {}
30
31 bool operator==(const GlobalExchangeConstraint &other) const;
32
33 bool operator<(const GlobalExchangeConstraint &other) const;
34};
35
36} // end namespace poplar
37
38namespace std {
39
40template <> struct hash<poplar::GlobalExchangeFlow> {
41 size_t operator()(const poplar::GlobalExchangeFlow &value) const;
42};
43
44template <> struct hash<poplar::GlobalExchangeConstraint> {
45 size_t operator()(const poplar::GlobalExchangeConstraint &value) const;
46};
47
48} // namespace std
49
50#endif // poplar_GlobalExchangeConstraints_hpp
References to arrays.
Poplar classes and functions.
Definition: ArrayRef.hpp:14