9#include <umpire_cxx_allocator.hpp>
11#include <umpire/strategy/QuickPool.hpp>
12#include <umpire/strategy/SizeLimiter.hpp>
39 if (!instance_accessor()) {
42 return instance_accessor();
53 static void initialize(
const std::uint64_t page_size = (1ul << 25),
54 const std::uint64_t pinned_alloc_limit = (1ul << 40)) {
55 static std::mutex mtx;
56 std::scoped_lock lock{mtx};
58 if (instance_accessor() ==
nullptr) {
65 auto& rm = umpire::ResourceManager::getInstance();
69 constexpr auto introspect =
true;
71 constexpr auto introspect =
false;
75 auto pinned_size_limited_alloc =
76 rm.makeAllocator<umpire::strategy::SizeLimiter, introspect>(
77 "SizeLimited_PINNED", rm.getAllocator(
"PINNED"),
79 auto pinned_dynamic_pool =
80 rm.makeAllocator<umpire::strategy::QuickPool, introspect>(
81 "QuickPool_SizeLimited_PINNED", pinned_size_limited_alloc,
86 auto env = std::unique_ptr<Env>(
new Env(pinned_dynamic_pool));
87 instance_accessor() = std::move(env);
103 assert(
dynamic_cast<::umpire::strategy::QuickPool*
>(
104 pinned_allocator_.getAllocationStrategy()) !=
nullptr);
105 return dynamic_cast<::umpire::strategy::QuickPool*
>(
106 pinned_allocator_.getAllocationStrategy())
107 ->getActualHighwaterMark();
111 Env(::umpire::Allocator pinned_alloc)
112 : pinned_allocator_(pinned_alloc) {}
117 ::umpire::Allocator pinned_allocator_;
119 inline static std::unique_ptr<Env>& instance_accessor() {
120 static std::unique_ptr<Env> instance_{
nullptr};
127 struct pinned_allocator_getter {
128 inline ::umpire::Allocator& operator()() {
return Env::instance()->pinned_allocator(); }
134 template <
typename T>
136 T, ::umpire::allocator<T, ::umpire::detail::MutexLock<::ttg::Env>,
137 umpire::pinned_allocator_getter>>;
static void initialize(const std::uint64_t page_size=(1ul<< 25), const std::uint64_t pinned_alloc_limit=(1ul<< 40))
auto & pinned_allocator()
Env(::umpire::Allocator pinned_alloc)
Env & operator=(Env &&)=delete
Env & operator=(const Env &)=delete
std::size_t pinned_allocator_getActualHighWatermark()
static std::unique_ptr< Env > & instance()
top-level TTG namespace contains runtime-neutral functionality
::umpire::default_init_allocator< T, ::umpire::allocator< T, ::umpire::detail::MutexLock<::ttg::Env >, umpire::pinned_allocator_getter > > pinned_allocator_t
pooled thread-safe pinned host memory allocator for device computing