-
Notifications
You must be signed in to change notification settings - Fork 796
[SYCL][Docs] Add proposed event mode extension #15704
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
9110431
7c45672
19cdc17
276cc80
56129d1
f96675e
7cf93b4
197d433
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,156 @@ | ||
| = sycl_ext_intel_low_power_event | ||
|
|
||
| :source-highlighter: coderay | ||
| :coderay-linenums-mode: table | ||
|
|
||
| // This section needs to be after the document title. | ||
| :doctype: book | ||
| :toc2: | ||
| :toc: left | ||
| :encoding: utf-8 | ||
| :lang: en | ||
| :dpcpp: pass:[DPC++] | ||
| :endnote: —{nbsp}end{nbsp}note | ||
|
|
||
| // Set the default source code type in this document to C++, | ||
| // for syntax highlighting purposes. This is needed because | ||
| // docbook uses c++ and html5 uses cpp. | ||
| :language: {basebackend@docbook:c++:cpp} | ||
|
|
||
| :common_ref_sem: https://registry.khronos.org/SYCL/specs/sycl-2020/html/sycl-2020.html#sec:reference-semantics | ||
|
|
||
| == Notice | ||
|
|
||
| [%hardbreaks] | ||
| Copyright (C) 2024 Intel Corporation. All rights reserved. | ||
|
|
||
| Khronos(R) is a registered trademark and SYCL(TM) and SPIR(TM) are trademarks | ||
| of The Khronos Group Inc. OpenCL(TM) is a trademark of Apple Inc. used by | ||
| permission by Khronos. | ||
|
|
||
|
|
||
| == Contact | ||
|
|
||
| To report problems with this extension, please open a new issue at: | ||
|
|
||
| https://github.com/intel/llvm/issues | ||
|
|
||
|
|
||
| == Dependencies | ||
|
|
||
| This extension is written against the SYCL 2020 revision 9 specification. All | ||
| references below to the "core SYCL specification" or to section numbers in the | ||
| SYCL specification refer to that revision. | ||
|
|
||
| This extension also depends on the following other SYCL extensions: | ||
|
|
||
| * link:../experimental/sycl_ext_oneapi_enqueue_functions.asciidoc[ | ||
| sycl_ext_oneapi_enqueue_functions] | ||
| * link:../experimental/sycl_ext_oneapi_properties.asciidoc[ | ||
| sycl_ext_oneapi_properties] | ||
|
|
||
|
|
||
| == Status | ||
|
|
||
| This is a proposed extension specification, intended to gather community | ||
| feedback. Interfaces defined in this specification may not be implemented yet | ||
| or may be in a preliminary state. The specification itself may also change in | ||
| incompatible ways before it is finalized. *Shipping software products should | ||
| not rely on APIs defined in this specification.* | ||
|
|
||
|
|
||
| == Backend support status | ||
|
|
||
| This extension is currently implemented in {dpcpp} only for all device targets. | ||
|
|
||
| == Overview | ||
|
|
||
| On some backends, calling `wait()` on a `event` will synchronize using a | ||
steffenlarsen marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| busy-waiting implementation. Though this comes at a low latency for the | ||
| synchronization of the event, it has the downside of consuming high amounts of | ||
| CPU time for no meaningful work. This extension introduces a new property for | ||
| SYCL commands that will produce a "low-power" event. These new low-power events | ||
| will, if possible, yield the thread that the `wait()` member function is called | ||
| on and only wake up occasionally to check if the event has finished. This | ||
| reduces the time the CPU spends checking finish condition of the wait, at the | ||
| cost of latency. | ||
|
|
||
|
|
||
| == Specification | ||
|
|
||
| === Feature test macro | ||
|
|
||
| This extension provides a feature-test macro as described in the core SYCL | ||
| specification. An implementation supporting this extension must predefine the | ||
| macro `SYCL_EXT_ONEAPI_LOW_POWER_EVENT` to one of the values defined in the table | ||
steffenlarsen marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| below. Applications can test for the existence of this macro to determine if | ||
| the implementation supports this feature, or applications can test the macro's | ||
| value to determine which of the extension's features the implementation | ||
| supports. | ||
|
|
||
| [%header,cols="1,5"] | ||
| |=== | ||
| |Value | ||
| |Description | ||
|
|
||
| |1 | ||
| |The APIs of this experimental extension are not versioned, so the | ||
| feature-test macro always has this value. | ||
| |=== | ||
|
|
||
|
|
||
| === Low-power event property | ||
|
|
||
| This extension adds a new property which can be used with the | ||
| `submit_with_event` free function from | ||
| link:../experimental/sycl_ext_oneapi_enqueue_functions.asciidoc[sycl_ext_oneapi_enqueue_functions]. | ||
| Passing this property to either of these functions will act as a hint to the | ||
steffenlarsen marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| `event` created from the corresponding commands to do low-power synchronization. | ||
| If the backend is able to handle low-power events, calling `event::wait()` or | ||
| `event::wait_and_throw()` will cause the thread to yield and only do occasional | ||
| wake-ups to check the event progress. | ||
|
|
||
| [_Note:_ The property currently only has an effect on `barrier` and | ||
| `partial_barrier` commands enqueued on queues that return | ||
| `backend::ext_oneapi_level_zero` from `queue::get_backend()`. | ||
| _{endnote}_] | ||
|
|
||
| ``` | ||
| namespace sycl::ext::intel::experimental { | ||
|
|
||
| struct low_power_event_key { | ||
| using value_t = | ||
| oneapi::experimental::property_value<low_power_event_key>; | ||
| }; | ||
|
|
||
| inline constexpr low_power_event_key::value_t low_power_event; | ||
|
||
|
|
||
| } // namespace sycl::ext::intel::experimental | ||
| ``` | ||
|
|
||
| === New property usage example | ||
|
|
||
| As an example of how to use the new `low_power_event` property, see the | ||
| following code: | ||
|
|
||
| ``` | ||
| #include <sycl/sycl.hpp> | ||
|
|
||
| namespace oneapiex = sycl::ext::oneapi::experimental; | ||
| namespace intelex = sycl::ext::intel::experimental; | ||
|
|
||
| int main() { | ||
| sycl::queue Q; | ||
|
|
||
| // Submit some work to the queue. | ||
| oneapiex::submit(Q, [&](sycl::handler &CGH) {...}); | ||
|
|
||
| // Submit a command with the low-power event property. | ||
| sycl::event E = oneapiex::submit_with_event(Q, [&](sycl::handler &CGH) { | ||
| ... | ||
| }, oneapiex::properties{intelex::low_power_event}); | ||
steffenlarsen marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| // Waiting for the resulting event will use low-power waiting if possible. | ||
| E.wait(); | ||
| } | ||
| ``` | ||
Uh oh!
There was an error while loading. Please reload this page.