20#ifndef REALM_IB_MEMORY_H
21#define REALM_IB_MEMORY_H
33 static constexpr size_t IB_ALLOC_ALIGNMENT = 256;
37 inline size_t ib_align_up(
size_t n,
size_t mult = IB_ALLOC_ALIGNMENT)
42 size_t leftover = n % mult;
46 size_t extra = mult - leftover;
47 if(n > (std::numeric_limits<size_t>::max() - extra)) {
48 return std::numeric_limits<size_t>::max();
69 bool need_alloc_result,
76 virtual void get_bytes(off_t offset,
void *dst,
size_t size);
77 virtual void put_bytes(off_t offset,
const void *
src,
size_t size);
81 const size_t *sizes, off_t *offsets);
86 void free_multiple(
size_t count,
const off_t *offsets,
const size_t *sizes,
117 const void *data,
size_t msglen,
TimeLimit work_until);
127 const void *data,
size_t msglen,
TimeLimit work_until);
136 const void *data,
size_t msglen,
TimeLimit work_until);
144 const void *data,
size_t msglen,
TimeLimit work_until);
153 const void *data,
size_t msglen,
TimeLimit work_until);
160 const void *data,
size_t msglen,
TimeLimit work_until);
Definition ib_memory.h:54
off_t do_alloc(size_t size)
virtual void * get_direct_ptr(off_t offset, size_t size)
std::map< off_t, off_t > free_blocks
Definition ib_memory.h:97
void free_multiple(size_t count, const off_t *offsets, const size_t *sizes, TimeLimit work_until)
PendingIBRequests * satisfy_pending_reqs()
Mutex mutex
Definition ib_memory.h:96
char * base
Definition ib_memory.h:98
virtual AllocationResult allocate_storage_immediate(RegionInstanceImpl *inst, bool need_alloc_result, bool poisoned, TimeLimit work_until)
bool attempt_immediate_allocation(NodeID requestor, uintptr_t req_op, size_t count, const size_t *sizes, off_t *offsets)
PendingIBRequests ** ibreq_tail
Definition ib_memory.h:100
virtual off_t alloc_bytes_local(size_t size)
PendingIBRequests * ibreq_head
Definition ib_memory.h:99
void enqueue_requests(PendingIBRequests *reqs, TimeLimit work_until)
void forward_satisfied_reqs(PendingIBRequests *reqs, TimeLimit work_until)
virtual void put_bytes(off_t offset, const void *src, size_t size)
IBMemory(RuntimeImpl *_runtime_impl, Memory _me, size_t _size, MemoryKind _kind, Memory::Kind _lowlevel_kind, void *prealloc_base, NetworkSegment *_segment)
void free_bytes_local(off_t offset, size_t size, TimeLimit work_until)
void do_free(off_t offset, size_t size)
virtual void get_bytes(off_t offset, void *dst, size_t size)
virtual void release_storage_immediate(RegionInstanceImpl *inst, bool poisoned, TimeLimit work_until)
MemoryKind
Definition mem_impl.h:53
AllocationResult
Definition mem_impl.h:89
Kind
Definition memory.h:59
Definition mem_impl.h:220
Definition inst_impl.h:54
Definition runtime_impl.h:267
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
Definition activemsg.h:42
int NodeID
Definition nodeset.h:40
void free_intermediate_buffer(Memory mem, off_t offset, size_t size, TimeLimit work_until)
size_t ib_align_up(size_t n, size_t mult=IB_ALLOC_ALIGNMENT)
Definition ib_memory.h:37
Definition ib_memory.h:120
unsigned curr_index
Definition ib_memory.h:122
unsigned count
Definition ib_memory.h:122
static void handle_message(NodeID sender, const RemoteIBAllocRequestMultiple &args, const void *data, size_t msglen, TimeLimit work_until)
NodeID requestor
Definition ib_memory.h:121
bool immediate
Definition ib_memory.h:124
unsigned first_index
Definition ib_memory.h:122
uintptr_t req_op
Definition ib_memory.h:123
Definition ib_memory.h:109
bool immediate
Definition ib_memory.h:114
static void handle_message(NodeID sender, const RemoteIBAllocRequestSingle &args, const void *data, size_t msglen, TimeLimit work_until)
uintptr_t req_op
Definition ib_memory.h:112
Memory memory
Definition ib_memory.h:110
size_t size
Definition ib_memory.h:111
unsigned req_index
Definition ib_memory.h:113
Definition ib_memory.h:139
static void handle_message(NodeID sender, const RemoteIBAllocResponseMultiple &args, const void *data, size_t msglen, TimeLimit work_until)
uintptr_t req_op
Definition ib_memory.h:140
unsigned first_index
Definition ib_memory.h:141
unsigned count
Definition ib_memory.h:141
Definition ib_memory.h:130
static void handle_message(NodeID sender, const RemoteIBAllocResponseSingle &args, const void *data, size_t msglen, TimeLimit work_until)
off_t offset
Definition ib_memory.h:133
uintptr_t req_op
Definition ib_memory.h:131
unsigned req_index
Definition ib_memory.h:132
Definition ib_memory.h:156
unsigned count
Definition ib_memory.h:157
static void handle_message(NodeID sender, const RemoteIBReleaseMultiple &args, const void *data, size_t msglen, TimeLimit work_until)
Definition ib_memory.h:147
size_t size
Definition ib_memory.h:149
static void handle_message(NodeID sender, const RemoteIBReleaseSingle &args, const void *data, size_t msglen, TimeLimit work_until)
off_t offset
Definition ib_memory.h:150
Memory memory
Definition ib_memory.h:148
NodeID src
Definition ucp_internal.h:1