diff --git a/libkineto/src/DeviceProperties.cpp b/libkineto/src/DeviceProperties.cpp index 2d7278b09..2f30a2587 100644 --- a/libkineto/src/DeviceProperties.cpp +++ b/libkineto/src/DeviceProperties.cpp @@ -19,6 +19,10 @@ #include #endif +#if defined(HAS_XPUPTI) +#include "plugin/xpupti/XpuptiActivityProfiler.h" +#endif + #include "Logger.h" namespace KINETO_NAMESPACE { @@ -126,6 +130,11 @@ int smCount(uint32_t deviceId) { const std::vector& props = deviceProps(); return deviceId >= props.size() ? 0 : props[deviceId].multiProcessorCount; } +#elif defined(HAS_XPUPTI) +const std::string& devicePropertiesJson() { + static std::string devicePropsJson = getXpuDeviceProperties(); + return devicePropsJson; +} #else const std::string& devicePropertiesJson() { static std::string devicePropsJson; diff --git a/libkineto/src/plugin/xpupti/XpuptiActivityProfiler.cpp b/libkineto/src/plugin/xpupti/XpuptiActivityProfiler.cpp index 3c3c5c488..4f10cc5f8 100644 --- a/libkineto/src/plugin/xpupti/XpuptiActivityProfiler.cpp +++ b/libkineto/src/plugin/xpupti/XpuptiActivityProfiler.cpp @@ -7,6 +7,9 @@ */ #include "XpuptiActivityProfiler.h" +#include +#include +#include #include "XpuptiActivityApi.h" #include "time_since_epoch.h" @@ -80,6 +83,47 @@ void XpuptiActivityProfilerSession::toggleCollectionDynamic(const bool enable) { } } +std::string getXpuDeviceProperties() { + std::vector jsonProps; + // Enumerated GPU devices from the specific platform + for (const auto& platform : sycl::platform::get_platforms()) { + if (platform.get_backend() != sycl::backend::ext_oneapi_level_zero) { + continue; + } + const auto& device_list = platform.get_devices(); + for (size_t i = 0; i < device_list.size(); i++) { + const auto& device = device_list[i]; + jsonProps.push_back( + fmt::format( + R"JSON( + {{ + "id": {}, + "name": "{}", + "totalGlobalMem": {}, + "maxComputeUnits": {}, + "maxWorkGroupSize": {}, + "maxClockFrequency": {}, + "maxMemAllocSize": {}, + "localMemSize": {}, + "vendor": "{}", + "driverVersion": "{}" + }})JSON", + i, + device.get_info(), + device.get_info(), + device.get_info(), + device.get_info(), + device.get_info(), + device.get_info(), + device.get_info(), + device.get_info(), + device.get_info())); + } + } + + return fmt::format("{}", fmt::join(jsonProps, ",")); +} + void XpuptiActivityProfilerSession::processTrace(ActivityLogger& logger) { traceBuffer_.span = libkineto::TraceSpan(profilerStartTs_, profilerEndTs_, name_); diff --git a/libkineto/src/plugin/xpupti/XpuptiActivityProfiler.h b/libkineto/src/plugin/xpupti/XpuptiActivityProfiler.h index a641ac7bf..fa9eb1fee 100644 --- a/libkineto/src/plugin/xpupti/XpuptiActivityProfiler.h +++ b/libkineto/src/plugin/xpupti/XpuptiActivityProfiler.h @@ -23,6 +23,8 @@ namespace KINETO_NAMESPACE { +std::string getXpuDeviceProperties(); + using DeviceUUIDsT = std::array; class XpuptiActivityProfilerSession