compute-runtime/level_zero/tools/source/metrics/metric_oa_source.h

68 lines
2.5 KiB
C++

/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "level_zero/tools/source/metrics/metric.h"
#include "level_zero/tools/source/metrics/metric_oa_enumeration_imp.h"
#include "level_zero/tools/source/metrics/metric_oa_query_imp.h"
#include "level_zero/tools/source/metrics/metric_oa_streamer_imp.h"
namespace NEO {
class OsLibrary;
} // namespace NEO
namespace L0 {
class OaMetricSourceImp : public MetricSource {
public:
OaMetricSourceImp(const MetricDeviceContext &metricDeviceContext);
~OaMetricSourceImp() override;
void enable() override;
bool isAvailable() override;
ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups) override;
ze_result_t appendMetricMemoryBarrier(CommandList &commandList) override;
bool loadDependencies();
bool isInitialized();
void setInitializationState(const ze_result_t state);
Device &getDevice();
MetricsLibrary &getMetricsLibrary();
MetricEnumeration &getMetricEnumeration();
MetricStreamer *getMetricStreamer();
void setMetricStreamer(MetricStreamer *pMetricStreamer);
void setMetricsLibrary(MetricsLibrary &metricsLibrary);
void setMetricEnumeration(MetricEnumeration &metricEnumeration);
ze_result_t activateMetricGroups();
ze_result_t activateMetricGroupsDeferred(const uint32_t count,
zet_metric_group_handle_t *phMetricGroups);
bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const;
bool isMetricGroupActivated() const;
void setUseCompute(const bool useCompute);
bool isComputeUsed() const;
uint32_t getSubDeviceIndex();
bool isImplicitScalingCapable() const;
const MetricDeviceContext &getMetricDeviceContext() const { return metricDeviceContext; }
static std::unique_ptr<OaMetricSourceImp> create(const MetricDeviceContext &metricDeviceContext);
using OsLibraryLoadPtr = std::add_pointer<NEO::OsLibrary *(const std::string &)>::type;
static OsLibraryLoadPtr osLibraryLoadFunction;
protected:
ze_result_t initializationState = ZE_RESULT_ERROR_UNINITIALIZED;
const MetricDeviceContext &metricDeviceContext;
std::unique_ptr<MetricEnumeration> metricEnumeration = nullptr;
std::unique_ptr<MetricsLibrary> metricsLibrary = nullptr;
MetricStreamer *pMetricStreamer = nullptr;
bool useCompute = false;
};
template <>
OaMetricSourceImp &MetricDeviceContext::getMetricSource<OaMetricSourceImp>() const;
} // namespace L0