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 11 12
  PlacePrinter(std::ostream &os) : os_(os) {}
  void operator()(const CpuPlace &) { os_ << "CpuPlace"; }
  void operator()(const GpuPlace &p) { os_ << "GpuPlace(" << p.device << ")"; }
Y
Yi Wang 已提交
13

Y
Yi Wang 已提交
14 15
private:
  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

L
liaogang 已提交
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) {
L
liaogang 已提交
29
  return boost::apply_visitor(IsGpuPlace(), p);
Y
Yi Wang 已提交
30
}
Y
Yi Wang 已提交
31
bool is_cpu_place(const Place &p) {
L
liaogang 已提交
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