1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#include <torch/csrc/jit/tensorexpr/mem_arena.h>
namespace torch {
namespace jit {
namespace tensorexpr {
namespace {
// Define in an anonymous namespace to hide this symbol from other compilation
// units
thread_local KernelArena* current_arena = nullptr;
} // namespace
KernelArena::~KernelArena() {
for (KernelScopedObject* p : kernel_objects_) {
delete p;
}
}
KernelScopedObject::KernelScopedObject() {
KernelArena* kernel = KernelArena::GetCurrentKernelArena();
kernel->kernel_objects_.push_back(this);
}
void KernelArena::SetCurrentKernelArena(KernelArena* new_kernel_arena) {
current_arena = new_kernel_arena;
}
KernelArena* KernelArena::GetCurrentKernelArena() {
return current_arena;
}
KernelScope::KernelScope() : owning_(true) {
old_kernel_arena_ = KernelArena::GetCurrentKernelArena();
KernelArena::SetCurrentKernelArena(new KernelArena);
}
KernelScope::KernelScope(KernelArena* arena_) : owning_(false) {
old_kernel_arena_ = KernelArena::GetCurrentKernelArena();
KernelArena::SetCurrentKernelArena(arena_);
}
KernelScope::~KernelScope() {
if (owning_) {
delete KernelArena::GetCurrentKernelArena();
}
KernelArena::SetCurrentKernelArena(old_kernel_arena_);
}
} // namespace tensorexpr
} // namespace jit
} // namespace torch
|