place.cc 1.1 KB
Newer Older
Y
Yi Wang 已提交
1
#include "paddle/platform/place.h"
Y
Yi Wang 已提交
2

Y
Yi Wang 已提交
3 4
namespace paddle {
namespace platform {
Y
Yi Wang 已提交
5 6 7

namespace detail {

L
liaogang 已提交
8
class PlacePrinter : public boost::static_visitor<> {
Y
Yi Wang 已提交
9
 public:
Y
Yi Wang 已提交
10
  PlacePrinter(std::ostream &os) : os_(os) {}
11 12
  void operator()(const CPUPlace &) { os_ << "CPUPlace"; }
  void operator()(const GPUPlace &p) { os_ << "GPUPlace(" << p.device << ")"; }
Y
Yi Wang 已提交
13

Y
Yi Wang 已提交
14
 private:
Y
Yi Wang 已提交
15
  std::ostream &os_;
Y
Yi Wang 已提交
16 17
};

Y
Yi Wang 已提交
18
}  // namespace detail
Y
Yi Wang 已提交
19 20 21

static Place the_default_place;

Y
Yi Wang 已提交
22 23
void set_place(const Place &place) { the_default_place = place; }
const Place &get_place() { return the_default_place; }
Y
Yi Wang 已提交
24

25 26
const GPUPlace default_gpu() { return GPUPlace(0); }
const CPUPlace default_cpu() { return CPUPlace(); }
Y
Yi Wang 已提交
27

Y
Yi Wang 已提交
28
bool is_gpu_place(const Place &p) {
29
  return boost::apply_visitor(IsGPUPlace(), p);
Y
Yi Wang 已提交
30
}
Y
Yi Wang 已提交
31
bool is_cpu_place(const Place &p) {
32
  return !boost::apply_visitor(IsGPUPlace(), p);
Y
Yi Wang 已提交
33 34
}

Y
Yi Wang 已提交
35
bool places_are_same_class(const Place &p1, const Place &p2) {
L
liaogang 已提交
36
  return is_gpu_place(p1) == is_gpu_place(p2);
Y
Yi Wang 已提交
37 38
}

Y
Yi Wang 已提交
39 40
std::ostream &operator<<(std::ostream &os, const Place &p) {
  detail::PlacePrinter printer(os);
L
liaogang 已提交
41 42
  boost::apply_visitor(printer, p);
  return os;
Y
Yi Wang 已提交
43 44
}

Y
Yi Wang 已提交
45 46
}  // namespace platform
}  // namespace paddle