Caffe2 - C++ API
A deep learning, cross platform ML framework
Handle.cpp
1 #include <ATen/miopen/Handle.h>
2 
3 #include <ATen/miopen/Exceptions.h>
4 
5 #include <unordered_map>
6 #include <mutex>
7 
8 namespace at { namespace native {
9 
10 namespace {
11 
12 struct Handle {
13  miopenHandle_t handle;
14  Handle() : handle(NULL) {
15  MIOPEN_CHECK(miopenCreate(&handle));
16  }
17  ~Handle() {
18  if (handle) {
19  miopenDestroy(handle);
20  }
21  }
22 };
23 
24 std::mutex mutex;
25 std::unordered_map<int, Handle> handles;
26 
27 } // namespace
28 
29 
30 miopenHandle_t getMiopenHandle()
31 {
32  int device;
33  HIP_CHECK(hipGetDevice(&device));
34 
35  std::lock_guard<std::mutex> guard(mutex);
36  return handles[device].handle;
37 }
38 
39 }} // namespace at::native
Flush-To-Zero and Denormals-Are-Zero mode.