You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: sycl/doc/extensions/EnqueueBarrier/enqueue_barrier.asciidoc
+32-39Lines changed: 32 additions & 39 deletions
Original file line number
Diff line number
Diff line change
@@ -1,4 +1,4 @@
1
-
= SYCL_EXT_INTEL_ENQUEUE_BARRIER
1
+
= SYCL_EXT_ONEAPI_ENQUEUE_BARRIER
2
2
:source-highlighter: coderay
3
3
:coderay-linenums-mode: table
4
4
@@ -25,11 +25,6 @@ NOTE: This document is better viewed when rendered as html with asciidoctor. Gi
25
25
26
26
This document presents a series of changes proposed for a future version of the SYCL Specification. The goal of this proposal is to provide non-blocking APIs that provide synchronization on SYCL command queue for programmers.
27
27
28
-
29
-
== Name Strings
30
-
31
-
+SYCL_EXT_INTEL_ENQUEUE_BARRIER+
32
-
33
28
== Notice
34
29
35
30
Copyright (c) 2019-2020 Intel Corporation. All rights reserved.
@@ -45,7 +40,7 @@ Because the interfaces defined by this specification are not final and are subje
45
40
== Version
46
41
47
42
Built On: {docdate} +
48
-
Revision: 1
43
+
Revision: 2
49
44
50
45
== Contact
51
46
Please open an issue in the https://github.com/intel/llvm/tree/sycl/sycl/doc/extensions/[extensions repository]
@@ -55,7 +50,7 @@ Please open an issue in the https://github.com/intel/llvm/tree/sycl/sycl/doc/ext
55
50
This extension provides a feature-test macro as described in the core SYCL
56
51
specification section 6.3.3 "Feature test macros". Therefore, an
57
52
implementation supporting this extension must predefine the macro
58
-
`SYCL_EXT_INTEL_ENQUEUE_BARRIER` to one of the values defined in the table below.
53
+
`SYCL_EXT_ONEAPI_ENQUEUE_BARRIER` to one of the values defined in the table below.
59
54
Applications can test for the existence of this macro to determine if the
60
55
implementation supports this feature, or applications can test the macro's
61
56
value to determine which of the extension's APIs the implementation supports.
@@ -68,12 +63,12 @@ value to determine which of the extension's APIs the implementation supports.
68
63
69
64
== Dependencies
70
65
71
-
This extension is written against the SYCL 1.2.1 specification, Revision v1.2.1-6.
66
+
This extension is written against the SYCL 2020 specification, revision 3.
72
67
73
68
== Overview
74
69
75
-
SYCL 1.2.1 defines a graph-based task execution model, based on kernels or explicit memory operations submitted to out-of-order queues. Dependencies between these kernels are represented by
76
-
accessors that form data dependence edges in the execution graph. The USM extension <<usmlink,[1]>> doesn't have accessors, so instead solves
70
+
SYCL 2020 defines a graph-based task execution model, based on kernels or explicit memory operations submitted to out-of-order queues. Dependencies between these kernels are represented by
71
+
accessors that form data dependence edges in the execution graph. Unified Shared Memory (USM) doesn't have accessors, so instead solves
77
72
this by defining `handler::depends_on` methods to specify event-based control dependencies between command groups.
78
73
79
74
There are situations where defining dependencies based on events is more explicit than desired or required by an application. For instance, the user may know that a given task depends on all previously submitted tasks. Instead of explicitly adding all the required depends_on calls, the user could express this intent via a single call, making the program more concise and explicit.
@@ -91,9 +86,9 @@ two new members to the `queue` class:
The first variant of the barrier takes no parameters, and waits for all previously submitted commands to the queue to enter the `info::event_command_status::complete` state before any command later submitted to the same queue is allowed to execute. A second variant of the barrier accepts a list of events, with the behavior that no commands submitted to the same queue after barrier submission may execute until all events in the `waitList` have entered the `info::event_command_status::complete` state. Both variants are non-blocking from the host program perspective, in that they do not wait for the barrier conditions to have been met before returning.
|`event ext_intel_submit_barrier()` | Same effect as submitting a `handler::ext_intel_barrier()` within a command group to this `queue`. The returned event enters the `info::event_command_status::complete` state when all events that the barrier is dependent on (implicitly from all previously submitted commands to the same queue) have entered the `info::event_command_status::complete` state.
245
-
|`event ext_intel_submit_barrier( const vector_class<event> &waitList )` | Same effect as submitting a `handler:ext_intel_barrier( const vector_class<event> &waitList )` within a command group to this `queue`. The returned event enters the `info::event_command_status::complete` state when all events that the barrier is dependent on (explicitly from `waitList`) have entered the `info::event_command_status::complete` state.
239
+
|`event ext_oneapi_submit_barrier()` | Same effect as submitting a `handler::ext_intel_barrier()` within a command group to this `queue`. The returned event enters the `info::event_command_status::complete` state when all events that the barrier is dependent on (implicitly from all previously submitted commands to the same queue) have entered the `info::event_command_status::complete` state.
240
+
|`event ext_oneapi_submit_barrier( const vector_class<event> &waitList )` | Same effect as submitting a `handler:ext_intel_barrier( const vector_class<event> &waitList )` within a command group to this `queue`. The returned event enters the `info::event_command_status::complete` state when all events that the barrier is dependent on (explicitly from `waitList`) have entered the `info::event_command_status::complete` state.
246
241
|========================================
247
242
248
243
249
-
=== Modify Section 4.8.2
244
+
=== Modify Section 4.9.3
250
245
251
246
==== Change first sentence from:
252
-
A command group scope in SYCL, as it is defined in Section 3.4.1, consists of a single kernel or explicit memory
253
-
operation (handler methods such as copy, update_host, fill), together with its requirements.
247
+
The member functions and objects defined in this scope will define the requirements for the kernel execution or
248
+
explicit memory operation, and will be used by the SYCL runtime to evaluate if the operation is ready for execution.
254
249
255
250
==== To:
256
251
257
-
A command group scope in SYCL, as it is defined in Section 3.4.1, consists of a single kernel, explicit memory
258
-
operation (handler methods such as copy, update_host, fill) or barrier, together with its requirements.
252
+
The member functions and objects defined in this scope will define the requirements for the kernel execution,
253
+
explicit memory operation or barrier, and will be used by the SYCL runtime to evaluate if the operation is ready for execution.
254
+
259
255
260
-
=== Modify part of Section 4.8.3
256
+
=== Modify part of Section 4.9.4
261
257
262
258
*Change from:*
263
259
[source,c++,NoName,linenums]
264
260
----
265
261
...
266
-
template<typename T, int dim, access::mode mode, access::target tgt>
=== Add a new section between Section 4.8.6 and 4.8.7
284
+
=== Add a new section between Section 4.9.4 and 4.9.5
289
285
290
-
4.8.X SYCL functions for enqueued synchronization barriers
286
+
4.9.X SYCL functions for enqueued synchronization barriers
291
287
292
288
Barriers may be submitted to a queue, with the effect that they prevent later operations submitted to the same queue from executing until the barrier wait conditions have been satisfied. The wait conditions can be explicitly described by `waitList` or implicitly from all previously submitted commands to the same queue. There are no constraints on the context from which queues may participate in the `waitList`. Enqueued barriers do not block host program execution, but instead form additional dependence edges with the execution task graph.
293
289
294
290
Barriers can be created by two members of the `handler` class that force synchronization on the SYCL command queue. The first variant of the `handler` barrier (`handler::barrier()`) takes no parameters, and waits for all previously submitted commands to the queue to enter the `info::event_command_status::complete` state before any command later submitted to the same queue is allowed to execute. The second variant of the `handler` barrier (`handler::barrier( const vector_class<event> &waitList )`) accepts a list of events, with the behavior that no commands submitted to the same queue after barrier submission may execute until all events in the waitList have entered the `info::event_command_status::complete` state.
295
291
296
-
=== Add a new table in the new section between 4.8.6 and 4.8.7: Member functions of the handler class.
292
+
=== Add a new table in the new section between 4.9.4 and 4.9.5: Member functions of the handler class.
297
293
298
294
[cols="70,300"]
299
295
[grid="rows"]
@@ -304,9 +300,6 @@ Barriers can be created by two members of the `handler` class that force synchro
304
300
|`void ext_intel_barrier( const vector_class<event> &waitList` ) | Prevents any commands submitted afterward to this queue from executing until all events in `waitList` have entered the `info::event_command_status::complete` state. If `waitList` is empty, then the barrier has no effect.
Copy file name to clipboardExpand all lines: sycl/doc/extensions/MemChannel/MemChannel.asciidoc
+5-5Lines changed: 5 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -23,11 +23,11 @@ Because the interfaces defined by this specification are not final and are subje
23
23
== Version
24
24
25
25
Built On: {docdate} +
26
-
Revision: 1
26
+
Revision: 2
27
27
28
28
== Dependencies
29
29
30
-
This extension is written against the SYCL 2020 provisional specification, Revision 1.
30
+
This extension is written against the SYCL 2020 specification, Revision 3.
31
31
32
32
The use of this extension requires a target that supports cl_intel_mem_channel_property or equivalent if OpenCL is used as the underlying device runtime.
33
33
@@ -65,7 +65,7 @@ Add a new property to Table 4.33: Properties supported by the SYCL buffer class
65
65
|===
66
66
--
67
67
68
-
Add a new constructor to Table 4.34: Constructors of the buffer property classes as follows:
68
+
Add a new constructor to Table 41: Constructors of the buffer property classes as follows:
69
69
70
70
--
71
71
[options="header"]
@@ -75,7 +75,7 @@ Add a new constructor to Table 4.34: Constructors of the buffer property classes
75
75
|===
76
76
--
77
77
78
-
Add a new member function to Table 4.35: Member functions of the buffer property classes as follows:
78
+
Add a new member function to Table 42: Member functions of the buffer property classes as follows:
79
79
80
80
--
81
81
[options="header"]
@@ -103,7 +103,7 @@ enum class aspect {
103
103
} // namespace sycl
104
104
```
105
105
106
-
Add an entry for the new aspect to Table 4.20: Device aspects defined by the core SYCL specification:
106
+
Add an entry for the new aspect to Table 26: Device aspects defined by the core SYCL specification:
Copy file name to clipboardExpand all lines: sycl/doc/extensions/USMAddressSpaces/usm_address_spaces.asciidoc
+14-16Lines changed: 14 additions & 16 deletions
Original file line number
Diff line number
Diff line change
@@ -11,9 +11,6 @@ NOTE: Khronos(R) is a registered trademark and SYCL(TM) and SPIR(TM) are tradema
11
11
NOTE: This document is better viewed when rendered as html with asciidoctor. GitHub does not render image icons.
12
12
This document describes an extension to the SYCL USM extension that adds new explicit address spaces for the possible locations that USM pointers can be allocated. Users can create pointers that point into these address spaces explicitly in order to pass additional information to their compiler so as to enable optimizations.
13
13
14
-
== Name Strings
15
-
+SYCL_EXT_INTEL_USM_ADDRESS_SPACES+
16
-
17
14
== Notice
18
15
Copyright (c) 2020 Intel Corporation. All rights reserved.
19
16
@@ -28,11 +25,11 @@ Because the interfaces defined by this specification are not final and are subje
28
25
== Version
29
26
30
27
Built On: {docdate} +
31
-
Revision: 1
28
+
Revision: B
32
29
33
30
== Dependencies
34
31
35
-
This extension is written against the SYCL 1.2.1 specification, Revision 7. It requires the Unified Shared Memory SYCL proposal.
32
+
This extension is written against the SYCL 2020 specification, Revision 3.
36
33
37
34
If SPIR-V is used by the implementation, this extension also requires support for the SPV_INTEL_usm_storage_classes SPIR-V extension.
38
35
@@ -61,9 +58,9 @@ The goal of this division of the global address space is to enable users to expl
61
58
While automatic address space inference is often possible for accessors, it is harder for USM pointers as it requires inter-procedural optimization with the host code.
62
59
This additional information can be particularly beneficial on FPGA targets where knowing that a pointer only ever accesses host or device memory can allow compilers to produce more area efficient memory-accessing hardware.
63
60
64
-
== Modifications to the SYCL Specification, Version 1.2.1 revision 7
61
+
== Modifications to the SYCL Specification, Version 2020 revision 3
65
62
66
-
=== Section 3.5.2 SYCL Device Memory Model
63
+
=== Section 3.8.2 SYCL Device Memory Model
67
64
68
65
Add to the end of the definition of global memory:
69
66
Global memory is a virtual address space which overlaps the device and host address spaces.
@@ -74,21 +71,22 @@ Add two new memory regions as follows:
74
71
75
72
*Host memory* is a sub-region of global memory. USM pointers allocated with the host alloc type reside in this address space.
76
73
77
-
=== Section 3.5.2.1 Access to memory
74
+
=== Section 3.8.2.1 Access to memory
78
75
79
-
In the second last paragraph, add cl::sycl::device_ptr and cl::sycl::host_ptr to the list of explicit pointer classes.
76
+
In the second last paragraph, add sycl::device_ptr and sycl::host_ptr to the list of explicit pointer classes.
80
77
81
78
=== Section 4.7.7.1 Multi-pointer Class
82
79
83
80
In the overview of the multi_ptr class replace the address_space enum with the following:
84
81
```c++
85
82
enum class address_space : int {
86
-
global_space,
87
-
local_space,
88
-
constant_space,
89
-
private_space,
90
-
ext_intel_global_device_space,
91
-
ext_intel_global_host_space
83
+
global_space,
84
+
local_space,
85
+
constant_space, // Deprecated in SYCL 2020
86
+
private_space,
87
+
generic_space,
88
+
ext_intel_global_device_space,
89
+
ext_intel_global_host_space
92
90
};
93
91
```
94
92
@@ -99,7 +97,7 @@ Add the following new conversion operator:
0 commit comments