From 8060a4efcb77a3d6aa995a390e3a7afac05d035c Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Thu, 15 Jul 2021 21:44:26 +0300 Subject: [PATCH 1/9] [SYCL][XPTI] Pass plugin information to subscribers --- sycl/include/CL/sycl/detail/pi.hpp | 6 ++-- .../CL/sycl/detail/xpti_plugin_info.hpp | 25 +++++++++++++++++ sycl/source/detail/pi.cpp | 25 ++++++++++++----- sycl/source/detail/plugin.hpp | 9 +++--- sycl/tools/pi-trace/pi_trace.cpp | 8 ++++-- .../xpti_helpers/pi_arguments_handler.hpp | 28 +++++++++++++------ 6 files changed, 78 insertions(+), 23 deletions(-) create mode 100644 sycl/include/CL/sycl/detail/xpti_plugin_info.hpp diff --git a/sycl/include/CL/sycl/detail/pi.hpp b/sycl/include/CL/sycl/detail/pi.hpp index a0f553309b5cf..27ef2bc36dcce 100644 --- a/sycl/include/CL/sycl/detail/pi.hpp +++ b/sycl/include/CL/sycl/detail/pi.hpp @@ -190,7 +190,8 @@ void emitFunctionEndTrace(uint64_t CorrelationID, const char *FName); /// \param FName The name of the PI API call. /// \param ArgsData is a pointer to packed function call arguments. uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID, const char *FName, - unsigned char *ArgsData); + unsigned char *ArgsData, + backend Backend, pi_plugin Plugin); /// Notifies XPTI subscribers about PI function call result. /// @@ -202,7 +203,8 @@ uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID, const char *FName, /// \param Result is function call result value. void emitFunctionWithArgsEndTrace(uint64_t CorrelationID, uint32_t FuncID, const char *FName, unsigned char *ArgsData, - pi_result Result); + pi_result Result, backend Backend, + pi_plugin Plugin); // A wrapper for passing around byte array properties class ByteArray { diff --git a/sycl/include/CL/sycl/detail/xpti_plugin_info.hpp b/sycl/include/CL/sycl/detail/xpti_plugin_info.hpp new file mode 100644 index 0000000000000..f5222b9e09349 --- /dev/null +++ b/sycl/include/CL/sycl/detail/xpti_plugin_info.hpp @@ -0,0 +1,25 @@ +//==----------- xpti_plugin_info.hpp - Plugin info wrapper for XPTI --------==// +// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#pragma once + +#include +#include + +__SYCL_INLINE_NAMESPACE(cl) { +namespace sycl { +namespace detail { +struct XPTIPluginInfo { + uint8_t backend; // ID of the backend, same as in sycl::backend. + pi_plugin plugin; // Plugin, that was used to perform PI call. + void *next; // [Provisional] Pointer to the extended call function info. +}; +} // namespace detail +} // namespace sycl +} // __SYCL_INLINE_NAMESPACE(cl) diff --git a/sycl/source/detail/pi.cpp b/sycl/source/detail/pi.cpp index 29172be0891b8..9ce394722803c 100644 --- a/sycl/source/detail/pi.cpp +++ b/sycl/source/detail/pi.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include #include @@ -36,6 +38,10 @@ #include "xpti_trace_framework.h" #endif +#define STR(x) #x +#define SYCL_VERSION_STR \ + "sycl " STR(__LIBSYCL_MAJOR_VERSION) "." STR(__LIBSYCL_MINOR_VERSION) + __SYCL_INLINE_NAMESPACE(cl) { namespace sycl { namespace detail { @@ -50,9 +56,9 @@ xpti_td *GPICallEvent = nullptr; xpti_td *GPIArgCallEvent = nullptr; /// Constants being used as placeholder until one is able to reliably get the /// version of the SYCL runtime -constexpr uint32_t GMajVer = 1; -constexpr uint32_t GMinVer = 0; -constexpr const char *GVerStr = "sycl 1.0"; +constexpr uint32_t GMajVer = __LIBSYCL_MAJOR_VERSION; +constexpr uint32_t GMinVer = __LIBSYCL_MINOR_VERSION; +constexpr const char *GVerStr = SYCL_VERSION_STR; #endif // XPTI_ENABLE_INSTRUMENTATION template @@ -138,15 +144,18 @@ void emitFunctionEndTrace(uint64_t CorrelationID, const char *FName) { } uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID, const char *FuncName, - unsigned char *ArgsData) { + unsigned char *ArgsData, + backend Backend, pi_plugin Plugin) { uint64_t CorrelationID = 0; #ifdef XPTI_ENABLE_INSTRUMENTATION if (xptiTraceEnabled()) { uint8_t StreamID = xptiRegisterStream(SYCL_PIDEBUGCALL_STREAM_NAME); CorrelationID = xptiGetUniqueId(); + XPTIPluginInfo Info{static_cast(Backend), Plugin, nullptr}; + xpti::function_with_args_t Payload{FuncID, FuncName, ArgsData, nullptr, - nullptr}; + &Info}; xptiNotifySubscribers( StreamID, (uint16_t)xpti::trace_point_type_t::function_with_args_begin, @@ -158,13 +167,15 @@ uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID, const char *FuncName, void emitFunctionWithArgsEndTrace(uint64_t CorrelationID, uint32_t FuncID, const char *FuncName, unsigned char *ArgsData, - pi_result Result) { + pi_result Result, backend Backend, + pi_plugin Plugin) { #ifdef XPTI_ENABLE_INSTRUMENTATION if (xptiTraceEnabled()) { uint8_t StreamID = xptiRegisterStream(SYCL_PIDEBUGCALL_STREAM_NAME); + XPTIPluginInfo Info{static_cast(Backend), Plugin, nullptr}; xpti::function_with_args_t Payload{FuncID, FuncName, ArgsData, &Result, - nullptr}; + &Info}; xptiNotifySubscribers( StreamID, (uint16_t)xpti::trace_point_type_t::function_with_args_end, diff --git a/sycl/source/detail/plugin.hpp b/sycl/source/detail/plugin.hpp index 0e490c992e908..de69d6aaf0ee1 100644 --- a/sycl/source/detail/plugin.hpp +++ b/sycl/source/detail/plugin.hpp @@ -144,7 +144,8 @@ class plugin { auto ArgsData = packCallArguments(std::forward(Args)...); uint64_t CorrelationIDWithArgs = pi::emitFunctionWithArgsBeginTrace( - static_cast(PiApiOffset), PIFnName, ArgsData.data()); + static_cast(PiApiOffset), PIFnName, ArgsData.data(), MBackend, + MPlugin); #endif RT::PiResult R; if (pi::trace(pi::TraceLevel::PI_TRACE_CALLS)) { @@ -163,9 +164,9 @@ class plugin { #ifdef XPTI_ENABLE_INSTRUMENTATION // Close the function begin with a call to function end pi::emitFunctionEndTrace(CorrelationID, PIFnName); - pi::emitFunctionWithArgsEndTrace(CorrelationIDWithArgs, - static_cast(PiApiOffset), - PIFnName, ArgsData.data(), R); + pi::emitFunctionWithArgsEndTrace( + CorrelationIDWithArgs, static_cast(PiApiOffset), PIFnName, + ArgsData.data(), R, MBackend, MPlugin); #endif return R; } diff --git a/sycl/tools/pi-trace/pi_trace.cpp b/sycl/tools/pi-trace/pi_trace.cpp index 3fee6fd9f13e3..1a4cf3d94f32c 100644 --- a/sycl/tools/pi-trace/pi_trace.cpp +++ b/sycl/tools/pi-trace/pi_trace.cpp @@ -51,7 +51,8 @@ XPTI_CALLBACK_API void xptiTraceInit(unsigned int major_version, tpCallback); #define _PI_API(api) \ - ArgHandler.set##_##api([](auto &&... Args) { \ + ArgHandler.set##_##api([](sycl::detail::XPTIPluginInfo, \ + std::optional, auto &&...Args) { \ std::cout << "---> " << #api << "(" \ << "\n"; \ sycl::detail::pi::printArgs(Args...); \ @@ -77,8 +78,11 @@ XPTI_CALLBACK_API void tpCallback(uint16_t TraceType, const auto *Data = static_cast(UserData); + const auto *Plugin = + static_cast(Data->user_data); - ArgHandler.handle(Data->function_id, Data->args_data); + ArgHandler.handle(Data->function_id, *Plugin, std::nullopt, + Data->args_data); std::cout << *static_cast(Data->ret_data) << "\n"; } } diff --git a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp index 4cad50ba90c66..6240117547223 100644 --- a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp +++ b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp @@ -10,8 +10,10 @@ #include #include +#include #include +#include #include __SYCL_INLINE_NAMESPACE(cl) { @@ -41,7 +43,8 @@ inline TupleT unpack(char *Data, template struct to_function {}; template struct to_function> { - using type = std::function; + using type = std::function, Args...)>; }; /// PiArgumentsHandler is a helper class to process incoming XPTI function call @@ -59,10 +62,11 @@ template struct to_function> { /// See sycl/tools/pi-trace/ for an example. class PiArgumentsHandler { public: - void handle(uint32_t ID, void *ArgsData) { + void handle(uint32_t ID, detail::XPTIPluginInfo Plugin, + std::optional Result, void *ArgsData) { #define _PI_API(api) \ if (ID == static_cast(detail::PiApiKind::api)) { \ - MHandler##_##api(ArgsData); \ + MHandler##_##api(Plugin, Result, ArgsData); \ return; \ } #include @@ -71,15 +75,20 @@ class PiArgumentsHandler { #define _PI_API(api) \ void set##_##api( \ - const typename to_function::args_type>::type &Handler) { \ - MHandler##_##api = [Handler](void *Data) { \ + const typename to_function< \ + typename detail::function_traits::args_type>::type \ + &Handler) { \ + MHandler##_##api = [Handler](detail::XPTIPluginInfo Plugin, \ + std::optional Res, void *Data) { \ using TupleT = \ typename detail::function_traits::args_type; \ TupleT Tuple = unpack( \ (char *)Data, \ std::make_index_sequence::value>{}); \ - std::apply(Handler, Tuple); \ + const auto Wrapper = [Plugin, Res, Handler](auto &...Args) { \ + Handler(Plugin, Res, Args...); \ + }; \ + std::apply(Wrapper, Tuple); \ }; \ } #include @@ -87,7 +96,10 @@ class PiArgumentsHandler { private: #define _PI_API(api) \ - std::function MHandler##_##api = [](void *) {}; + std::function, \ + void *)> \ + MHandler##_##api = \ + [](detail::XPTIPluginInfo, std::optional, void *) {}; #include #undef _PI_API }; From a2d7ea5b94c969c706e007612d551f470f5d3efb Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Fri, 16 Jul 2021 21:42:47 +0300 Subject: [PATCH 2/9] clang-format --- sycl/tools/pi-trace/pi_trace.cpp | 2 +- sycl/tools/xpti_helpers/pi_arguments_handler.hpp | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/sycl/tools/pi-trace/pi_trace.cpp b/sycl/tools/pi-trace/pi_trace.cpp index 1a4cf3d94f32c..f5a41523be565 100644 --- a/sycl/tools/pi-trace/pi_trace.cpp +++ b/sycl/tools/pi-trace/pi_trace.cpp @@ -52,7 +52,7 @@ XPTI_CALLBACK_API void xptiTraceInit(unsigned int major_version, #define _PI_API(api) \ ArgHandler.set##_##api([](sycl::detail::XPTIPluginInfo, \ - std::optional, auto &&...Args) { \ + std::optional, auto &&... Args) { \ std::cout << "---> " << #api << "(" \ << "\n"; \ sycl::detail::pi::printArgs(Args...); \ diff --git a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp index 6240117547223..a63873702cf94 100644 --- a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp +++ b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp @@ -75,9 +75,8 @@ class PiArgumentsHandler { #define _PI_API(api) \ void set##_##api( \ - const typename to_function< \ - typename detail::function_traits::args_type>::type \ - &Handler) { \ + const typename to_function::args_type>::type &Handler) { \ MHandler##_##api = [Handler](detail::XPTIPluginInfo Plugin, \ std::optional Res, void *Data) { \ using TupleT = \ @@ -85,7 +84,7 @@ class PiArgumentsHandler { TupleT Tuple = unpack( \ (char *)Data, \ std::make_index_sequence::value>{}); \ - const auto Wrapper = [Plugin, Res, Handler](auto &...Args) { \ + const auto Wrapper = [Plugin, Res, Handler](auto &... Args) { \ Handler(Plugin, Res, Args...); \ }; \ std::apply(Wrapper, Tuple); \ From b12b1d5bdda6cdaee6550415a9e8e58ecc13cebf Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Thu, 22 Jul 2021 21:51:31 +0300 Subject: [PATCH 3/9] update tests --- sycl/unittests/pi/pi_arguments_handler.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/sycl/unittests/pi/pi_arguments_handler.cpp b/sycl/unittests/pi/pi_arguments_handler.cpp index ce9d817b8a628..92369a1301693 100644 --- a/sycl/unittests/pi/pi_arguments_handler.cpp +++ b/sycl/unittests/pi/pi_arguments_handler.cpp @@ -20,12 +20,13 @@ TEST(PiArgumentsHandlerTest, CanUnpackArguments) { const pi_uint32 NumPlatforms = 42; pi_platform *Platforms = new pi_platform[NumPlatforms]; - Handler.set_piPlatformsGet( - [&](pi_uint32 NP, pi_platform *Plts, pi_uint32 *Ret) { - EXPECT_EQ(NP, NumPlatforms); - EXPECT_EQ(Platforms, Plts); - EXPECT_EQ(Ret, nullptr); - }); + Handler.set_piPlatformsGet([&](sycl::detail::XPTIPluginInfo, + std::optional, pi_uint32 NP, + pi_platform *Plts, pi_uint32 *Ret) { + EXPECT_EQ(NP, NumPlatforms); + EXPECT_EQ(Platforms, Plts); + EXPECT_EQ(Ret, nullptr); + }); constexpr size_t Size = sizeof(pi_uint32) + 2 * sizeof(void *); std::array Data{0}; @@ -33,8 +34,9 @@ TEST(PiArgumentsHandlerTest, CanUnpackArguments) { *reinterpret_cast(Data.data() + sizeof(pi_uint32)) = Platforms; + sycl::detail::XPTIPluginInfo Plugin; uint32_t ID = static_cast(sycl::detail::PiApiKind::piPlatformsGet); - Handler.handle(ID, Data.data()); + Handler.handle(ID, Plugin, std::nullopt, Data.data()); delete[] Platforms; } From 4c93c015bc0f629ddf04a1c0d8189dcf8d3727df Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Fri, 23 Jul 2021 19:18:45 +0300 Subject: [PATCH 4/9] thank you msvc --- sycl/unittests/pi/pi_arguments_handler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sycl/unittests/pi/pi_arguments_handler.cpp b/sycl/unittests/pi/pi_arguments_handler.cpp index 92369a1301693..045c80a573f51 100644 --- a/sycl/unittests/pi/pi_arguments_handler.cpp +++ b/sycl/unittests/pi/pi_arguments_handler.cpp @@ -34,7 +34,7 @@ TEST(PiArgumentsHandlerTest, CanUnpackArguments) { *reinterpret_cast(Data.data() + sizeof(pi_uint32)) = Platforms; - sycl::detail::XPTIPluginInfo Plugin; + sycl::detail::XPTIPluginInfo Plugin{}; uint32_t ID = static_cast(sycl::detail::PiApiKind::piPlatformsGet); Handler.handle(ID, Plugin, std::nullopt, Data.data()); From a0a190a82e0662c79c4dee59370dcaac35367d8c Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Tue, 27 Jul 2021 22:00:03 +0300 Subject: [PATCH 5/9] address feedback --- sycl/include/CL/sycl/detail/pi.hpp | 7 +++--- .../CL/sycl/detail/xpti_plugin_info.hpp | 25 ------------------- sycl/source/detail/pi.cpp | 13 +++------- sycl/source/detail/plugin.hpp | 9 +++---- sycl/tools/pi-trace/pi_trace.cpp | 3 +-- .../xpti_helpers/pi_arguments_handler.hpp | 15 ++++++----- sycl/unittests/pi/pi_arguments_handler.cpp | 2 +- 7 files changed, 21 insertions(+), 53 deletions(-) delete mode 100644 sycl/include/CL/sycl/detail/xpti_plugin_info.hpp diff --git a/sycl/include/CL/sycl/detail/pi.hpp b/sycl/include/CL/sycl/detail/pi.hpp index 27ef2bc36dcce..3651c67cf0e56 100644 --- a/sycl/include/CL/sycl/detail/pi.hpp +++ b/sycl/include/CL/sycl/detail/pi.hpp @@ -189,9 +189,10 @@ void emitFunctionEndTrace(uint64_t CorrelationID, const char *FName); /// \param FuncID is the API hash ID from PiApiID type trait. /// \param FName The name of the PI API call. /// \param ArgsData is a pointer to packed function call arguments. +/// \param Plugin is the plugin, which is used to make call. uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID, const char *FName, unsigned char *ArgsData, - backend Backend, pi_plugin Plugin); + pi_plugin Plugin); /// Notifies XPTI subscribers about PI function call result. /// @@ -201,10 +202,10 @@ uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID, const char *FName, /// \param FName The name of the PI API call. /// \param ArgsData is a pointer to packed function call arguments. /// \param Result is function call result value. +/// \param Plugin is the plugin, which is used to make call. void emitFunctionWithArgsEndTrace(uint64_t CorrelationID, uint32_t FuncID, const char *FName, unsigned char *ArgsData, - pi_result Result, backend Backend, - pi_plugin Plugin); + pi_result Result, pi_plugin Plugin); // A wrapper for passing around byte array properties class ByteArray { diff --git a/sycl/include/CL/sycl/detail/xpti_plugin_info.hpp b/sycl/include/CL/sycl/detail/xpti_plugin_info.hpp deleted file mode 100644 index f5222b9e09349..0000000000000 --- a/sycl/include/CL/sycl/detail/xpti_plugin_info.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//==----------- xpti_plugin_info.hpp - Plugin info wrapper for XPTI --------==// -// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#pragma once - -#include -#include - -__SYCL_INLINE_NAMESPACE(cl) { -namespace sycl { -namespace detail { -struct XPTIPluginInfo { - uint8_t backend; // ID of the backend, same as in sycl::backend. - pi_plugin plugin; // Plugin, that was used to perform PI call. - void *next; // [Provisional] Pointer to the extended call function info. -}; -} // namespace detail -} // namespace sycl -} // __SYCL_INLINE_NAMESPACE(cl) diff --git a/sycl/source/detail/pi.cpp b/sycl/source/detail/pi.cpp index 9ce394722803c..7db4a3f073704 100644 --- a/sycl/source/detail/pi.cpp +++ b/sycl/source/detail/pi.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -145,17 +144,15 @@ void emitFunctionEndTrace(uint64_t CorrelationID, const char *FName) { uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID, const char *FuncName, unsigned char *ArgsData, - backend Backend, pi_plugin Plugin) { + pi_plugin Plugin) { uint64_t CorrelationID = 0; #ifdef XPTI_ENABLE_INSTRUMENTATION if (xptiTraceEnabled()) { uint8_t StreamID = xptiRegisterStream(SYCL_PIDEBUGCALL_STREAM_NAME); CorrelationID = xptiGetUniqueId(); - XPTIPluginInfo Info{static_cast(Backend), Plugin, nullptr}; - xpti::function_with_args_t Payload{FuncID, FuncName, ArgsData, nullptr, - &Info}; + &Plugin}; xptiNotifySubscribers( StreamID, (uint16_t)xpti::trace_point_type_t::function_with_args_begin, @@ -167,15 +164,13 @@ uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID, const char *FuncName, void emitFunctionWithArgsEndTrace(uint64_t CorrelationID, uint32_t FuncID, const char *FuncName, unsigned char *ArgsData, - pi_result Result, backend Backend, - pi_plugin Plugin) { + pi_result Result, pi_plugin Plugin) { #ifdef XPTI_ENABLE_INSTRUMENTATION if (xptiTraceEnabled()) { uint8_t StreamID = xptiRegisterStream(SYCL_PIDEBUGCALL_STREAM_NAME); - XPTIPluginInfo Info{static_cast(Backend), Plugin, nullptr}; xpti::function_with_args_t Payload{FuncID, FuncName, ArgsData, &Result, - &Info}; + &Plugin}; xptiNotifySubscribers( StreamID, (uint16_t)xpti::trace_point_type_t::function_with_args_end, diff --git a/sycl/source/detail/plugin.hpp b/sycl/source/detail/plugin.hpp index de69d6aaf0ee1..bfd614893f221 100644 --- a/sycl/source/detail/plugin.hpp +++ b/sycl/source/detail/plugin.hpp @@ -144,8 +144,7 @@ class plugin { auto ArgsData = packCallArguments(std::forward(Args)...); uint64_t CorrelationIDWithArgs = pi::emitFunctionWithArgsBeginTrace( - static_cast(PiApiOffset), PIFnName, ArgsData.data(), MBackend, - MPlugin); + static_cast(PiApiOffset), PIFnName, ArgsData.data(), MPlugin); #endif RT::PiResult R; if (pi::trace(pi::TraceLevel::PI_TRACE_CALLS)) { @@ -164,9 +163,9 @@ class plugin { #ifdef XPTI_ENABLE_INSTRUMENTATION // Close the function begin with a call to function end pi::emitFunctionEndTrace(CorrelationID, PIFnName); - pi::emitFunctionWithArgsEndTrace( - CorrelationIDWithArgs, static_cast(PiApiOffset), PIFnName, - ArgsData.data(), R, MBackend, MPlugin); + pi::emitFunctionWithArgsEndTrace(CorrelationIDWithArgs, + static_cast(PiApiOffset), + PIFnName, ArgsData.data(), R, MPlugin); #endif return R; } diff --git a/sycl/tools/pi-trace/pi_trace.cpp b/sycl/tools/pi-trace/pi_trace.cpp index f0f25130cd865..bfff791c28e5c 100644 --- a/sycl/tools/pi-trace/pi_trace.cpp +++ b/sycl/tools/pi-trace/pi_trace.cpp @@ -78,8 +78,7 @@ XPTI_CALLBACK_API void tpCallback(uint16_t TraceType, const auto *Data = static_cast(UserData); - const auto *Plugin = - static_cast(Data->user_data); + const auto *Plugin = static_cast(Data->user_data); ArgHandler.handle(Data->function_id, *Plugin, std::nullopt, Data->args_data); diff --git a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp index a63873702cf94..6bc9a1cfc7cee 100644 --- a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp +++ b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp @@ -10,7 +10,6 @@ #include #include -#include #include #include @@ -62,8 +61,8 @@ template struct to_function> { /// See sycl/tools/pi-trace/ for an example. class PiArgumentsHandler { public: - void handle(uint32_t ID, detail::XPTIPluginInfo Plugin, - std::optional Result, void *ArgsData) { + void handle(uint32_t ID, pi_plugin &Plugin, std::optional Result, + void *ArgsData) { #define _PI_API(api) \ if (ID == static_cast(detail::PiApiKind::api)) { \ MHandler##_##api(Plugin, Result, ArgsData); \ @@ -75,9 +74,10 @@ class PiArgumentsHandler { #define _PI_API(api) \ void set##_##api( \ - const typename to_function::args_type>::type &Handler) { \ - MHandler##_##api = [Handler](detail::XPTIPluginInfo Plugin, \ + const typename to_function< \ + typename detail::function_traits::args_type>::type \ + &Handler) { \ + MHandler##_##api = [Handler](pi_plugin Plugin, \ std::optional Res, void *Data) { \ using TupleT = \ typename detail::function_traits::args_type; \ @@ -95,8 +95,7 @@ class PiArgumentsHandler { private: #define _PI_API(api) \ - std::function, \ - void *)> \ + std::function, void *)> \ MHandler##_##api = \ [](detail::XPTIPluginInfo, std::optional, void *) {}; #include diff --git a/sycl/unittests/pi/pi_arguments_handler.cpp b/sycl/unittests/pi/pi_arguments_handler.cpp index 045c80a573f51..fde4ae89534ba 100644 --- a/sycl/unittests/pi/pi_arguments_handler.cpp +++ b/sycl/unittests/pi/pi_arguments_handler.cpp @@ -34,7 +34,7 @@ TEST(PiArgumentsHandlerTest, CanUnpackArguments) { *reinterpret_cast(Data.data() + sizeof(pi_uint32)) = Platforms; - sycl::detail::XPTIPluginInfo Plugin{}; + pi_plugin Plugin{}; uint32_t ID = static_cast(sycl::detail::PiApiKind::piPlatformsGet); Handler.handle(ID, Plugin, std::nullopt, Data.data()); From 88ce96cfb4adb933f28125ee10a7f8318726fae3 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Tue, 27 Jul 2021 22:15:56 +0300 Subject: [PATCH 6/9] fix some errors --- sycl/tools/xpti_helpers/pi_arguments_handler.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp index 6bc9a1cfc7cee..dc55c1a02e05a 100644 --- a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp +++ b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp @@ -77,7 +77,7 @@ class PiArgumentsHandler { const typename to_function< \ typename detail::function_traits::args_type>::type \ &Handler) { \ - MHandler##_##api = [Handler](pi_plugin Plugin, \ + MHandler##_##api = [Handler](pi_plugin &Plugin, \ std::optional Res, void *Data) { \ using TupleT = \ typename detail::function_traits::args_type; \ @@ -97,7 +97,7 @@ class PiArgumentsHandler { #define _PI_API(api) \ std::function, void *)> \ MHandler##_##api = \ - [](detail::XPTIPluginInfo, std::optional, void *) {}; + [](pi_plugin&, std::optional, void *) {}; #include #undef _PI_API }; From 34fb4f1f847b0c577388c54bff4af5e316e137fe Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Tue, 27 Jul 2021 22:28:18 +0300 Subject: [PATCH 7/9] more errors --- .../tools/xpti_helpers/pi_arguments_handler.hpp | 17 +++++++++-------- sycl/unittests/pi/pi_arguments_handler.cpp | 6 +++--- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp index dc55c1a02e05a..aecebce04c325 100644 --- a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp +++ b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp @@ -1,4 +1,5 @@ //==---------- pi_arguments_handler.hpp - PI call arguments handler --------==// +// i // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -42,8 +43,8 @@ inline TupleT unpack(char *Data, template struct to_function {}; template struct to_function> { - using type = std::function, Args...)>; + using type = + std::function, Args...)>; }; /// PiArgumentsHandler is a helper class to process incoming XPTI function call @@ -61,8 +62,8 @@ template struct to_function> { /// See sycl/tools/pi-trace/ for an example. class PiArgumentsHandler { public: - void handle(uint32_t ID, pi_plugin &Plugin, std::optional Result, - void *ArgsData) { + void handle(uint32_t ID, const pi_plugin &Plugin, + std::optional Result, void *ArgsData) { #define _PI_API(api) \ if (ID == static_cast(detail::PiApiKind::api)) { \ MHandler##_##api(Plugin, Result, ArgsData); \ @@ -77,14 +78,14 @@ class PiArgumentsHandler { const typename to_function< \ typename detail::function_traits::args_type>::type \ &Handler) { \ - MHandler##_##api = [Handler](pi_plugin &Plugin, \ + MHandler##_##api = [Handler](const pi_plugin &Plugin, \ std::optional Res, void *Data) { \ using TupleT = \ typename detail::function_traits::args_type; \ TupleT Tuple = unpack( \ (char *)Data, \ std::make_index_sequence::value>{}); \ - const auto Wrapper = [Plugin, Res, Handler](auto &... Args) { \ + const auto Wrapper = [&Plugin, Res, Handler](auto &... Args) { \ Handler(Plugin, Res, Args...); \ }; \ std::apply(Wrapper, Tuple); \ @@ -95,9 +96,9 @@ class PiArgumentsHandler { private: #define _PI_API(api) \ - std::function, void *)> \ + std::function, void *)> \ MHandler##_##api = \ - [](pi_plugin&, std::optional, void *) {}; + [](const pi_plugin &, std::optional, void *) {}; #include #undef _PI_API }; diff --git a/sycl/unittests/pi/pi_arguments_handler.cpp b/sycl/unittests/pi/pi_arguments_handler.cpp index fde4ae89534ba..ca43ceb039b37 100644 --- a/sycl/unittests/pi/pi_arguments_handler.cpp +++ b/sycl/unittests/pi/pi_arguments_handler.cpp @@ -20,9 +20,9 @@ TEST(PiArgumentsHandlerTest, CanUnpackArguments) { const pi_uint32 NumPlatforms = 42; pi_platform *Platforms = new pi_platform[NumPlatforms]; - Handler.set_piPlatformsGet([&](sycl::detail::XPTIPluginInfo, - std::optional, pi_uint32 NP, - pi_platform *Plts, pi_uint32 *Ret) { + Handler.set_piPlatformsGet([&](const pi_plugin &, std::optional, + pi_uint32 NP, pi_platform *Plts, + pi_uint32 *Ret) { EXPECT_EQ(NP, NumPlatforms); EXPECT_EQ(Platforms, Plts); EXPECT_EQ(Ret, nullptr); From 6557fdd78850976006581610db9d4add4b509014 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Tue, 27 Jul 2021 22:48:15 +0300 Subject: [PATCH 8/9] fix pi_trace --- sycl/tools/pi-trace/pi_trace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sycl/tools/pi-trace/pi_trace.cpp b/sycl/tools/pi-trace/pi_trace.cpp index bfff791c28e5c..238b5bc447eb7 100644 --- a/sycl/tools/pi-trace/pi_trace.cpp +++ b/sycl/tools/pi-trace/pi_trace.cpp @@ -51,7 +51,7 @@ XPTI_CALLBACK_API void xptiTraceInit(unsigned int /*major_version*/, tpCallback); #define _PI_API(api) \ - ArgHandler.set##_##api([](sycl::detail::XPTIPluginInfo, \ + ArgHandler.set##_##api([](const pi_plugin &, \ std::optional, auto &&... Args) { \ std::cout << "---> " << #api << "(" \ << "\n"; \ From a8bf68940be3dc9fbd58a7839462c52588305470 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Tue, 27 Jul 2021 22:54:50 +0300 Subject: [PATCH 9/9] clang-format --- sycl/tools/pi-trace/pi_trace.cpp | 14 +++++++------- sycl/tools/xpti_helpers/pi_arguments_handler.hpp | 5 ++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/sycl/tools/pi-trace/pi_trace.cpp b/sycl/tools/pi-trace/pi_trace.cpp index 238b5bc447eb7..5a355e407a484 100644 --- a/sycl/tools/pi-trace/pi_trace.cpp +++ b/sycl/tools/pi-trace/pi_trace.cpp @@ -51,13 +51,13 @@ XPTI_CALLBACK_API void xptiTraceInit(unsigned int /*major_version*/, tpCallback); #define _PI_API(api) \ - ArgHandler.set##_##api([](const pi_plugin &, \ - std::optional, auto &&... Args) { \ - std::cout << "---> " << #api << "(" \ - << "\n"; \ - sycl::detail::pi::printArgs(Args...); \ - std::cout << ") ---> "; \ - }); + ArgHandler.set##_##api( \ + [](const pi_plugin &, std::optional, auto &&... Args) { \ + std::cout << "---> " << #api << "(" \ + << "\n"; \ + sycl::detail::pi::printArgs(Args...); \ + std::cout << ") ---> "; \ + }); #include #undef _PI_API } diff --git a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp index aecebce04c325..08049cef70d20 100644 --- a/sycl/tools/xpti_helpers/pi_arguments_handler.hpp +++ b/sycl/tools/xpti_helpers/pi_arguments_handler.hpp @@ -75,9 +75,8 @@ class PiArgumentsHandler { #define _PI_API(api) \ void set##_##api( \ - const typename to_function< \ - typename detail::function_traits::args_type>::type \ - &Handler) { \ + const typename to_function::args_type>::type &Handler) { \ MHandler##_##api = [Handler](const pi_plugin &Plugin, \ std::optional Res, void *Data) { \ using TupleT = \