From d26781a032a86a841b139acb101dcf87797c36ff Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Sat, 11 Sep 2021 22:25:25 +0300 Subject: [PATCH 01/10] [SYCL][XPTI] Enable XPTI and XPTI Frameworks E2E tests --- .github/CODEOWNERS | 3 + SYCL/XPTI/Inputs/test_collector.cpp | 128 +++++++++++++++++++ SYCL/XPTI/basic_event_collection.cpp | 179 +++++++++++++++++++++++++++ SYCL/lit.cfg.py | 13 ++ 4 files changed, 323 insertions(+) create mode 100644 SYCL/XPTI/Inputs/test_collector.cpp create mode 100644 SYCL/XPTI/basic_event_collection.cpp diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f8847ead4e..87e1db6261 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -71,3 +71,6 @@ SYCL/USM @jbrodman # Stream SYCL/Basic/stream @againull + +# XPTI and XPTI Framework +SYCL/XPTI @tovinkere @andykaylor @alexbatashev diff --git a/SYCL/XPTI/Inputs/test_collector.cpp b/SYCL/XPTI/Inputs/test_collector.cpp new file mode 100644 index 0000000000..5cef9c8734 --- /dev/null +++ b/SYCL/XPTI/Inputs/test_collector.cpp @@ -0,0 +1,128 @@ +#include "xpti/xpti_trace_framework.hpp" + +#include +#include +#include + +std::mutex GMutex; + +XPTI_CALLBACK_API void syclCallback(uint16_t, + xpti::trace_event_data_t *, + xpti::trace_event_data_t *, + uint64_t, const void *); +XPTI_CALLBACK_API void syclPiCallback(uint16_t, + xpti::trace_event_data_t *, + xpti::trace_event_data_t *, + uint64_t, const void *); + +XPTI_CALLBACK_API void xptiTraceInit(unsigned int MajorVersion, + unsigned int MinorVersion, + const char *VersionStr, + const char *StreamName) { + std::cout << "xptiTraceInit: Stream Name = " << StreamName << "\n"; + std::string_view NameView{StreamName}; + + if (NameView == "sycl.pi") { + uint8_t StreamID = xptiRegisterStream(StreamName); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::function_begin), + syclPiCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::function_with_args_end), + syclPiCallback); + } + if (NameView == "sycl") { + uint8_t StreamID = xptiRegisterStream(StreamName); + xptiRegisterCallback(StreamID, + static_cast(xpti::trace_point_type_t::graph_create), + syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::node_create), syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::edge_create), syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::task_begin), syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::task_end), syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::signal), syclCallback); + xptiRegisterCallback(StreamID, + static_cast(xpti::trace_point_type_t::barrier_begin), + syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::barrier_end), syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::wait_begin), syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::wait_end), syclCallback); + xptiRegisterCallback(StreamID, static_cast(xpti::trace_point_type_t::signal), + syclCallback); + } +} + +XPTI_CALLBACK_API void xptiTraceFinish(const char *streamName) { + std::cout << "xptiTraceFinish: Stream Name = " << streamName << "\n"; +} + +XPTI_CALLBACK_API void syclPiCallback(uint16_t TraceType, + xpti::trace_event_data_t *, + xpti::trace_event_data_t *, + uint64_t, const void *UserData) { + std::lock_guard Lock{GMutex}; + auto Type = static_cast(TraceType); + const char *funcName = static_cast(UserData); + if (Type == xpti::trace_point_type_t::function_begin) { + std::cout << "PI Call Begin : "; + } else if (Type == xpti::trace_point_type_t::function_end){ + std::cout << "PI Call End : "; + } + std::cout << funcName << "\n"; +} + +XPTI_CALLBACK_API void syclCallback(uint16_t TraceType, + xpti::trace_event_data_t *, + xpti::trace_event_data_t *Event, + uint64_t, const void *UserData) { + std::lock_guard Lock{GMutex}; + auto Type = static_cast(TraceType); + switch (Type) { + case xpti::trace_point_type_t::graph_create: + std::cout << "Graph create\n"; + break; + case xpti::trace_point_type_t::node_create: + std::cout << "Node create\n"; + break; + case xpti::trace_point_type_t::edge_create: + std::cout << "Edge create\n"; + break; + case xpti::trace_point_type_t::task_begin: + std::cout << "Task begin\n"; + break; + case xpti::trace_point_type_t::task_end: + std::cout << "Task end\n"; + break; + case xpti::trace_point_type_t::signal: + std::cout << "Signal\n"; + break; + case xpti::trace_point_type_t::wait_begin: + std::cout << "Wait begin\n"; + break; + case xpti::trace_point_type_t::wait_end: + std::cout << "Wait end\n"; + break; + case xpti::trace_point_type_t::barrier_begin: + std::cout << "Barrier begin\n"; + break; + case xpti::trace_point_type_t::barrier_end: + std::cout << "Barrier end\n"; + break; + default: + std::cout << "Unknown tracepoint\n"; + } + + xpti::metadata_t *Metadata = xptiQueryMetadata(Event); + for (auto &Item : *Metadata) { + std::cout << " " << xptiLookupString(Item.first) + << " : " << xptiLookupString(Item.second) << "\n"; + } +} diff --git a/SYCL/XPTI/basic_event_collection.cpp b/SYCL/XPTI/basic_event_collection.cpp new file mode 100644 index 0000000000..1210da7e0e --- /dev/null +++ b/SYCL/XPTI/basic_event_collection.cpp @@ -0,0 +1,179 @@ +// REQUIRES: xptifw +// RUN: %clangxx -fsycl %s -DXPTI_COLLECTOR -shared -fPIC -std=c++17 -o %t_collector.dll -lxptifw +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out +// RUN: env XPTI_TRACE_ENABLED=1 env XPTI_FRAMEWORK_DISPATCHER=%xptifw_lib env XPTI_SUBSCRIBERS=%t_collector.dll %CPU_RUN_PLACEHOLDER %t %CPU_CHECK_PLACEHOLDER + +#ifdef XPTI_COLLECTOR + +#include "Inputs/test_collector.cpp" + +#else + +#include + +int main() { + sycl::queue Q{sycl::default_selector{}}; + + auto Ptr = sycl::malloc_device(1, Q); + + auto Evt1 = Q.single_task([=]() { + Ptr[0] = 1; + }); + + auto Evt2 = Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Evt1); + CGH.single_task([=]() { + Ptr[0]++; + }); + }); + + Evt2.wait(); + + int Res = 0; + Q.memcpy(&Res, Ptr, 1); + Q.wait(); + + assert(Res == 2); + + return 0; +} + +#endif + +// CHECK: xptiTraceInit: Stream Name = sycl +// CHECK-NEXT: Graph create +// CHECK-NEXT: xptiTraceInit: Stream Name = sycl.pi +// CHECK-NEXT: xptiTraceInit: Stream Name = sycl.pi.debug +// CHECK-NEXT: PI Call Begin : piPlatformsGet +// CHECK-NEXT: PI Call Begin : piPlatformsGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceRetain +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceRelease +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceRetain +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piContextCreate +// CHECK-NEXT: PI Call Begin : piQueueCreate +// CHECK-NEXT: PI Call Begin : piextUSMDeviceAlloc +// CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary +// CHECK-NEXT: Node create +// CHECK-NEXT: from_source : false +// CHECK-NEXT: kernel_name : +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: Task begin +// CHECK-NEXT: from_source : false +// CHECK-NEXT: kernel_name : +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piProgramCreate +// CHECK-NEXT: PI Call Begin : piProgramBuild +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piKernelCreate +// CHECK-NEXT: PI Call Begin : piKernelSetExecInfo +// CHECK-NEXT: PI Call Begin : piextKernelSetArgPointer +// CHECK-NEXT: PI Call Begin : piKernelGetGroupInfo +// CHECK-NEXT: PI Call Begin : piEnqueueKernelLaunch +// CHECK-NEXT: Signal +// CHECK-NEXT: from_source : false +// CHECK-NEXT: kernel_name : +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: Task end +// CHECK-NEXT: from_source : false +// CHECK-NEXT: kernel_name : +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary +// CHECK-NEXT: Node create +// CHECK-NEXT: from_source : false +// CHECK-NEXT: kernel_name : +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: Node create +// CHECK-NEXT: kernel_name : virtual_node +// CHECK-NEXT: Edge create +// CHECK-NEXT: event : Event +// CHECK-NEXT: kernel_name : virtual_node +// CHECK-NEXT: Task begin +// CHECK-NEXT: from_source : false +// CHECK-NEXT: kernel_name : +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: PI Call Begin : piKernelCreate +// CHECK-NEXT: PI Call Begin : piKernelSetExecInfo +// CHECK-NEXT: PI Call Begin : piextKernelSetArgPointer +// CHECK-NEXT: PI Call Begin : piKernelGetGroupInfo +// CHECK-NEXT: PI Call Begin : piEnqueueKernelLaunch +// CHECK-NEXT: Signal +// CHECK-NEXT: from_source : false +// CHECK-NEXT: kernel_name : +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: Task end +// CHECK-NEXT: from_source : false +// CHECK-NEXT: kernel_name : +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: Wait begin +// CHECK-NEXT: PI Call Begin : piEventsWait +// CHECK-NEXT: Wait end +// CHECK-NEXT: PI Call Begin : piextUSMEnqueueMemcpy +// CHECK-NEXT: PI Call Begin : piEventRelease +// CHECK-NEXT: Wait begin +// CHECK-NEXT: sym_line_no : 34 +// CHECK-NEXT: sym_function_name : main +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: PI Call Begin : piQueueFinish +// CHECK-NEXT: Wait end +// CHECK-NEXT: sym_line_no : 34 +// CHECK-NEXT: sym_function_name : main +// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: PI Call Begin : piEventRelease +// CHECK-NEXT: PI Call Begin : piEventRelease +// CHECK-NEXT: PI Call Begin : piQueueRelease +// CHECK-NEXT: PI Call Begin : piContextRelease +// CHECK-NEXT: PI Call Begin : piKernelRelease +// CHECK-NEXT: PI Call Begin : piKernelRelease +// CHECK-NEXT: PI Call Begin : piProgramRelease +// CHECK-NEXT: PI Call Begin : piDeviceRelease +// CHECK-NEXT: PI Call Begin : piTearDown +// CHECK-NEXT: xptiTraceFinish: Stream Name = sycl.pi +// CHECK-NEXT: xptiTraceFinish: Stream Name = sycl.pi.debug +// CHECK-NEXT: xptiTraceFinish: Stream Name = sycl diff --git a/SYCL/lit.cfg.py b/SYCL/lit.cfg.py index cecb1dd48a..86bdab283e 100644 --- a/SYCL/lit.cfg.py +++ b/SYCL/lit.cfg.py @@ -297,6 +297,19 @@ if find_executable('sycl-ls'): config.available_features.add('sycl-ls') +# TODO properly set XPTIFW include and runtime dirs +if find_executable('sycl-ls'): + sycl_ls_full_path = find_executable('sycl-ls') + sycl_ls_loc = os.path.dirname(sycl_ls_full_path) + xptifw_lib = "" + if platform.system() == "Linux": + xptifw_lib = os.path.join(sycl_ls_loc, '..', 'lib', 'libxptifw.so') + elif platform.system() == "Windows": + xptifw_lib = os.path.join(sycl_ls_loc, 'xptifw.dll') + if (os.path.exists(xptifw_lib)): + config.available_features.add('xptifw') + config.substitutions.append(('%xptifw_lib', xptifw_lib)) + llvm_tools = ["llvm-spirv", "llvm-link"] for llvm_tool in llvm_tools: llvm_tool_path = find_executable(llvm_tool) From 3eedfa4478a95287a8267dfb595240d8cb5dd5c3 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Sun, 12 Sep 2021 18:22:03 +0300 Subject: [PATCH 02/10] clang-format --- SYCL/XPTI/Inputs/test_collector.cpp | 146 ++++++++++++++------------- SYCL/XPTI/basic_event_collection.cpp | 8 +- 2 files changed, 80 insertions(+), 74 deletions(-) diff --git a/SYCL/XPTI/Inputs/test_collector.cpp b/SYCL/XPTI/Inputs/test_collector.cpp index 5cef9c8734..bd6f7fd70d 100644 --- a/SYCL/XPTI/Inputs/test_collector.cpp +++ b/SYCL/XPTI/Inputs/test_collector.cpp @@ -6,14 +6,12 @@ std::mutex GMutex; -XPTI_CALLBACK_API void syclCallback(uint16_t, - xpti::trace_event_data_t *, - xpti::trace_event_data_t *, - uint64_t, const void *); -XPTI_CALLBACK_API void syclPiCallback(uint16_t, - xpti::trace_event_data_t *, - xpti::trace_event_data_t *, - uint64_t, const void *); +XPTI_CALLBACK_API void syclCallback(uint16_t, xpti::trace_event_data_t *, + xpti::trace_event_data_t *, uint64_t, + const void *); +XPTI_CALLBACK_API void syclPiCallback(uint16_t, xpti::trace_event_data_t *, + xpti::trace_event_data_t *, uint64_t, + const void *); XPTI_CALLBACK_API void xptiTraceInit(unsigned int MajorVersion, unsigned int MinorVersion, @@ -25,38 +23,50 @@ XPTI_CALLBACK_API void xptiTraceInit(unsigned int MajorVersion, if (NameView == "sycl.pi") { uint8_t StreamID = xptiRegisterStream(StreamName); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::function_begin), + StreamID, + static_cast(xpti::trace_point_type_t::function_begin), syclPiCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::function_with_args_end), + StreamID, + static_cast(xpti::trace_point_type_t::function_with_args_end), syclPiCallback); } if (NameView == "sycl") { uint8_t StreamID = xptiRegisterStream(StreamName); - xptiRegisterCallback(StreamID, - static_cast(xpti::trace_point_type_t::graph_create), - syclCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::node_create), syclCallback); + StreamID, static_cast(xpti::trace_point_type_t::graph_create), + syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::node_create), + syclCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::edge_create), syclCallback); + StreamID, static_cast(xpti::trace_point_type_t::edge_create), + syclCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::task_begin), syclCallback); + StreamID, static_cast(xpti::trace_point_type_t::task_begin), + syclCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::task_end), syclCallback); + StreamID, static_cast(xpti::trace_point_type_t::task_end), + syclCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::signal), syclCallback); - xptiRegisterCallback(StreamID, - static_cast(xpti::trace_point_type_t::barrier_begin), - syclCallback); + StreamID, static_cast(xpti::trace_point_type_t::signal), + syclCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::barrier_end), syclCallback); + StreamID, + static_cast(xpti::trace_point_type_t::barrier_begin), + syclCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::wait_begin), syclCallback); + StreamID, static_cast(xpti::trace_point_type_t::barrier_end), + syclCallback); xptiRegisterCallback( - StreamID, static_cast(xpti::trace_point_type_t::wait_end), syclCallback); - xptiRegisterCallback(StreamID, static_cast(xpti::trace_point_type_t::signal), - syclCallback); + StreamID, static_cast(xpti::trace_point_type_t::wait_begin), + syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::wait_end), + syclCallback); + xptiRegisterCallback( + StreamID, static_cast(xpti::trace_point_type_t::signal), + syclCallback); } } @@ -65,64 +75,64 @@ XPTI_CALLBACK_API void xptiTraceFinish(const char *streamName) { } XPTI_CALLBACK_API void syclPiCallback(uint16_t TraceType, - xpti::trace_event_data_t *, - xpti::trace_event_data_t *, - uint64_t, const void *UserData) { + xpti::trace_event_data_t *, + xpti::trace_event_data_t *, uint64_t, + const void *UserData) { std::lock_guard Lock{GMutex}; auto Type = static_cast(TraceType); - const char *funcName = static_cast(UserData); + const char *funcName = static_cast(UserData); if (Type == xpti::trace_point_type_t::function_begin) { std::cout << "PI Call Begin : "; - } else if (Type == xpti::trace_point_type_t::function_end){ + } else if (Type == xpti::trace_point_type_t::function_end) { std::cout << "PI Call End : "; } std::cout << funcName << "\n"; } XPTI_CALLBACK_API void syclCallback(uint16_t TraceType, - xpti::trace_event_data_t *, - xpti::trace_event_data_t *Event, - uint64_t, const void *UserData) { + xpti::trace_event_data_t *, + xpti::trace_event_data_t *Event, uint64_t, + const void *UserData) { std::lock_guard Lock{GMutex}; auto Type = static_cast(TraceType); switch (Type) { - case xpti::trace_point_type_t::graph_create: - std::cout << "Graph create\n"; - break; - case xpti::trace_point_type_t::node_create: - std::cout << "Node create\n"; - break; - case xpti::trace_point_type_t::edge_create: - std::cout << "Edge create\n"; - break; - case xpti::trace_point_type_t::task_begin: - std::cout << "Task begin\n"; - break; - case xpti::trace_point_type_t::task_end: - std::cout << "Task end\n"; - break; - case xpti::trace_point_type_t::signal: - std::cout << "Signal\n"; - break; - case xpti::trace_point_type_t::wait_begin: - std::cout << "Wait begin\n"; - break; - case xpti::trace_point_type_t::wait_end: - std::cout << "Wait end\n"; - break; - case xpti::trace_point_type_t::barrier_begin: - std::cout << "Barrier begin\n"; - break; - case xpti::trace_point_type_t::barrier_end: - std::cout << "Barrier end\n"; - break; - default: - std::cout << "Unknown tracepoint\n"; + case xpti::trace_point_type_t::graph_create: + std::cout << "Graph create\n"; + break; + case xpti::trace_point_type_t::node_create: + std::cout << "Node create\n"; + break; + case xpti::trace_point_type_t::edge_create: + std::cout << "Edge create\n"; + break; + case xpti::trace_point_type_t::task_begin: + std::cout << "Task begin\n"; + break; + case xpti::trace_point_type_t::task_end: + std::cout << "Task end\n"; + break; + case xpti::trace_point_type_t::signal: + std::cout << "Signal\n"; + break; + case xpti::trace_point_type_t::wait_begin: + std::cout << "Wait begin\n"; + break; + case xpti::trace_point_type_t::wait_end: + std::cout << "Wait end\n"; + break; + case xpti::trace_point_type_t::barrier_begin: + std::cout << "Barrier begin\n"; + break; + case xpti::trace_point_type_t::barrier_end: + std::cout << "Barrier end\n"; + break; + default: + std::cout << "Unknown tracepoint\n"; } xpti::metadata_t *Metadata = xptiQueryMetadata(Event); for (auto &Item : *Metadata) { - std::cout << " " << xptiLookupString(Item.first) - << " : " << xptiLookupString(Item.second) << "\n"; + std::cout << " " << xptiLookupString(Item.first) << " : " + << xptiLookupString(Item.second) << "\n"; } } diff --git a/SYCL/XPTI/basic_event_collection.cpp b/SYCL/XPTI/basic_event_collection.cpp index 1210da7e0e..62cf0b5218 100644 --- a/SYCL/XPTI/basic_event_collection.cpp +++ b/SYCL/XPTI/basic_event_collection.cpp @@ -16,15 +16,11 @@ int main() { auto Ptr = sycl::malloc_device(1, Q); - auto Evt1 = Q.single_task([=]() { - Ptr[0] = 1; - }); + auto Evt1 = Q.single_task([=]() { Ptr[0] = 1; }); auto Evt2 = Q.submit([&](sycl::handler &CGH) { CGH.depends_on(Evt1); - CGH.single_task([=]() { - Ptr[0]++; - }); + CGH.single_task([=]() { Ptr[0]++; }); }); Evt2.wait(); From 6f9223ed4c052616a6885f720eeef03907e4e2f2 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Sat, 18 Sep 2021 16:52:30 +0300 Subject: [PATCH 03/10] Address feedback --- SYCL/XPTI/basic_event_collection.cpp | 70 ++++------------------------ SYCL/lit.cfg.py | 23 ++++----- 2 files changed, 22 insertions(+), 71 deletions(-) diff --git a/SYCL/XPTI/basic_event_collection.cpp b/SYCL/XPTI/basic_event_collection.cpp index 62cf0b5218..652db5de28 100644 --- a/SYCL/XPTI/basic_event_collection.cpp +++ b/SYCL/XPTI/basic_event_collection.cpp @@ -1,7 +1,7 @@ -// REQUIRES: xptifw -// RUN: %clangxx -fsycl %s -DXPTI_COLLECTOR -shared -fPIC -std=c++17 -o %t_collector.dll -lxptifw +// REQUIRES: xptifw, opencl +// RUN: %clangxx %s -DXPTI_COLLECTOR -L%xptifw_lib -I%xptifw_includes -shared -fPIC -std=c++17 -o %t_collector.dll -lxptifw // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out -// RUN: env XPTI_TRACE_ENABLED=1 env XPTI_FRAMEWORK_DISPATCHER=%xptifw_lib env XPTI_SUBSCRIBERS=%t_collector.dll %CPU_RUN_PLACEHOLDER %t %CPU_CHECK_PLACEHOLDER +// RUN: env XPTI_TRACE_ENABLED=1 env XPTI_FRAMEWORK_DISPATCHER=%xptifw_dispatcher env XPTI_SUBSCRIBERS=%t_collector.dll env SYCL_DEVICE_FILTER=opencl %t.out | FileCheck %s 2>&1 #ifdef XPTI_COLLECTOR @@ -42,38 +42,7 @@ int main() { // CHECK-NEXT: xptiTraceInit: Stream Name = sycl.pi.debug // CHECK-NEXT: PI Call Begin : piPlatformsGet // CHECK-NEXT: PI Call Begin : piPlatformsGet -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceRetain -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piPlatformGetInfo -// CHECK-NEXT: PI Call Begin : piPlatformGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceRelease -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceRetain -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piContextCreate +// CHECK: PI Call Begin : piContextCreate // CHECK-NEXT: PI Call Begin : piQueueCreate // CHECK-NEXT: PI Call Begin : piextUSMDeviceAlloc // CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary @@ -86,28 +55,9 @@ int main() { // CHECK-NEXT: kernel_name : // CHECK-NEXT: sycl_device : CPU // CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piPlatformGetInfo -// CHECK-NEXT: PI Call Begin : piPlatformGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piPlatformGetInfo -// CHECK-NEXT: PI Call Begin : piPlatformGetInfo -// CHECK-NEXT: PI Call Begin : piProgramCreate +// CHECK: PI Call Begin : piProgramCreate // CHECK-NEXT: PI Call Begin : piProgramBuild -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piPlatformGetInfo -// CHECK-NEXT: PI Call Begin : piPlatformGetInfo -// CHECK-NEXT: PI Call Begin : piKernelCreate +// CHECK: PI Call Begin : piKernelCreate // CHECK-NEXT: PI Call Begin : piKernelSetExecInfo // CHECK-NEXT: PI Call Begin : piextKernelSetArgPointer // CHECK-NEXT: PI Call Begin : piKernelGetGroupInfo @@ -120,7 +70,7 @@ int main() { // CHECK-NEXT: from_source : false // CHECK-NEXT: kernel_name : // CHECK-NEXT: sycl_device : CPU -// CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary +// CHECK: PI Call Begin : piextDeviceSelectBinary // CHECK-NEXT: Node create // CHECK-NEXT: from_source : false // CHECK-NEXT: kernel_name : @@ -147,18 +97,18 @@ int main() { // CHECK-NEXT: from_source : false // CHECK-NEXT: kernel_name : // CHECK-NEXT: sycl_device : CPU -// CHECK-NEXT: Wait begin +// CHECK: Wait begin // CHECK-NEXT: PI Call Begin : piEventsWait // CHECK-NEXT: Wait end // CHECK-NEXT: PI Call Begin : piextUSMEnqueueMemcpy // CHECK-NEXT: PI Call Begin : piEventRelease // CHECK-NEXT: Wait begin -// CHECK-NEXT: sym_line_no : 34 +// CHECK-NEXT: sym_line_no : 30 // CHECK-NEXT: sym_function_name : main // CHECK-NEXT: sycl_device : CPU // CHECK-NEXT: PI Call Begin : piQueueFinish // CHECK-NEXT: Wait end -// CHECK-NEXT: sym_line_no : 34 +// CHECK-NEXT: sym_line_no : 30 // CHECK-NEXT: sym_function_name : main // CHECK-NEXT: sycl_device : CPU // CHECK-NEXT: PI Call Begin : piEventRelease diff --git a/SYCL/lit.cfg.py b/SYCL/lit.cfg.py index b20da852fe..5ad54b8449 100644 --- a/SYCL/lit.cfg.py +++ b/SYCL/lit.cfg.py @@ -314,17 +314,18 @@ config.available_features.add('sycl-ls') # TODO properly set XPTIFW include and runtime dirs -if find_executable('sycl-ls'): - sycl_ls_full_path = find_executable('sycl-ls') - sycl_ls_loc = os.path.dirname(sycl_ls_full_path) - xptifw_lib = "" - if platform.system() == "Linux": - xptifw_lib = os.path.join(sycl_ls_loc, '..', 'lib', 'libxptifw.so') - elif platform.system() == "Windows": - xptifw_lib = os.path.join(sycl_ls_loc, 'xptifw.dll') - if (os.path.exists(xptifw_lib)): - config.available_features.add('xptifw') - config.substitutions.append(('%xptifw_lib', xptifw_lib)) +xptifw_lib = os.path.join(config.dpcpp_root_dir, 'lib') +xptifw_dispatcher = "" +if platform.system() == "Linux": + xptifw_dispatcher = os.path.join(xptifw_lib, 'libxptifw.so') +elif platform.system() == "Windows": + xptifw_dispatcher = os.path.join(config.dpcpp_root_dir, 'bin', 'xptifw.dll') +xptifw_includes = os.path.join(config.dpcpp_root_dir, 'include') +if os.path.exists(xptifw_lib) and os.path.exists(os.path.join(xptifw_includes, 'xpti', 'xpti_trace_framework.h')): + config.available_features.add('xptifw') + config.substitutions.append(('%xptifw_lib', xptifw_lib)) + config.substitutions.append(('%xptifw_dispatcher', xptifw_dispatcher)) + config.substitutions.append(('%xptifw_includes', xptifw_includes)) llvm_tools = ["llvm-spirv", "llvm-link"] for llvm_tool in llvm_tools: From 1e5f8f3f50a9749793fb33f0bdf1aee38eb997af Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Tue, 21 Sep 2021 19:31:01 +0300 Subject: [PATCH 04/10] Update SYCL/XPTI/basic_event_collection.cpp Co-authored-by: Romanov Vlad --- SYCL/XPTI/basic_event_collection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SYCL/XPTI/basic_event_collection.cpp b/SYCL/XPTI/basic_event_collection.cpp index 652db5de28..9778ca7113 100644 --- a/SYCL/XPTI/basic_event_collection.cpp +++ b/SYCL/XPTI/basic_event_collection.cpp @@ -1,7 +1,7 @@ // REQUIRES: xptifw, opencl // RUN: %clangxx %s -DXPTI_COLLECTOR -L%xptifw_lib -I%xptifw_includes -shared -fPIC -std=c++17 -o %t_collector.dll -lxptifw // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out -// RUN: env XPTI_TRACE_ENABLED=1 env XPTI_FRAMEWORK_DISPATCHER=%xptifw_dispatcher env XPTI_SUBSCRIBERS=%t_collector.dll env SYCL_DEVICE_FILTER=opencl %t.out | FileCheck %s 2>&1 +// RUN: env XPTI_TRACE_ENABLE=1 env XPTI_FRAMEWORK_DISPATCHER=%xptifw_dispatcher env XPTI_SUBSCRIBERS=%t_collector.dll env SYCL_DEVICE_FILTER=opencl %t.out | FileCheck %s 2>&1 #ifdef XPTI_COLLECTOR From ab5846971e11be420aceecab87a2f27a797fe5bd Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Fri, 17 Dec 2021 21:34:33 +0300 Subject: [PATCH 05/10] fix --- SYCL/lit.cfg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SYCL/lit.cfg.py b/SYCL/lit.cfg.py index c9cfcb99e6..528ce29160 100644 --- a/SYCL/lit.cfg.py +++ b/SYCL/lit.cfg.py @@ -336,7 +336,7 @@ xptifw_includes = os.path.join(config.dpcpp_root_dir, 'include') if os.path.exists(xptifw_lib) and os.path.exists(os.path.join(xptifw_includes, 'xpti', 'xpti_trace_framework.h')): config.available_features.add('xptifw') - config.substitutions.append(('%xptifw_lib', "-L{} -I{}".format(xptifw_lib, xptiwf_includes))) + config.substitutions.append(('%xptifw_lib', "-L{} -I{}".format(xptifw_lib, xptifw_includes))) config.substitutions.append(('%xptifw_dispatcher', xptifw_dispatcher)) llvm_tools = ["llvm-spirv", "llvm-link"] From 4f1fd32ccb041c68bd6f815ae569b83146a62f21 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Fri, 17 Dec 2021 22:38:14 +0300 Subject: [PATCH 06/10] update test --- SYCL/XPTI/basic_event_collection.cpp | 86 ++++++++++++++++------------ SYCL/lit.cfg.py | 3 +- 2 files changed, 50 insertions(+), 39 deletions(-) diff --git a/SYCL/XPTI/basic_event_collection.cpp b/SYCL/XPTI/basic_event_collection.cpp index 9778ca7113..c11810ee7f 100644 --- a/SYCL/XPTI/basic_event_collection.cpp +++ b/SYCL/XPTI/basic_event_collection.cpp @@ -1,5 +1,5 @@ // REQUIRES: xptifw, opencl -// RUN: %clangxx %s -DXPTI_COLLECTOR -L%xptifw_lib -I%xptifw_includes -shared -fPIC -std=c++17 -o %t_collector.dll -lxptifw +// RUN: %clangxx %s -DXPTI_COLLECTOR -L%xptifw_lib -I%xptifw_includes -shared %fPIC -std=c++17 -o %t_collector.dll -lxptifw // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: env XPTI_TRACE_ENABLE=1 env XPTI_FRAMEWORK_DISPATCHER=%xptifw_dispatcher env XPTI_SUBSCRIBERS=%t_collector.dll env SYCL_DEVICE_FILTER=opencl %t.out | FileCheck %s 2>&1 @@ -36,53 +36,64 @@ int main() { #endif -// CHECK: xptiTraceInit: Stream Name = sycl +// CHECK: xptiTraceInit: Stream Name = sycl // CHECK-NEXT: Graph create // CHECK-NEXT: xptiTraceInit: Stream Name = sycl.pi // CHECK-NEXT: xptiTraceInit: Stream Name = sycl.pi.debug // CHECK-NEXT: PI Call Begin : piPlatformsGet // CHECK-NEXT: PI Call Begin : piPlatformsGet -// CHECK: PI Call Begin : piContextCreate +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceRetain +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piPlatformGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceRelease +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceRetain +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDevicesGet +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo +// CHECK-NEXT: PI Call Begin : piContextCreate // CHECK-NEXT: PI Call Begin : piQueueCreate // CHECK-NEXT: PI Call Begin : piextUSMDeviceAlloc // CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary -// CHECK-NEXT: Node create -// CHECK-NEXT: from_source : false -// CHECK-NEXT: kernel_name : -// CHECK-NEXT: sycl_device : CPU -// CHECK-NEXT: Task begin -// CHECK-NEXT: from_source : false -// CHECK-NEXT: kernel_name : -// CHECK-NEXT: sycl_device : CPU -// CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary -// CHECK: PI Call Begin : piProgramCreate -// CHECK-NEXT: PI Call Begin : piProgramBuild +// CHECK-NEXT: PI Call Begin : piDeviceGetInfo // CHECK: PI Call Begin : piKernelCreate // CHECK-NEXT: PI Call Begin : piKernelSetExecInfo // CHECK-NEXT: PI Call Begin : piextKernelSetArgPointer // CHECK-NEXT: PI Call Begin : piKernelGetGroupInfo // CHECK-NEXT: PI Call Begin : piEnqueueKernelLaunch -// CHECK-NEXT: Signal -// CHECK-NEXT: from_source : false -// CHECK-NEXT: kernel_name : -// CHECK-NEXT: sycl_device : CPU -// CHECK-NEXT: Task end -// CHECK-NEXT: from_source : false -// CHECK-NEXT: kernel_name : -// CHECK-NEXT: sycl_device : CPU -// CHECK: PI Call Begin : piextDeviceSelectBinary // CHECK-NEXT: Node create +// CHECK-NEXT: sym_line_no : 21 +// CHECK-NEXT: sym_source_file_name : {{.*}} +// CHECK-NEXT: sym_function_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: from_source : false -// CHECK-NEXT: kernel_name : +// CHECK-NEXT: kernel_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: sycl_device : CPU // CHECK-NEXT: Node create -// CHECK-NEXT: kernel_name : virtual_node +// CHECK-NEXT: kernel_name : virtual_node[{{.*}}] // CHECK-NEXT: Edge create -// CHECK-NEXT: event : Event -// CHECK-NEXT: kernel_name : virtual_node +// CHECK-NEXT: event : Event[{{.*}}] // CHECK-NEXT: Task begin +// CHECK-NEXT: sym_line_no : 21 +// CHECK-NEXT: sym_source_file_name : {{.*}} +// CHECK-NEXT: sym_function_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: from_source : false -// CHECK-NEXT: kernel_name : +// CHECK-NEXT: kernel_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: sycl_device : CPU // CHECK-NEXT: PI Call Begin : piKernelCreate // CHECK-NEXT: PI Call Begin : piKernelSetExecInfo @@ -90,26 +101,28 @@ int main() { // CHECK-NEXT: PI Call Begin : piKernelGetGroupInfo // CHECK-NEXT: PI Call Begin : piEnqueueKernelLaunch // CHECK-NEXT: Signal +// CHECK-NEXT: sym_line_no : 21 +// CHECK-NEXT: sym_source_file_name : {{.*}} +// CHECK-NEXT: sym_function_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: from_source : false -// CHECK-NEXT: kernel_name : +// CHECK-NEXT: kernel_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: sycl_device : CPU // CHECK-NEXT: Task end +// CHECK-NEXT: sym_line_no : 21 +// CHECK-NEXT: sym_source_file_name : {{.*}} +// CHECK-NEXT: sym_function_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: from_source : false -// CHECK-NEXT: kernel_name : +// CHECK-NEXT: kernel_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: sycl_device : CPU -// CHECK: Wait begin +// CHECK-NEXT: Wait begin // CHECK-NEXT: PI Call Begin : piEventsWait // CHECK-NEXT: Wait end // CHECK-NEXT: PI Call Begin : piextUSMEnqueueMemcpy // CHECK-NEXT: PI Call Begin : piEventRelease // CHECK-NEXT: Wait begin -// CHECK-NEXT: sym_line_no : 30 -// CHECK-NEXT: sym_function_name : main // CHECK-NEXT: sycl_device : CPU // CHECK-NEXT: PI Call Begin : piQueueFinish // CHECK-NEXT: Wait end -// CHECK-NEXT: sym_line_no : 30 -// CHECK-NEXT: sym_function_name : main // CHECK-NEXT: sycl_device : CPU // CHECK-NEXT: PI Call Begin : piEventRelease // CHECK-NEXT: PI Call Begin : piEventRelease @@ -120,6 +133,3 @@ int main() { // CHECK-NEXT: PI Call Begin : piProgramRelease // CHECK-NEXT: PI Call Begin : piDeviceRelease // CHECK-NEXT: PI Call Begin : piTearDown -// CHECK-NEXT: xptiTraceFinish: Stream Name = sycl.pi -// CHECK-NEXT: xptiTraceFinish: Stream Name = sycl.pi.debug -// CHECK-NEXT: xptiTraceFinish: Stream Name = sycl diff --git a/SYCL/lit.cfg.py b/SYCL/lit.cfg.py index f133d2ee5d..1d66349b1b 100644 --- a/SYCL/lit.cfg.py +++ b/SYCL/lit.cfg.py @@ -142,12 +142,14 @@ config.substitutions.append( ('%include_option', '/FI' ) ) config.substitutions.append( ('%debug_option', '/DEBUG' ) ) config.substitutions.append( ('%cxx_std_option', '/std:' ) ) + config.substitutions.append( ('%fPIC', '') ) else: config.substitutions.append( ('%sycl_options', ' -lsycl -I' + config.sycl_include + ' -I' + os.path.join(config.sycl_include, 'sycl')) ) config.substitutions.append( ('%include_option', '-include' ) ) config.substitutions.append( ('%debug_option', '-g' ) ) config.substitutions.append( ('%cxx_std_option', '-std=' ) ) + config.substitutions.append( ('%fPIC', '-fPIC') ) if not config.gpu_aot_target_opts: config.gpu_aot_target_opts = '"-device *"' @@ -326,7 +328,6 @@ if find_executable('sycl-ls'): config.available_features.add('sycl-ls') -<<<<<<< HEAD # TODO properly set XPTIFW include and runtime dirs xptifw_lib = os.path.join(config.dpcpp_root_dir, 'lib') xptifw_dispatcher = "" From 1c9938e1cacd137099c611c3bacf7bdc1e6ac1cd Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Sat, 18 Dec 2021 09:19:33 +0300 Subject: [PATCH 07/10] update codeowners --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5af1f509a4..11df6ee61c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -79,4 +79,4 @@ SYCL/BFloat16 @AlexeySotkin @MrSidims SYCL/DeprecatedFeatures @intel/llvm-reviewers-runtime # XPTI and XPTI Framework -SYCL/XPTI @tovinkere @andykaylor @alexbatashev +SYCL/XPTI @intel/llvm-reviewers-runtime From 5bb745c054f88d1eb195b691f97368adb4335eb0 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Mon, 20 Dec 2021 09:22:32 +0300 Subject: [PATCH 08/10] minor fixes --- SYCL/XPTI/basic_event_collection.cpp | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/SYCL/XPTI/basic_event_collection.cpp b/SYCL/XPTI/basic_event_collection.cpp index c11810ee7f..664d3eee0e 100644 --- a/SYCL/XPTI/basic_event_collection.cpp +++ b/SYCL/XPTI/basic_event_collection.cpp @@ -1,5 +1,5 @@ // REQUIRES: xptifw, opencl -// RUN: %clangxx %s -DXPTI_COLLECTOR -L%xptifw_lib -I%xptifw_includes -shared %fPIC -std=c++17 -o %t_collector.dll -lxptifw +// RUN: %clangxx %s -DXPTI_COLLECTOR -DXPTI_CALLBACK_API_EXPORTS -L%xptifw_lib -I%xptifw_includes -shared %fPIC -std=c++17 -o %t_collector.dll -lxptifw // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: env XPTI_TRACE_ENABLE=1 env XPTI_FRAMEWORK_DISPATCHER=%xptifw_dispatcher env XPTI_SUBSCRIBERS=%t_collector.dll env SYCL_DEVICE_FILTER=opencl %t.out | FileCheck %s 2>&1 @@ -53,21 +53,7 @@ int main() { // CHECK-NEXT: PI Call Begin : piPlatformGetInfo // CHECK-NEXT: PI Call Begin : piPlatformGetInfo // CHECK-NEXT: PI Call Begin : piDeviceRelease -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceRetain -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDevicesGet -// CHECK-NEXT: PI Call Begin : piDeviceGetInfo -// CHECK-NEXT: PI Call Begin : piContextCreate +// CHECK: PI Call Begin : piContextCreate // CHECK-NEXT: PI Call Begin : piQueueCreate // CHECK-NEXT: PI Call Begin : piextUSMDeviceAlloc // CHECK-NEXT: PI Call Begin : piextDeviceSelectBinary From 7c018cb7666058e6ddb09baf04cf186285370bd6 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Tue, 21 Dec 2021 21:30:47 +0300 Subject: [PATCH 09/10] make tests device agnostic? --- SYCL/XPTI/basic_event_collection.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SYCL/XPTI/basic_event_collection.cpp b/SYCL/XPTI/basic_event_collection.cpp index 664d3eee0e..5415d382a6 100644 --- a/SYCL/XPTI/basic_event_collection.cpp +++ b/SYCL/XPTI/basic_event_collection.cpp @@ -69,7 +69,7 @@ int main() { // CHECK-NEXT: sym_function_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: from_source : false // CHECK-NEXT: kernel_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} -// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: sycl_device : {{.*}} // CHECK-NEXT: Node create // CHECK-NEXT: kernel_name : virtual_node[{{.*}}] // CHECK-NEXT: Edge create @@ -80,7 +80,7 @@ int main() { // CHECK-NEXT: sym_function_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: from_source : false // CHECK-NEXT: kernel_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} -// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: sycl_device : {{.*}} // CHECK-NEXT: PI Call Begin : piKernelCreate // CHECK-NEXT: PI Call Begin : piKernelSetExecInfo // CHECK-NEXT: PI Call Begin : piextKernelSetArgPointer @@ -92,24 +92,24 @@ int main() { // CHECK-NEXT: sym_function_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: from_source : false // CHECK-NEXT: kernel_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} -// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: sycl_device : {{.*}} // CHECK-NEXT: Task end // CHECK-NEXT: sym_line_no : 21 // CHECK-NEXT: sym_source_file_name : {{.*}} // CHECK-NEXT: sym_function_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} // CHECK-NEXT: from_source : false // CHECK-NEXT: kernel_name : typeinfo name for main::{lambda(cl::sycl::handler&)#1}::operator()(cl::sycl::handler&) const::{lambda()#1} -// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: sycl_device : {{.*}} // CHECK-NEXT: Wait begin // CHECK-NEXT: PI Call Begin : piEventsWait // CHECK-NEXT: Wait end // CHECK-NEXT: PI Call Begin : piextUSMEnqueueMemcpy // CHECK-NEXT: PI Call Begin : piEventRelease // CHECK-NEXT: Wait begin -// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: sycl_device : {{.*}} // CHECK-NEXT: PI Call Begin : piQueueFinish // CHECK-NEXT: Wait end -// CHECK-NEXT: sycl_device : CPU +// CHECK-NEXT: sycl_device : {{.*}} // CHECK-NEXT: PI Call Begin : piEventRelease // CHECK-NEXT: PI Call Begin : piEventRelease // CHECK-NEXT: PI Call Begin : piQueueRelease From 2606dbe45ae67315c15f9d8bc5773c4ae57a1a9d Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Wed, 22 Dec 2021 10:40:34 +0300 Subject: [PATCH 10/10] windows? --- SYCL/XPTI/basic_event_collection.cpp | 2 +- SYCL/lit.cfg.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/SYCL/XPTI/basic_event_collection.cpp b/SYCL/XPTI/basic_event_collection.cpp index 5415d382a6..9e8907bcb3 100644 --- a/SYCL/XPTI/basic_event_collection.cpp +++ b/SYCL/XPTI/basic_event_collection.cpp @@ -1,5 +1,5 @@ // REQUIRES: xptifw, opencl -// RUN: %clangxx %s -DXPTI_COLLECTOR -DXPTI_CALLBACK_API_EXPORTS -L%xptifw_lib -I%xptifw_includes -shared %fPIC -std=c++17 -o %t_collector.dll -lxptifw +// RUN: %clangxx %s -DXPTI_COLLECTOR -DXPTI_CALLBACK_API_EXPORTS %xptifw_lib %shared_lib %fPIC %cxx_std_optionc++17 -o %t_collector.dll // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: env XPTI_TRACE_ENABLE=1 env XPTI_FRAMEWORK_DISPATCHER=%xptifw_dispatcher env XPTI_SUBSCRIBERS=%t_collector.dll env SYCL_DEVICE_FILTER=opencl %t.out | FileCheck %s 2>&1 diff --git a/SYCL/lit.cfg.py b/SYCL/lit.cfg.py index 1d66349b1b..90e07579ca 100644 --- a/SYCL/lit.cfg.py +++ b/SYCL/lit.cfg.py @@ -143,6 +143,7 @@ config.substitutions.append( ('%debug_option', '/DEBUG' ) ) config.substitutions.append( ('%cxx_std_option', '/std:' ) ) config.substitutions.append( ('%fPIC', '') ) + config.substitutions.append( ('%shared_lib', '/LD') ) else: config.substitutions.append( ('%sycl_options', ' -lsycl -I' + config.sycl_include + ' -I' + os.path.join(config.sycl_include, 'sycl')) ) @@ -150,6 +151,7 @@ config.substitutions.append( ('%debug_option', '-g' ) ) config.substitutions.append( ('%cxx_std_option', '-std=' ) ) config.substitutions.append( ('%fPIC', '-fPIC') ) + config.substitutions.append( ('%shared_lib', '-shared') ) if not config.gpu_aot_target_opts: config.gpu_aot_target_opts = '"-device *"' @@ -329,17 +331,21 @@ config.available_features.add('sycl-ls') # TODO properly set XPTIFW include and runtime dirs -xptifw_lib = os.path.join(config.dpcpp_root_dir, 'lib') +xptifw_lib_dir = os.path.join(config.dpcpp_root_dir, 'lib') xptifw_dispatcher = "" if platform.system() == "Linux": - xptifw_dispatcher = os.path.join(xptifw_lib, 'libxptifw.so') + xptifw_dispatcher = os.path.join(xptifw_lib_dir, 'libxptifw.so') elif platform.system() == "Windows": xptifw_dispatcher = os.path.join(config.dpcpp_root_dir, 'bin', 'xptifw.dll') xptifw_includes = os.path.join(config.dpcpp_root_dir, 'include') if os.path.exists(xptifw_lib) and os.path.exists(os.path.join(xptifw_includes, 'xpti', 'xpti_trace_framework.h')): config.available_features.add('xptifw') - config.substitutions.append(('%xptifw_lib', "-L{} -I{}".format(xptifw_lib, xptifw_includes))) config.substitutions.append(('%xptifw_dispatcher', xptifw_dispatcher)) + if platform.system() == "Linux": + config.substitutions.append(('%xptifw_lib', " {}/xptifw.lib".format(xptifw_lib_dir))) + elif platform.system() == "Windows": + config.substitutions.append(('%xptifw_lib', "-L{} -I{} -lxptifw".format(xptifw_lib_dir, xptifw_includes))) + llvm_tools = ["llvm-spirv", "llvm-link"] for llvm_tool in llvm_tools: