Sub-Allocation Properties Extension

Sub-Allocation Properties Extension

API

Sub-Allocation Properties

Driver implementations may choose to create a device allocation as a series of sub-allocations. For instance, an allocation created against a parent device may be allocated internally as set of N sub-allocations, with N being the number of sub-devices associated with the parent device.

The sub-allocation properties extension may be used to get the properties, i.e. base address and size, for each of those sub-allocations. The following pseudo-code demonstrates a basic use-case of this extension:

zeMemAllocDevice(context, &desc, size, alignment, device, &ptr);

ze_memory_sub_allocations_exp_properties_t subAllocationDesc {};
uitn32_t numberOfSuballocations = 0;
subAllocationDesc.stype = ZE_STRUCTURE_TYPE_MEMORY_SUB_ALLOCATIONS_EXP_PROPERTIES;
subAllocationDesc.pCount = &numberOfSuballocations;

ze_memory_allocation_properties_t memAllocProperties {};
memAllocProperties.stype = ZE_STRUCTURE_TYPE_MEMORY_ALLOCATION_PROPERTIES;
memAllocProperties.pNext = &subAllocationDesc;

// Get number of sub-allocations
zeMemGetAllocProperties(context, ptr, &memAllocProperties, nullptr);

// if more than 1 sub-allocation, then allocation has been split
if (numberOfSuballocations > 1) {
    std::vector<ze_sub_allocation_t> subAllocationMemAllocProperties(numberOfSuballocations);
    subAllocationDesc.pSubAllocations = subAllocationMemAllocProperties.data();

    zeMemGetAllocProperties(context, ptr, &memAllocProperties, nullptr);

    // retrieve the properties of each sub-allocation
    for (auto &subAllocationProperty : subAllocationMemAllocProperties) {
        void * base = subAllocationProperty.base;
        size_t size = subAllocationProperty.size;
    }
}
...