1
#include "caffe2/core/workspace.h"
2
#include "caffe2/python/pybind_workspace.h"
7
// NOLINTNEXTLINE(modernize-use-equals-default)
8
BlobFetcherBase::~BlobFetcherBase() {}
10
C10_DEFINE_TYPED_REGISTRY(
16
// gWorkspace is the pointer to the current workspace. The ownership is kept
17
// by the gWorkspaces map.
18
static Workspace* gWorkspace = nullptr;
19
static std::string gCurrentWorkspaceName;
20
// gWorkspaces allows us to define and switch between multiple workspaces in
22
static std::map<std::string, std::unique_ptr<Workspace>> gWorkspaces;
24
Workspace* GetCurrentWorkspace() {
28
void SetCurrentWorkspace(Workspace* workspace) {
29
gWorkspace = workspace;
32
Workspace* NewWorkspace() {
33
std::unique_ptr<Workspace> new_workspace(new Workspace());
34
gWorkspace = new_workspace.get();
38
Workspace* GetWorkspaceByName(const std::string& name) {
39
if (gWorkspaces.count(name)) {
40
return gWorkspaces[name].get();
45
std::string GetCurrentWorkspaceName() {
46
return gCurrentWorkspaceName;
48
void InsertWorkspace(const std::string& name, std::unique_ptr<Workspace> ws) {
49
gWorkspaces.insert(std::make_pair(name, std::move(ws)));
52
void SwitchWorkspaceInternal(const std::string& name, bool create_if_missing) {
53
if (gWorkspaces.count(name)) {
54
gCurrentWorkspaceName = name;
55
gWorkspace = gWorkspaces[name].get();
59
CAFFE_ENFORCE(create_if_missing);
60
std::unique_ptr<Workspace> new_workspace(new Workspace());
61
gWorkspace = new_workspace.get();
62
gWorkspaces.insert(std::make_pair(name, std::move(new_workspace)));
63
gCurrentWorkspaceName = name;
66
void ResetWorkspace(Workspace* workspace) {
67
gWorkspaces[gCurrentWorkspaceName].reset(workspace);
68
gWorkspace = gWorkspaces[gCurrentWorkspaceName].get();
71
void GetWorkspaceNames(std::vector<std::string>& names) {
72
for (const auto& kv : gWorkspaces) {
73
// NOLINTNEXTLINE(performance-inefficient-vector-operation)
74
names.emplace_back(kv.first);
78
void ClearWorkspaces() {