Go to the documentation of this file. 1 #ifndef HALIDE_RUNTIME_MEMORY_RESOURCES_H
2 #define HALIDE_RUNTIME_MEMORY_RESOURCES_H
4 #include "../HalideRuntime.h"
123 return (x & (x - 1)) == 0;
130 return (offset + (alignment - 1)) & ~(alignment - 1);
136 size_t alignment =
max(requested, required);
137 return ((required > 0) && (alignment > required)) ? (required * ((alignment / required) + 1)) : alignment;
144 size_t padding = actual_offset - offset;
145 size_t actual_size = padding + size;
152 size_t adjusted_size =
aligned_size(offset, size, alignment);
153 adjusted_size = (alignment > adjusted_size) ? alignment : adjusted_size;
154 if (nearest_multiple > 0) {
155 size_t rounded_size = (((adjusted_size + nearest_multiple - 1) / nearest_multiple) * nearest_multiple);
158 return adjusted_size;
164 size_t result = (value < min_value) ? min_value : value;
165 return (result > max_value) ? max_value : result;
171 return reinterpret_cast<const void *
>(base + byte_offset);
177 return reinterpret_cast<void *
>(base + byte_offset);
182 typedef void *(*AllocateSystemFn)(
void *,
size_t);
231 case MemoryVisibility::InvalidVisibility: {
232 return "InvalidVisibility";
234 case MemoryVisibility::DefaultVisibility: {
235 return "DefaultVisibility";
237 case MemoryVisibility::HostOnly: {
240 case MemoryVisibility::DeviceOnly: {
243 case MemoryVisibility::HostToDevice: {
244 return "HostToDevice";
246 case MemoryVisibility::DeviceToHost: {
247 return "DeviceToHost";
250 return "<unknown memory visibility value>";
253 return "<unknown memory visibility value>";
258 case MemoryUsage::InvalidUsage: {
259 return "InvalidUsage";
261 case MemoryUsage::DefaultUsage: {
262 return "DefaultUsage";
264 case MemoryUsage::StaticStorage: {
265 return "StaticStorage";
267 case MemoryUsage::DynamicStorage: {
268 return "DynamicStorage";
270 case MemoryUsage::UniformStorage: {
271 return "UniformStorage";
273 case MemoryUsage::TransferSrc: {
274 return "TransferSrc";
276 case MemoryUsage::TransferDst: {
277 return "TransferDst";
279 case MemoryUsage::TransferSrcDst: {
280 return "TransferSrcDst";
283 return "<unknown memory usage value>";
286 return "<unknown memory usage value>";
291 case MemoryCaching::InvalidCaching: {
292 return "InvalidCaching";
294 case MemoryCaching::DefaultCaching: {
295 return "DefaultCaching";
297 case MemoryCaching::Cached: {
300 case MemoryCaching::Uncached: {
303 case MemoryCaching::CachedCoherent: {
304 return "CachedCoherent";
306 case MemoryCaching::UncachedCoherent: {
307 return "UncachedCoherent";
310 return "<unknown memory visibility value>";
313 return "<unknown memory visibility value>";
320 #endif // HALIDE_RUNTIME_MEMORY_RESOURCES_H
DeallocateSystemFn deallocate
int(* AllocateBlockFn)(void *, MemoryBlock *)
void halide_free(void *user_context, void *ptr)
ALWAYS_INLINE void native_system_free(void *user_context, void *ptr)
void(* DeallocateSystemFn)(void *, void *)
ALWAYS_INLINE size_t conform_size(size_t offset, size_t size, size_t alignment, size_t nearest_multiple)
DeallocateBlockFn deallocate
const WEAK char * halide_memory_caching_name(MemoryCaching value)
BlockResource * block_ptr
__UINTPTR_TYPE__ uintptr_t
MemoryProperties properties
AllocateSystemFn allocate
This file defines the class FunctionDAG, which is our representation of a Halide pipeline,...
ALWAYS_INLINE size_t aligned_offset(size_t offset, size_t alignment)
@ Internal
Not visible externally, similar to 'static' linkage in C.
DeallocateSystemFn deallocate
const WEAK char * halide_memory_visibility_name(MemoryVisibility value)
ALWAYS_INLINE void * native_system_malloc(void *user_context, size_t bytes)
ALWAYS_INLINE size_t conform_alignment(size_t requested, size_t required)
AllocateRegionFn allocate
ALWAYS_INLINE bool is_power_of_two_alignment(size_t x)
void * halide_malloc(void *user_context, size_t x)
Halide calls these functions to allocate and free memory.
MemoryProperties properties
RegionAllocator * allocator
Allocator class interface for sub-allocating a contiguous memory block into smaller regions of memory...
int(* DeallocateRegionFn)(void *, MemoryRegion *)
const WEAK char * halide_memory_usage_name(MemoryUsage value)
DeallocateRegionFn deallocate
void *(* AllocateSystemFn)(void *, size_t)
MemoryVisibility visibility
ALWAYS_INLINE size_t clamped_size(size_t value, size_t min_value, size_t max_value)
#define halide_abort_if_false(user_context, cond)
const ALWAYS_INLINE void * offset_address(const void *address, size_t byte_offset)
ALWAYS_INLINE size_t aligned_size(size_t offset, size_t size, size_t alignment)
unsigned __INT32_TYPE__ uint32_t
Expr max(const FuncRef &a, const FuncRef &b)
AllocateSystemFn allocate
int(* AllocateRegionFn)(void *, MemoryRegion *)
MemoryProperties properties
int(* DeallocateBlockFn)(void *, MemoryBlock *)