Improve zello Metrics
1. Added command line handling 1.1 Replaced device/sub-device specific test with single test with input argument 2. Added verbose levels 3. Added support to run all tests sequentially 4. Replace zetMetricGroupCalculateMetricValues with zetMetricGroupCalculateMetricValuesExp Related-To: LOCI-3078 Signed-off-by: Joshua Santosh Ranjan <joshua.santosh.ranjan@intel.com>
This commit is contained in:
parent
d935815d74
commit
a38a3ce730
File diff suppressed because it is too large
Load Diff
|
@ -147,9 +147,6 @@ class CopyBufferToBuffer : public Workload {
|
|||
|
||||
class SingleMetricCollector : public Collector {
|
||||
|
||||
public:
|
||||
void setVerboseLevel(uint32_t level) { verboseLevel = level; }
|
||||
|
||||
protected:
|
||||
SingleMetricCollector(ExecutionContext *executionCtxt,
|
||||
const char *metricGroupName,
|
||||
|
@ -165,8 +162,6 @@ class SingleMetricCollector : public Collector {
|
|||
|
||||
zet_metric_group_handle_t metricGroup = {};
|
||||
zet_metric_group_sampling_type_flag_t samplingType = {};
|
||||
|
||||
uint32_t verboseLevel = 0;
|
||||
};
|
||||
|
||||
class SingleMetricStreamerCollector : public SingleMetricCollector {
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
namespace zmu = ZelloMetricsUtility;
|
||||
|
||||
///////////////////////////
|
||||
/////SingleMetricCollector
|
||||
///////////////////////////
|
||||
|
@ -20,13 +22,13 @@ SingleMetricCollector::SingleMetricCollector(ExecutionContext *executionCtxt,
|
|||
const zet_metric_group_sampling_type_flag_t samplingType)
|
||||
: Collector(executionCtxt), samplingType(samplingType) {
|
||||
|
||||
metricGroup = ZelloMetricsUtility::findMetricGroup(metricGroupName, samplingType, executionCtxt->getDeviceHandle(0));
|
||||
metricGroup = zmu::findMetricGroup(metricGroupName, samplingType, executionCtxt->getDeviceHandle(0));
|
||||
|
||||
if (verboseLevel >= 1) {
|
||||
if (zmu::TestSettings::get()->verboseLevel >= zmu::LogLevel::DEBUG) {
|
||||
zet_metric_group_properties_t metricGroupProperties = {};
|
||||
// Obtain metric group properties to check the group name and sampling type.
|
||||
VALIDATECALL(zetMetricGroupGetProperties(metricGroup, &metricGroupProperties));
|
||||
ZelloMetricsUtility::printMetricGroupProperties(metricGroupProperties);
|
||||
zmu::printMetricGroupProperties(metricGroupProperties);
|
||||
|
||||
// Print metrics from metric group.
|
||||
uint32_t metricCount = 0;
|
||||
|
@ -45,7 +47,7 @@ SingleMetricCollector::SingleMetricCollector(ExecutionContext *executionCtxt,
|
|||
const zet_metric_handle_t metric = metrics[j];
|
||||
zet_metric_properties_t metricProperties = {};
|
||||
VALIDATECALL(zetMetricGetProperties(metric, &metricProperties));
|
||||
ZelloMetricsUtility::printMetricProperties(metricProperties);
|
||||
zmu::printMetricProperties(metricProperties);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,8 +64,8 @@ SingleMetricStreamerCollector::SingleMetricStreamerCollector(ExecutionContext *e
|
|||
|
||||
bool SingleMetricStreamerCollector::start() {
|
||||
|
||||
eventPool = ZelloMetricsUtility::createHostVisibleEventPool(executionCtxt->getContextHandle(0), executionCtxt->getDeviceHandle(0));
|
||||
notificationEvent = ZelloMetricsUtility::createHostVisibleEvent(eventPool);
|
||||
eventPool = zmu::createHostVisibleEventPool(executionCtxt->getContextHandle(0), executionCtxt->getDeviceHandle(0));
|
||||
notificationEvent = zmu::createHostVisibleEvent(eventPool);
|
||||
|
||||
zet_metric_streamer_desc_t streamerProperties = {};
|
||||
streamerProperties.notifyEveryNReports = notifyReportCount;
|
||||
|
@ -107,14 +109,14 @@ void SingleMetricStreamerCollector::showResults() {
|
|||
std::vector<uint8_t> rawData{};
|
||||
|
||||
VALIDATECALL(zetMetricStreamerReadData(metricStreamer, maxRawReportCount, &rawDataSize, nullptr));
|
||||
std::cout << "Streamer read requires: " << rawDataSize << " bytes buffer" << std::endl;
|
||||
LOG(zmu::LogLevel::DEBUG) << "Streamer read requires: " << rawDataSize << " bytes buffer" << std::endl;
|
||||
|
||||
// Read raw data.
|
||||
rawData.resize(rawDataSize, 0);
|
||||
VALIDATECALL(zetMetricStreamerReadData(metricStreamer, maxRawReportCount, &rawDataSize, rawData.data()));
|
||||
std::cout << "Streamer read raw bytes: " << rawDataSize << std::endl;
|
||||
LOG(zmu::LogLevel::DEBUG) << "Streamer read raw bytes: " << rawDataSize << std::endl;
|
||||
|
||||
ZelloMetricsUtility::obtainCalculatedMetrics(metricGroup, rawData.data(), static_cast<uint32_t>(rawDataSize));
|
||||
zmu::obtainCalculatedMetrics(metricGroup, rawData.data(), static_cast<uint32_t>(rawDataSize));
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
@ -129,8 +131,8 @@ SingleMetricQueryCollector::SingleMetricQueryCollector(ExecutionContext *executi
|
|||
|
||||
bool SingleMetricQueryCollector::start() {
|
||||
|
||||
eventPool = ZelloMetricsUtility::createHostVisibleEventPool(executionCtxt->getContextHandle(0), executionCtxt->getDeviceHandle(0));
|
||||
notificationEvent = ZelloMetricsUtility::createHostVisibleEvent(eventPool);
|
||||
eventPool = zmu::createHostVisibleEventPool(executionCtxt->getContextHandle(0), executionCtxt->getDeviceHandle(0));
|
||||
notificationEvent = zmu::createHostVisibleEvent(eventPool);
|
||||
queryPoolDesc.count = queryPoolCount;
|
||||
queryPoolDesc.type = ZET_METRIC_QUERY_POOL_TYPE_PERFORMANCE;
|
||||
|
||||
|
@ -186,5 +188,5 @@ void SingleMetricQueryCollector::showResults() {
|
|||
rawData.resize(rawDataSize);
|
||||
VALIDATECALL(zetMetricQueryGetData(queryHandle, &rawDataSize, rawData.data()));
|
||||
|
||||
ZelloMetricsUtility::obtainCalculatedMetrics(metricGroup, rawData.data(), static_cast<uint32_t>(rawDataSize));
|
||||
zmu::obtainCalculatedMetrics(metricGroup, rawData.data(), static_cast<uint32_t>(rawDataSize));
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
#include <limits>
|
||||
#include <vector>
|
||||
|
||||
namespace zmu = ZelloMetricsUtility;
|
||||
|
||||
///////////////////////////
|
||||
/////ExecutionContext
|
||||
///////////////////////////
|
||||
|
@ -57,21 +59,21 @@ bool ExecutionContext::deactivateMetricGroups() {
|
|||
//////////////////////////////////////////
|
||||
bool SingleDeviceSingleQueueExecutionCtxt::initialize(uint32_t deviceIndex, int32_t subDeviceIndex) {
|
||||
|
||||
ZelloMetricsUtility::createL0();
|
||||
driverHandle = ZelloMetricsUtility::getDriver();
|
||||
zmu::createL0();
|
||||
driverHandle = zmu::getDriver();
|
||||
EXPECT(driverHandle != nullptr);
|
||||
contextHandle = ZelloMetricsUtility::createContext(driverHandle);
|
||||
contextHandle = zmu::createContext(driverHandle);
|
||||
EXPECT(contextHandle != nullptr);
|
||||
|
||||
deviceHandle = ZelloMetricsUtility::getDevice(driverHandle, deviceIndex);
|
||||
deviceHandle = zmu::getDevice(driverHandle, deviceIndex);
|
||||
EXPECT(deviceHandle != nullptr);
|
||||
if (subDeviceIndex != -1) {
|
||||
deviceHandle = ZelloMetricsUtility::getSubDevice(deviceHandle, subDeviceIndex);
|
||||
deviceHandle = zmu::getSubDevice(deviceHandle, subDeviceIndex);
|
||||
EXPECT(deviceHandle != nullptr);
|
||||
}
|
||||
commandQueue = ZelloMetricsUtility::createCommandQueue(contextHandle, deviceHandle);
|
||||
commandQueue = zmu::createCommandQueue(contextHandle, deviceHandle);
|
||||
EXPECT(commandQueue != nullptr);
|
||||
commandList = ZelloMetricsUtility::createCommandList(contextHandle, deviceHandle);
|
||||
commandList = zmu::createCommandList(contextHandle, deviceHandle);
|
||||
EXPECT(commandList != nullptr);
|
||||
return true;
|
||||
}
|
||||
|
@ -109,7 +111,7 @@ bool SingleDeviceSingleQueueExecutionCtxt::run() {
|
|||
runCount++;
|
||||
} while (diff < executionTimeInMilliSeconds);
|
||||
|
||||
std::cout << "CommandList Run count : " << runCount << "\n";
|
||||
LOG(zmu::LogLevel::DEBUG) << "CommandList Run count : " << runCount << "\n";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "level_zero/tools/test/black_box_tests/zello_metrics/zello_metrics.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <getopt.h>
|
||||
#include <iomanip>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
|
@ -19,7 +20,6 @@ namespace ZelloMetricsUtility {
|
|||
/// createL0
|
||||
///////////////////////////
|
||||
void createL0() {
|
||||
|
||||
VALIDATECALL(zeInit(ZE_INIT_FLAG_GPU_ONLY));
|
||||
}
|
||||
|
||||
|
@ -63,9 +63,30 @@ bool getTestMachineConfiguration(TestMachineConfiguration &machineConfig) {
|
|||
VALIDATECALL(zeDeviceGetSubDevices(devices[deviceId], &subDevicesCount, nullptr));
|
||||
machineConfig.devices[deviceId].subDeviceCount = subDevicesCount;
|
||||
}
|
||||
|
||||
ze_device_properties_t deviceProperties;
|
||||
VALIDATECALL(zeDeviceGetProperties(devices[0], &deviceProperties));
|
||||
machineConfig.deviceId = deviceProperties.deviceId;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool isDeviceAvailable(uint32_t deviceIndex, int32_t subDeviceIndex) {
|
||||
bool checkStatus = false;
|
||||
|
||||
TestMachineConfiguration config;
|
||||
getTestMachineConfiguration(config);
|
||||
if (deviceIndex < config.deviceCount) {
|
||||
if (subDeviceIndex < static_cast<int32_t>(config.devices[deviceIndex].subDeviceCount)) {
|
||||
checkStatus = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (checkStatus == false) {
|
||||
LOG(LogLevel::WARNING) << "Warning:: Unsupported Configuration: Device :" << deviceIndex << " Sub Device :" << subDeviceIndex << "\n";
|
||||
}
|
||||
return checkStatus;
|
||||
}
|
||||
|
||||
ze_device_handle_t getDevice(ze_driver_handle_t &driverHandle, uint32_t deviceIndex) {
|
||||
|
||||
uint32_t deviceCount = 0;
|
||||
|
@ -103,7 +124,7 @@ ze_command_queue_handle_t createCommandQueue(ze_context_handle_t &contextHandle,
|
|||
VALIDATECALL(zeDeviceGetCommandQueueGroupProperties(deviceHandle, &queueGroupsCount, nullptr));
|
||||
|
||||
if (queueGroupsCount == 0) {
|
||||
std::cout << "No queue groups found!\n";
|
||||
LOG(LogLevel::ERROR) << "No queue groups found!\n";
|
||||
std::terminate();
|
||||
}
|
||||
|
||||
|
@ -148,31 +169,31 @@ ze_command_list_handle_t createCommandList(ze_context_handle_t &contextHandle, z
|
|||
}
|
||||
|
||||
void printMetricGroupProperties(const zet_metric_group_properties_t &properties) {
|
||||
std::cout << "METRIC GROUP: "
|
||||
<< "name: " << properties.name << ", "
|
||||
<< "desc: " << properties.description << ", "
|
||||
<< "samplingType: " << properties.samplingType << ", "
|
||||
<< "domain: " << properties.domain << ", "
|
||||
<< "metricCount: " << properties.metricCount << std::endl;
|
||||
LOG(LogLevel::DEBUG) << "METRIC GROUP: "
|
||||
<< "name: " << properties.name << ", "
|
||||
<< "desc: " << properties.description << ", "
|
||||
<< "samplingType: " << properties.samplingType << ", "
|
||||
<< "domain: " << properties.domain << ", "
|
||||
<< "metricCount: " << properties.metricCount << std::endl;
|
||||
}
|
||||
|
||||
///////////////////////////
|
||||
/// printMetricProperties
|
||||
///////////////////////////
|
||||
void printMetricProperties(const zet_metric_properties_t &properties) {
|
||||
std::cout << "\tMETRIC: "
|
||||
<< "name: " << properties.name << ", "
|
||||
<< "desc: " << properties.description << ", "
|
||||
<< "component: " << properties.component << ", "
|
||||
<< "tier: " << properties.tierNumber << ", "
|
||||
<< "metricType: " << properties.metricType << ", "
|
||||
<< "resultType: " << properties.resultType << ", "
|
||||
<< "units: " << properties.resultUnits << std::endl;
|
||||
LOG(LogLevel::DEBUG) << "\tMETRIC: "
|
||||
<< "name: " << properties.name << ", "
|
||||
<< "desc: " << properties.description << ", "
|
||||
<< "component: " << properties.component << ", "
|
||||
<< "tier: " << properties.tierNumber << ", "
|
||||
<< "metricType: " << properties.metricType << ", "
|
||||
<< "resultType: " << properties.resultType << ", "
|
||||
<< "units: " << properties.resultUnits << std::endl;
|
||||
}
|
||||
|
||||
///////////////////////////
|
||||
/////////
|
||||
/// wait
|
||||
///////////////////////////
|
||||
/////////
|
||||
void sleep(uint32_t milliseconds) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
|
||||
}
|
||||
|
@ -214,6 +235,8 @@ zet_metric_group_handle_t findMetricGroup(const char *groupName,
|
|||
}
|
||||
}
|
||||
|
||||
LOG(LogLevel::ERROR) << "Warning : Metric Group " << groupName << " with sampling type " << samplingType << " could not be found !\n";
|
||||
|
||||
// Unable to find metric group.
|
||||
VALIDATECALL(ZE_RESULT_ERROR_UNKNOWN);
|
||||
return nullptr;
|
||||
|
@ -251,53 +274,26 @@ void obtainCalculatedMetrics(zet_metric_group_handle_t metricGroup, uint8_t *raw
|
|||
std::vector<uint32_t> metricCounts = {};
|
||||
std::vector<zet_typed_value_t> results = {};
|
||||
std::vector<zet_metric_handle_t> metrics = {};
|
||||
ze_result_t result = ZE_RESULT_SUCCESS;
|
||||
|
||||
// Obtain maximum space for calculated metrics.
|
||||
result = zetMetricGroupCalculateMetricValues(
|
||||
// Try to use calculate for multiple metric values.
|
||||
VALIDATECALL(zetMetricGroupCalculateMultipleMetricValuesExp(
|
||||
metricGroup,
|
||||
ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES,
|
||||
rawDataSize, rawData,
|
||||
&totalCalculatedMetricCount,
|
||||
nullptr);
|
||||
&setCount, &totalCalculatedMetricCount,
|
||||
nullptr, nullptr));
|
||||
|
||||
if (result == ZE_RESULT_ERROR_UNKNOWN) {
|
||||
// Allocate space for calculated reports.
|
||||
metricCounts.resize(setCount);
|
||||
results.resize(totalCalculatedMetricCount);
|
||||
|
||||
// Try to use calculate for multiple metric values.
|
||||
VALIDATECALL(zetMetricGroupCalculateMultipleMetricValuesExp(
|
||||
metricGroup,
|
||||
ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES,
|
||||
rawDataSize, rawData,
|
||||
&setCount, &totalCalculatedMetricCount,
|
||||
nullptr, nullptr));
|
||||
|
||||
// Allocate space for calculated reports.
|
||||
metricCounts.resize(setCount);
|
||||
results.resize(totalCalculatedMetricCount);
|
||||
|
||||
// Obtain calculated metrics and their count.
|
||||
VALIDATECALL(zetMetricGroupCalculateMultipleMetricValuesExp(
|
||||
metricGroup,
|
||||
ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES,
|
||||
rawDataSize, rawData,
|
||||
&setCount, &totalCalculatedMetricCount,
|
||||
metricCounts.data(), results.data()));
|
||||
|
||||
} else {
|
||||
// Allocate space for calculated reports.
|
||||
setCount = 1;
|
||||
metricCounts.resize(setCount);
|
||||
results.resize(totalCalculatedMetricCount);
|
||||
|
||||
// Obtain calculated metrics and their count.
|
||||
VALIDATECALL(zetMetricGroupCalculateMetricValues(
|
||||
metricGroup,
|
||||
ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES,
|
||||
rawDataSize, rawData,
|
||||
&totalCalculatedMetricCount, results.data()));
|
||||
|
||||
metricCounts[0] = totalCalculatedMetricCount;
|
||||
}
|
||||
// Obtain calculated metrics and their count.
|
||||
VALIDATECALL(zetMetricGroupCalculateMultipleMetricValuesExp(
|
||||
metricGroup,
|
||||
ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES,
|
||||
rawDataSize, rawData,
|
||||
&setCount, &totalCalculatedMetricCount,
|
||||
metricCounts.data(), results.data()));
|
||||
|
||||
// Obtain metric group properties to show each metric.
|
||||
VALIDATECALL(zetMetricGroupGetProperties(metricGroup, &properties));
|
||||
|
@ -310,7 +306,7 @@ void obtainCalculatedMetrics(zet_metric_group_handle_t metricGroup, uint8_t *raw
|
|||
|
||||
for (uint32_t i = 0; i < setCount; ++i) {
|
||||
|
||||
std::cout << "\r\nSet " << i;
|
||||
LOG(LogLevel::DEBUG) << "\r\nSet " << i;
|
||||
|
||||
const uint32_t metricCount = properties.metricCount;
|
||||
const uint32_t metricCountForSet = metricCounts[i];
|
||||
|
@ -329,36 +325,36 @@ void obtainCalculatedMetrics(zet_metric_group_handle_t metricGroup, uint8_t *raw
|
|||
VALIDATECALL((results[resultIndex].type == metricProperties.resultType) ? ZE_RESULT_SUCCESS : ZE_RESULT_ERROR_UNKNOWN)
|
||||
|
||||
if (metricIndex == 0) {
|
||||
std::cout << "\r\n";
|
||||
LOG(LogLevel::DEBUG) << "\r\n";
|
||||
}
|
||||
|
||||
std::cout << "\r\n";
|
||||
std::cout << std::setw(25) << metricProperties.name << ": ";
|
||||
LOG(LogLevel::DEBUG) << "\r\n";
|
||||
LOG(LogLevel::DEBUG) << std::setw(25) << metricProperties.name << ": ";
|
||||
|
||||
switch (results[resultIndex].type) {
|
||||
case zet_value_type_t::ZET_VALUE_TYPE_BOOL8:
|
||||
std::cout << std::setw(12);
|
||||
std::cout << (results[resultIndex].value.b8 ? "true" : "false");
|
||||
LOG(LogLevel::DEBUG) << std::setw(12);
|
||||
LOG(LogLevel::DEBUG) << (results[resultIndex].value.b8 ? "true" : "false");
|
||||
break;
|
||||
|
||||
case zet_value_type_t::ZET_VALUE_TYPE_FLOAT32:
|
||||
std::cout << std::setw(12);
|
||||
std::cout << results[resultIndex].value.fp32;
|
||||
LOG(LogLevel::DEBUG) << std::setw(12);
|
||||
LOG(LogLevel::DEBUG) << results[resultIndex].value.fp32;
|
||||
break;
|
||||
|
||||
case zet_value_type_t::ZET_VALUE_TYPE_FLOAT64:
|
||||
std::cout << std::setw(12);
|
||||
std::cout << results[resultIndex].value.fp64;
|
||||
LOG(LogLevel::DEBUG) << std::setw(12);
|
||||
LOG(LogLevel::DEBUG) << results[resultIndex].value.fp64;
|
||||
break;
|
||||
|
||||
case zet_value_type_t::ZET_VALUE_TYPE_UINT32:
|
||||
std::cout << std::setw(12);
|
||||
std::cout << results[resultIndex].value.ui32;
|
||||
LOG(LogLevel::DEBUG) << std::setw(12);
|
||||
LOG(LogLevel::DEBUG) << results[resultIndex].value.ui32;
|
||||
break;
|
||||
|
||||
case zet_value_type_t::ZET_VALUE_TYPE_UINT64:
|
||||
std::cout << std::setw(12);
|
||||
std::cout << results[resultIndex].value.ui64;
|
||||
LOG(LogLevel::DEBUG) << std::setw(12);
|
||||
LOG(LogLevel::DEBUG) << results[resultIndex].value.ui64;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -366,8 +362,92 @@ void obtainCalculatedMetrics(zet_metric_group_handle_t metricGroup, uint8_t *raw
|
|||
}
|
||||
}
|
||||
|
||||
std::cout << "\r\n";
|
||||
LOG(LogLevel::DEBUG) << "\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
////////////////
|
||||
// Test Settings
|
||||
////////////////
|
||||
void TestSettings::parseArguments(int argc, char *argv[]) {
|
||||
int opt;
|
||||
|
||||
struct option long_opts[] = {
|
||||
{"help", no_argument, nullptr, 'h'},
|
||||
{"test", required_argument, nullptr, 't'},
|
||||
{"device", required_argument, nullptr, 'd'},
|
||||
{"subdevice", required_argument, nullptr, 's'},
|
||||
{"verboseLevel", required_argument, nullptr, 'v'},
|
||||
{"metricGroupName", required_argument, nullptr, 'm'},
|
||||
{0, 0, 0, 0},
|
||||
};
|
||||
|
||||
auto printUsage = []() {
|
||||
std::cout << "\n set Environment variable ZET_ENABLE_METRICS=1"
|
||||
"\n"
|
||||
"\n zello_metrics [OPTIONS]"
|
||||
"\n"
|
||||
"\n OPTIONS:"
|
||||
"\n -t, --test <test name> run the specific test(\"all\" runs all tests)"
|
||||
"\n -d, --device <deviceId> device ID to run the test"
|
||||
"\n -s, --subdevice <subdeviceId> sub-device ID to run the test"
|
||||
"\n -v, --verboseLevel <verboseLevel> verbosity level(-2:error|-1:warning|(default)0:info|1:debug"
|
||||
"\n -m, --metricGroupName <name> metric group name"
|
||||
"\n -h, --help display help message"
|
||||
"\n";
|
||||
};
|
||||
|
||||
if (argc < 2) {
|
||||
printUsage();
|
||||
return;
|
||||
}
|
||||
|
||||
while ((opt = getopt_long(argc, argv, "ht:d:s:v:m:", long_opts, nullptr)) != -1) {
|
||||
switch (opt) {
|
||||
case 't':
|
||||
testName = optarg;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
deviceId = std::atoi(optarg);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
subDeviceId = std::atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verboseLevel = std::atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
metricGroupName = optarg;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
printUsage();
|
||||
break;
|
||||
|
||||
default:
|
||||
// Do not run tests in case of invalid option
|
||||
testName.clear();
|
||||
printUsage();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TestSettings *TestSettings::get() {
|
||||
if (!settings) {
|
||||
settings = new TestSettings;
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
TestSettings *TestSettings::settings = nullptr;
|
||||
|
||||
class DummyStreamBuf : public std::streambuf {};
|
||||
DummyStreamBuf emptyStreamBuf;
|
||||
std::ostream emptyCout(&emptyStreamBuf);
|
||||
|
||||
} // namespace ZelloMetricsUtility
|
||||
|
|
|
@ -7,9 +7,14 @@
|
|||
|
||||
#include "level_zero/tools/test/black_box_tests/zello_metrics/zello_metrics.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#pragma once
|
||||
|
||||
#define MAX_DEVICES_IN_MACHINE (64u)
|
||||
#define LOG(level) (((level) <= (ZelloMetricsUtility::TestSettings::get())->verboseLevel) \
|
||||
? (std::cout) \
|
||||
: (ZelloMetricsUtility::emptyCout))
|
||||
|
||||
namespace ZelloMetricsUtility {
|
||||
|
||||
|
@ -20,11 +25,40 @@ struct TestMachineConfiguration {
|
|||
uint32_t subDeviceCount;
|
||||
} devices[MAX_DEVICES_IN_MACHINE];
|
||||
uint32_t deviceCount = 0;
|
||||
uint32_t deviceId;
|
||||
};
|
||||
|
||||
class TestSettings {
|
||||
public:
|
||||
static TestSettings *get();
|
||||
void parseArguments(int argc, char *argv[]);
|
||||
|
||||
std::string testName = {};
|
||||
int32_t deviceId = -1;
|
||||
int32_t subDeviceId = -1;
|
||||
int32_t verboseLevel = 0;
|
||||
std::string metricGroupName = "TestOa";
|
||||
|
||||
private:
|
||||
TestSettings() = default;
|
||||
~TestSettings() = default;
|
||||
static TestSettings *settings;
|
||||
};
|
||||
|
||||
struct LogLevel {
|
||||
enum {
|
||||
ERROR = -2,
|
||||
WARNING = -1,
|
||||
INFO = 0,
|
||||
DEBUG = 1
|
||||
};
|
||||
};
|
||||
extern std::ostream emptyCout;
|
||||
|
||||
void createL0();
|
||||
ze_driver_handle_t getDriver();
|
||||
ze_context_handle_t createContext(ze_driver_handle_t &driverHandle);
|
||||
bool isDeviceAvailable(uint32_t deviceIndex, int32_t subDeviceIndex);
|
||||
ze_device_handle_t getDevice(ze_driver_handle_t &driverHandle, uint32_t deviceIndex);
|
||||
ze_device_handle_t getSubDevice(ze_device_handle_t &deviceHandle, uint32_t subDeviceIndex);
|
||||
ze_command_queue_handle_t createCommandQueue(ze_context_handle_t &contextHandle,
|
||||
|
@ -40,4 +74,5 @@ zet_metric_group_handle_t findMetricGroup(const char *groupName,
|
|||
ze_event_pool_handle_t createHostVisibleEventPool(ze_context_handle_t contextHandle, ze_device_handle_t deviceHandle);
|
||||
ze_event_handle_t createHostVisibleEvent(ze_event_pool_handle_t hostVisibleEventPool);
|
||||
void obtainCalculatedMetrics(zet_metric_group_handle_t metricGroup, uint8_t *rawData, uint32_t rawDataSize);
|
||||
|
||||
} // namespace ZelloMetricsUtility
|
||||
|
|
|
@ -6,11 +6,14 @@
|
|||
*/
|
||||
|
||||
#include "level_zero/tools/test/black_box_tests/zello_metrics/zello_metrics.h"
|
||||
#include "level_zero/tools/test/black_box_tests/zello_metrics/zello_metrics_util.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
|
||||
namespace zmu = ZelloMetricsUtility;
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
/////AppendMemoryCopyFromHeapToDeviceAndBackToHost
|
||||
///////////////////////////////////////////////////
|
||||
|
@ -89,7 +92,7 @@ void CopyBufferToBuffer::initialize() {
|
|||
auto length = file.tellg();
|
||||
file.seekg(0, file.beg);
|
||||
|
||||
std::cout << "Using copy_buffer_to_buffer.spv" << std::endl;
|
||||
LOG(zmu::LogLevel::DEBUG) << "Using copy_buffer_to_buffer.spv" << std::endl;
|
||||
|
||||
std::unique_ptr<char[]> spirvInput(new char[length]);
|
||||
file.read(spirvInput.get(), length);
|
||||
|
@ -107,8 +110,7 @@ void CopyBufferToBuffer::initialize() {
|
|||
|
||||
char *strLog = (char *)malloc(szLog);
|
||||
zeModuleBuildLogGetString(buildlog, &szLog, strLog);
|
||||
std::cout << "Build log:" << strLog << std::endl;
|
||||
|
||||
LOG(zmu::LogLevel::DEBUG) << "Build log:" << strLog << std::endl;
|
||||
free(strLog);
|
||||
}
|
||||
VALIDATECALL(zeModuleBuildLogDestroy(buildlog));
|
||||
|
@ -145,9 +147,7 @@ bool CopyBufferToBuffer::appendCommands() {
|
|||
VALIDATECALL(zeCommandListAppendLaunchKernel(executionCtxt->getCommandList(0), kernel, &dispatchTraits,
|
||||
nullptr, 0, nullptr));
|
||||
} else {
|
||||
|
||||
std::cout << "Using zeCommandListAppendMemoryCopy" << std::endl;
|
||||
|
||||
LOG(zmu::LogLevel::DEBUG) << "Using zeCommandListAppendMemoryCopy" << std::endl;
|
||||
VALIDATECALL(zeCommandListAppendMemoryCopy(executionCtxt->getCommandList(0), destinationBuffer,
|
||||
sourceBuffer, allocationSize, nullptr, 0, nullptr));
|
||||
}
|
||||
|
@ -166,16 +166,16 @@ bool CopyBufferToBuffer::validate() {
|
|||
uint8_t *dstCharBuffer = static_cast<uint8_t *>(destinationBuffer);
|
||||
for (size_t i = 0; i < allocationSize; i++) {
|
||||
if (srcCharBuffer[i] != dstCharBuffer[i]) {
|
||||
std::cout << "srcBuffer[" << i << "] = " << static_cast<unsigned int>(srcCharBuffer[i]) << " not equal to "
|
||||
<< "dstBuffer[" << i << "] = " << static_cast<unsigned int>(dstCharBuffer[i]) << "\n";
|
||||
LOG(zmu::LogLevel::ERROR) << "srcBuffer[" << i << "] = " << static_cast<unsigned int>(srcCharBuffer[i]) << " not equal to "
|
||||
<< "dstBuffer[" << i << "] = " << static_cast<unsigned int>(dstCharBuffer[i]) << "\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "\nResults validation "
|
||||
<< (outputValidationSuccessful ? "PASSED" : "FAILED")
|
||||
<< std::endl;
|
||||
LOG(zmu::LogLevel::DEBUG) << "\nResults validation "
|
||||
<< (outputValidationSuccessful ? "PASSED" : "FAILED")
|
||||
<< std::endl;
|
||||
|
||||
return outputValidationSuccessful;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue