blob: aabf1f7b163645b08cc721cc89622957a72be355 [file] [log] [blame]
#include "caffe2/onnx/onnxifi_graph_info.h"
#include "caffe2/core/logging.h"
namespace caffe2 {
namespace onnx {
SharedPtrBackendGraphInfo OnnxBackendGraphMap::lookup(const std::string& key) {
std::lock_guard<std::mutex> guard(backend_graph_map_lock_);
auto it = backend_graph_map_.find(key);
if (it != backend_graph_map_.end()) {
return it->second;
}
return nullptr;
}
SharedPtrBackendGraphInfo OnnxBackendGraphMap::insert(
const std::string& key,
std::function<SharedPtrBackendGraphInfo()> creator) {
// First acquire lock.
std::lock_guard<std::mutex> guard(backend_graph_map_lock_);
// Then check if the backend_graph_info already exists in the map.
if (backend_graph_map_.find(key) != backend_graph_map_.end()) {
LOG(INFO) << "Reusing onnxifi backend for: " << key;
// If it already exists, return it.
// The onus is on the caller to release onnxGraph pointed by
// backend_graph_info
return backend_graph_map_[key];
}
LOG(INFO) << "Creating onnxifi backend for: " << key;
const auto ret_pair = backend_graph_map_.emplace(key, creator());
return ret_pair.first->second;
}
void OnnxBackendGraphMap::remove(const std::string& key) {
SharedPtrBackendGraphInfo tmp;
{
std::lock_guard<std::mutex> guard(backend_graph_map_lock_);
auto it = backend_graph_map_.find(key);
if (it != backend_graph_map_.end()) {
if (it->second.unique()) {
LOG(INFO) << "Removing onnxifi backend for " << key;
tmp = it->second;
backend_graph_map_.erase(it);
}
}
}
}
OnnxBackendGraphMap* getOnnxBackendGraphMap() {
static OnnxBackendGraphMap onnx_backend_graph_map;
return &onnx_backend_graph_map;
}
} // namespace onnx
} // namespace caffe2