8#include <umpire_cxx_allocator.hpp>
10#include <umpire/strategy/QuickPool.hpp>
11#include <umpire/strategy/SizeLimiter.hpp>
38 if (!instance_accessor()) {
41 return instance_accessor();
52 static void initialize(
const std::uint64_t page_size = (1ul << 25),
53 const std::uint64_t pinned_alloc_limit = (1ul << 40)) {
54 static std::mutex mtx;
55 std::scoped_lock lock{mtx};
57 if (instance_accessor() ==
nullptr) {
64 auto& rm = umpire::ResourceManager::getInstance();
68 constexpr auto introspect =
true;
70 constexpr auto introspect =
false;
74 auto pinned_size_limited_alloc =
75 rm.makeAllocator<umpire::strategy::SizeLimiter, introspect>(
76 "SizeLimited_PINNED", rm.getAllocator(
"PINNED"),
78 auto pinned_dynamic_pool =
79 rm.makeAllocator<umpire::strategy::QuickPool, introspect>(
80 "QuickPool_SizeLimited_PINNED", pinned_size_limited_alloc,
85 auto env = std::unique_ptr<Env>(
new Env(pinned_dynamic_pool));
86 instance_accessor() = std::move(env);
102 assert(
dynamic_cast<::umpire::strategy::QuickPool*
>(
103 pinned_allocator_.getAllocationStrategy()) !=
nullptr);
104 return dynamic_cast<::umpire::strategy::QuickPool*
>(
105 pinned_allocator_.getAllocationStrategy())
106 ->getActualHighwaterMark();
110 Env(::umpire::Allocator pinned_alloc)
111 : pinned_allocator_(pinned_alloc) {}
116 ::umpire::Allocator pinned_allocator_;
118 inline static std::unique_ptr<Env>& instance_accessor() {
119 static std::unique_ptr<Env> instance_{
nullptr};
126 struct pinned_allocator_getter {
127 inline ::umpire::Allocator& operator()() {
return Env::instance()->pinned_allocator(); }
133 template <
typename T>
135 T, ::umpire::allocator<T, ::umpire::detail::MutexLock<::ttg::Env>,
136 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