MetricGroup and Metric Export Memory Extension

Contents

MetricGroup and Metric Export Memory Extension#

API#

Sample Code#

The following pseudo-code demonstrates how to map memory exported by metric groups:

// Request Metric group type using pNext of zet_metric_group_properties_t
zet_metric_group_type_exp_t metricGroupType;
metricGroupType.stype = ZET_STRUCTURE_TYPE_METRIC_GROUP_TYPE_EXP;

zet_metric_group_properties_t metricGroupProperties;
metricGroupProperties.stype = ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES;
metricGroupProperties.pNext = &metricGroupType;
zetMetricGroupGetProperties(hMetricGroup, &metricGroupProperties);

if(metricGroupType.type == ZET_METRIC_GROUP_TYPE_EXP_EXPORT_DMA_BUF){
     zet_export_dma_buf_exp_properties_t dmaBufProperties;
     dmaBufProperties.stype = ZET_STRUCTURE_TYPE_EXPORT_DMA_EXP_PROPERTIES;
     metricGroupProperties.pNext = &dmaBufProperties;
     zetMetricGroupGetProperties(hMetricGroup, &metricGroupProperties);

     // Import the dma buf
     ze_external_memory_import_fd_t importDmaBuf = {
         .stype = ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMPORT_FD,
         .flags = ZE_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF,
         .fd = dmaBufProperties.fd;
     };

     ze_device_mem_alloc_desc_t allocDesc = {
         .stype = ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC,
         .pNext = &importDmaBuf,
         .flags = 0,
         .ordinal = 0
     };

     void * pMappedAddress = nullptr;
     zeMemAllocDevice(hContext, &allocDesc, dmaBufProperties.size, 4096, hDevice, &pMappedAddress);
}

The following pseudo-code demonstrates how to map memory exported by metrics:

// Request Metric group type using pNext of zet_metric_properties_t

zet_metric_properties_t metricProperties;
metricProperties.stype = ZET_STRUCTURE_TYPE_METRIC_PROPERTIES;
zetMetricGetProperties(hMetric, &metricProperties);

if(metricProperties.metricType == ZET_METRIC_TYPE_EXP_EXPORT_DMA_BUF){
     zet_export_dma_buf_exp_properties_t dmaBufProperties;
     dmaBufProperties.stype = ZET_STRUCTURE_TYPE_EXPORT_DMA_EXP_PROPERTIES;
     metricProperties.pNext = &dmaBufProperties;
     zetMetricGetProperties(hMetricGroup, &metricProperties);

     // Import the dma buf
     ze_external_memory_import_fd_t importDmaBuf = {
         .stype = ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMPORT_FD,
         .flags = ZE_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF,
         .fd = dmaBufProperties.fd;
     };

     ze_device_mem_alloc_desc_t allocDesc = {
         .stype = ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC,
         .pNext = &importDmaBuf,
         .flags = 0,
         .ordinal = 0
     };

     void * pMappedAddress = nullptr;
     zeMemAllocDevice(hContext, &allocDesc, dmaBufProperties.size, 4096, hDevice, &pMappedAddress);
}