2020-03-06 18:09:57 +08:00
|
|
|
/*
|
2021-01-29 22:53:25 +08:00
|
|
|
* Copyright (C) 2019-2021 Intel Corporation
|
2020-03-06 18:09:57 +08:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
#include "level_zero/tools/source/metrics/metric.h"
|
|
|
|
|
|
|
|
#include <map>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
using MetricsLibraryApi::ClientCallbacks_1_0;
|
|
|
|
using MetricsLibraryApi::ClientGen;
|
2020-12-17 21:17:28 +08:00
|
|
|
using MetricsLibraryApi::ClientOptionsData_1_0;
|
2020-03-06 18:09:57 +08:00
|
|
|
using MetricsLibraryApi::CommandBufferData_1_0;
|
|
|
|
using MetricsLibraryApi::ConfigurationHandle_1_0;
|
|
|
|
using MetricsLibraryApi::ContextCreateData_1_0;
|
|
|
|
using MetricsLibraryApi::ContextCreateFunction_1_0;
|
|
|
|
using MetricsLibraryApi::ContextDeleteFunction_1_0;
|
|
|
|
using MetricsLibraryApi::ContextHandle_1_0;
|
|
|
|
using MetricsLibraryApi::Interface_1_0;
|
|
|
|
using MetricsLibraryApi::QueryHandle_1_0;
|
|
|
|
|
|
|
|
namespace L0 {
|
|
|
|
struct Device;
|
|
|
|
struct CommandList;
|
|
|
|
struct MetricGroup;
|
|
|
|
} // namespace L0
|
|
|
|
|
|
|
|
namespace NEO {
|
|
|
|
class OsLibrary;
|
|
|
|
class GraphicsAllocation;
|
|
|
|
} // namespace NEO
|
|
|
|
|
|
|
|
namespace L0 {
|
|
|
|
|
|
|
|
struct MetricsLibrary {
|
|
|
|
public:
|
|
|
|
MetricsLibrary(MetricContext &metricContext);
|
|
|
|
virtual ~MetricsLibrary();
|
|
|
|
|
|
|
|
// Initialization.
|
|
|
|
virtual bool load();
|
|
|
|
bool isInitialized();
|
2021-01-29 22:53:25 +08:00
|
|
|
ze_result_t getInitializationState();
|
2020-12-17 21:17:28 +08:00
|
|
|
void getSubDeviceClientOptions(NEO::Device &neoDevice,
|
|
|
|
ClientOptionsData_1_0 &subDevice,
|
|
|
|
ClientOptionsData_1_0 &subDeviceIndex,
|
|
|
|
ClientOptionsData_1_0 &subDeviceCount);
|
2020-03-06 18:09:57 +08:00
|
|
|
static const char *getFilename();
|
|
|
|
|
2020-05-13 21:13:31 +08:00
|
|
|
// Deinitialization.
|
|
|
|
void release();
|
|
|
|
|
2020-03-06 18:09:57 +08:00
|
|
|
// Metric query.
|
|
|
|
bool createMetricQuery(const uint32_t slotsCount, QueryHandle_1_0 &query,
|
|
|
|
NEO::GraphicsAllocation *&pAllocation);
|
2020-05-08 15:33:58 +08:00
|
|
|
uint32_t getMetricQueryCount();
|
2020-07-13 22:35:06 +08:00
|
|
|
bool getMetricQueryReport(QueryHandle_1_0 &query, const uint32_t slot, const size_t rawDataSize, uint8_t *pData);
|
2020-03-06 18:09:57 +08:00
|
|
|
virtual bool getMetricQueryReportSize(size_t &rawDataSize);
|
|
|
|
bool destroyMetricQuery(QueryHandle_1_0 &query);
|
|
|
|
|
|
|
|
// Command buffer.
|
|
|
|
bool getGpuCommands(CommandList &commandList, CommandBufferData_1_0 &commandBuffer);
|
|
|
|
uint32_t getGpuCommandsSize(CommandBufferData_1_0 &commandBuffer);
|
|
|
|
|
|
|
|
// Metric group configuration.
|
|
|
|
ConfigurationHandle_1_0 getConfiguration(const zet_metric_group_handle_t metricGroup);
|
|
|
|
bool activateConfiguration(const ConfigurationHandle_1_0 configurationHandle);
|
|
|
|
bool deactivateConfiguration(const ConfigurationHandle_1_0 configurationHandle);
|
2020-05-08 15:33:58 +08:00
|
|
|
void cacheConfiguration(zet_metric_group_handle_t metricGroup, ConfigurationHandle_1_0 configurationHandle);
|
|
|
|
void deleteAllConfigurations();
|
2020-03-06 18:09:57 +08:00
|
|
|
|
|
|
|
protected:
|
|
|
|
void initialize();
|
|
|
|
|
|
|
|
bool createContext();
|
|
|
|
virtual bool getContextData(Device &device, ContextCreateData_1_0 &contextData);
|
|
|
|
|
|
|
|
ConfigurationHandle_1_0 createConfiguration(const zet_metric_group_handle_t metricGroup,
|
2020-07-29 17:45:54 +08:00
|
|
|
const zet_metric_group_properties_t properties);
|
2020-03-06 18:09:57 +08:00
|
|
|
ConfigurationHandle_1_0 addConfiguration(const zet_metric_group_handle_t metricGroup);
|
|
|
|
|
|
|
|
ClientGen getGenType(const uint32_t gen) const;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
NEO::OsLibrary *handle = nullptr;
|
|
|
|
MetricContext &metricContext;
|
|
|
|
ze_result_t initializationState = ZE_RESULT_ERROR_UNINITIALIZED;
|
2020-05-08 15:33:58 +08:00
|
|
|
std::mutex mutex;
|
2020-03-06 18:09:57 +08:00
|
|
|
|
|
|
|
// Metrics library types.
|
|
|
|
Interface_1_0 api = {};
|
|
|
|
ClientCallbacks_1_0 callbacks = {};
|
|
|
|
ContextHandle_1_0 context = {};
|
|
|
|
ContextCreateFunction_1_0 contextCreateFunction = nullptr;
|
|
|
|
ContextDeleteFunction_1_0 contextDeleteFunction = nullptr;
|
2020-03-04 14:58:02 +08:00
|
|
|
std::map<zet_metric_group_handle_t, ConfigurationHandle_1_0> configurations;
|
2020-05-08 15:33:58 +08:00
|
|
|
std::vector<QueryHandle_1_0> queries;
|
2020-03-06 18:09:57 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct MetricQueryImp : MetricQuery {
|
|
|
|
public:
|
|
|
|
MetricQueryImp(MetricContext &metricContext, struct MetricQueryPoolImp &pool,
|
|
|
|
const uint32_t slot);
|
|
|
|
|
|
|
|
ze_result_t appendBegin(CommandList &commandList) override;
|
2020-07-27 22:51:20 +08:00
|
|
|
ze_result_t appendEnd(CommandList &commandList, ze_event_handle_t hSignalEvent,
|
|
|
|
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents) override;
|
2020-03-06 18:09:57 +08:00
|
|
|
|
|
|
|
ze_result_t getData(size_t *pRawDataSize, uint8_t *pRawData) override;
|
|
|
|
|
|
|
|
ze_result_t reset() override;
|
|
|
|
ze_result_t destroy() override;
|
|
|
|
|
|
|
|
protected:
|
2020-07-27 22:51:20 +08:00
|
|
|
ze_result_t writeMetricQuery(CommandList &commandList, ze_event_handle_t hSignalEvent,
|
|
|
|
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents,
|
2020-03-06 18:09:57 +08:00
|
|
|
const bool begin);
|
2020-08-24 16:11:39 +08:00
|
|
|
ze_result_t writeSkipExecutionQuery(CommandList &commandList, ze_event_handle_t hSignalEvent,
|
|
|
|
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents,
|
|
|
|
const bool begin);
|
2020-03-06 18:09:57 +08:00
|
|
|
|
|
|
|
protected:
|
|
|
|
MetricContext &metricContext;
|
|
|
|
MetricsLibrary &metricsLibrary;
|
|
|
|
MetricQueryPoolImp &pool;
|
|
|
|
uint32_t slot;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct MetricQueryPoolImp : MetricQueryPool {
|
|
|
|
public:
|
2020-07-29 17:45:54 +08:00
|
|
|
MetricQueryPoolImp(MetricContext &metricContext, zet_metric_group_handle_t hEventMetricGroup, const zet_metric_query_pool_desc_t &poolDescription);
|
2020-03-06 18:09:57 +08:00
|
|
|
|
|
|
|
bool create();
|
2020-04-29 07:57:57 +08:00
|
|
|
ze_result_t destroy() override;
|
2020-03-06 18:09:57 +08:00
|
|
|
|
|
|
|
ze_result_t createMetricQuery(uint32_t index, zet_metric_query_handle_t *phMetricQuery) override;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
bool createMetricQueryPool();
|
2020-08-24 16:11:39 +08:00
|
|
|
bool createSkipExecutionQueryPool();
|
2020-03-06 18:09:57 +08:00
|
|
|
|
|
|
|
public:
|
|
|
|
MetricContext &metricContext;
|
|
|
|
MetricsLibrary &metricsLibrary;
|
|
|
|
std::vector<MetricQueryImp> pool;
|
|
|
|
NEO::GraphicsAllocation *pAllocation = nullptr;
|
2020-07-29 17:45:54 +08:00
|
|
|
zet_metric_query_pool_desc_t description = {};
|
2020-03-06 18:09:57 +08:00
|
|
|
zet_metric_group_handle_t hMetricGroup = nullptr;
|
|
|
|
QueryHandle_1_0 query = {};
|
|
|
|
};
|
|
|
|
} // namespace L0
|