Skip to content

Commit 356e2ae

Browse files
author
Aaron Greig
committed
Explicitly define which info queries are optional.
This is now reflected in the spec and in the CTS tests. Also includes a number of minor fixes for adapter implementations of related info queries.
1 parent eca90a9 commit 356e2ae

57 files changed

Lines changed: 517 additions & 229 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

include/ur_api.h

Lines changed: 47 additions & 43 deletions
Large diffs are not rendered by default.

scripts/YaML.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ plural form *enumerators* is abbreviated to `etors`.
336336
- An etor requires the following scalar fields: {`name`, `desc`}
337337
+ `desc` will be used as the etors's description comment
338338
+ If the enum has `typed_etors`, `desc` must begin with type identifier: {`"[type]"`}
339+
+ `desc` may contain the [optional-query] annotation. This denotes the etor as an info query which is optional for adapters to implement, and may legally result in a non-success error code.
339340
+ `name` must be a unique ISO-C standard identifier, and be all caps
340341
- An etor may take the following optional scalar field: {`value`, `version`}
341342
+ `value` must be an ISO-C standard identifier

scripts/core/PROG.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,24 @@ explicitly created against a context.
183183
// Release the context handle
184184
${x}ContextRelease(hContext);
185185
186+
Object Queries
187+
==============
188+
189+
Queries to get information from API objects follow a common pattern. The entry
190+
points for this are generally of the form:
191+
192+
.. code-block::
193+
194+
ObjectGetInfo(ur_object_handle_t hObject, ur_object_info_t propName,
195+
size_t propSize, void *pPropValue, size_t *pPropSizeRet)
196+
197+
where ``propName`` selects the information to query out. The object info enum
198+
representing possible queries will generally be found in the enums section of
199+
the relevant object. Some info queries would be difficult or impossible to
200+
support for certain backends, these are denoted with [optional-query] in the
201+
enum description. Using any enum marked optional in this way may result in
202+
${X}_RESULT_ERROR_UNSUPPORTED_ENUMERATION if the adapter doesn't support it.
203+
186204
Programs and Kernels
187205
====================
188206

scripts/core/context.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,16 @@ etors:
102102
- name: USM_FILL2D_SUPPORT
103103
desc: "[$x_bool_t] to indicate if the $xEnqueueUSMFill2D entrypoint is supported."
104104
- name: ATOMIC_MEMORY_ORDER_CAPABILITIES
105-
desc: "[$x_memory_order_capability_flags_t] return a bit-field of atomic memory order capabilities."
105+
desc: "[$x_memory_order_capability_flags_t][optional-query] return a bit-field of atomic memory order capabilities."
106106
- name: ATOMIC_MEMORY_SCOPE_CAPABILITIES
107-
desc: "[$x_memory_scope_capability_flags_t] return a bit-field of atomic memory scope capabilities."
107+
desc: "[$x_memory_scope_capability_flags_t][optional-query] return a bit-field of atomic memory scope capabilities."
108108
- name: ATOMIC_FENCE_ORDER_CAPABILITIES
109109
desc: |
110-
[$x_memory_order_capability_flags_t] return a bit-field of atomic memory fence order capabilities.
110+
[$x_memory_order_capability_flags_t][optional-query] return a bit-field of atomic memory fence order capabilities.
111111
Zero is returned if the backend does not support context-level fences.
112112
- name: ATOMIC_FENCE_SCOPE_CAPABILITIES
113113
desc: |
114-
[$x_memory_scope_capability_flags_t] return a bit-field of atomic memory fence scope capabilities.
114+
[$x_memory_scope_capability_flags_t][optional-query] return a bit-field of atomic memory fence scope capabilities.
115115
Zero is returned if the backend does not support context-level fences.
116116
--- #--------------------------------------------------------------------------
117117
type: function

scripts/core/device.yml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ etors:
200200
- name: VENDOR_ID
201201
desc: "[uint32_t] vendor Id of the device"
202202
- name: DEVICE_ID
203-
desc: "[uint32_t] Id of the device"
203+
desc: "[uint32_t][optional-query] Id of the device"
204204
- name: MAX_COMPUTE_UNITS
205205
desc: "[uint32_t] the number of compute units"
206206
- name: MAX_WORK_ITEM_DIMENSIONS
@@ -248,7 +248,7 @@ etors:
248248
- name: MAX_CLOCK_FREQUENCY
249249
desc: "[uint32_t] max clock frequency in MHz"
250250
- name: MEMORY_CLOCK_RATE
251-
desc: "[uint32_t] memory clock frequency in MHz"
251+
desc: "[uint32_t][optional-query] memory clock frequency in MHz"
252252
- name: ADDRESS_BITS
253253
desc: "[uint32_t] address bits"
254254
- name: MAX_MEM_ALLOC_SIZE
@@ -290,7 +290,7 @@ etors:
290290
- name: GLOBAL_MEM_SIZE
291291
desc: "[uint64_t] size of global memory in bytes"
292292
- name: GLOBAL_MEM_FREE
293-
desc: "[uint64_t] size of global memory which is free in bytes"
293+
desc: "[uint64_t][optional-query] size of global memory which is free in bytes"
294294
- name: MAX_CONSTANT_BUFFER_SIZE
295295
desc: "[uint64_t] max constant buffer size in bytes"
296296
- name: MAX_CONSTANT_ARGS
@@ -377,23 +377,23 @@ etors:
377377
- name: USM_SYSTEM_SHARED_SUPPORT
378378
desc: "[$x_device_usm_access_capability_flags_t] support USM system wide shared memory access"
379379
- name: UUID
380-
desc: "[uint8_t[]] return device UUID"
380+
desc: "[uint8_t[]][optional-query] return device UUID"
381381
- name: PCI_ADDRESS
382-
desc: "[char[]] return device PCI address"
382+
desc: "[char[]][optional-query] return device PCI address"
383383
- name: GPU_EU_COUNT
384-
desc: "[uint32_t] return Intel GPU EU count"
384+
desc: "[uint32_t][optional-query] return Intel GPU EU count"
385385
- name: GPU_EU_SIMD_WIDTH
386-
desc: "[uint32_t] return Intel GPU EU SIMD width"
386+
desc: "[uint32_t][optional-query] return Intel GPU EU SIMD width"
387387
- name: GPU_EU_SLICES
388-
desc: "[uint32_t] return Intel GPU number of slices"
388+
desc: "[uint32_t][optional-query] return Intel GPU number of slices"
389389
- name: GPU_EU_COUNT_PER_SUBSLICE
390-
desc: "[uint32_t] return Intel GPU EU count per subslice"
390+
desc: "[uint32_t][optional-query] return Intel GPU EU count per subslice"
391391
- name: GPU_SUBSLICES_PER_SLICE
392-
desc: "[uint32_t] return Intel GPU number of subslices per slice"
392+
desc: "[uint32_t][optional-query] return Intel GPU number of subslices per slice"
393393
- name: GPU_HW_THREADS_PER_EU
394-
desc: "[uint32_t] return Intel GPU number of threads per EU"
394+
desc: "[uint32_t][optional-query] return Intel GPU number of threads per EU"
395395
- name: MAX_MEMORY_BANDWIDTH
396-
desc: "[uint32_t] return max memory bandwidth in Mb/s"
396+
desc: "[uint32_t][optional-query] return max memory bandwidth in Mb/s"
397397
- name: IMAGE_SRGB
398398
desc: "[$x_bool_t] device supports sRGB images"
399399
- name: BUILD_ON_SUBDEVICE
@@ -418,7 +418,7 @@ etors:
418418
- name: KERNEL_SET_SPECIALIZATION_CONSTANTS
419419
desc: "[$x_bool_t] support the $xKernelSetSpecializationConstants entry point"
420420
- name: MEMORY_BUS_WIDTH
421-
desc: "[uint32_t] return the width in bits of the memory bus interface of the device."
421+
desc: "[uint32_t][optional-query] return the width in bits of the memory bus interface of the device."
422422
- name: MAX_WORK_GROUPS_3D
423423
desc: "[size_t[3]] return max 3D work groups"
424424
- name: ASYNC_BARRIER
@@ -428,17 +428,17 @@ etors:
428428
- name: HOST_PIPE_READ_WRITE_SUPPORTED
429429
desc: "[$x_bool_t] Return true if the device supports enqueueing commands to read and write pipes from the host."
430430
- name: MAX_REGISTERS_PER_WORK_GROUP
431-
desc: "[uint32_t] The maximum number of registers available per block."
431+
desc: "[uint32_t][optional-query] The maximum number of registers available per block."
432432
- name: IP_VERSION
433-
desc: "[uint32_t] The device IP version. The meaning of the device IP version is implementation-defined, but newer devices should have a higher version than older devices."
433+
desc: "[uint32_t][optional-query] The device IP version. The meaning of the device IP version is implementation-defined, but newer devices should have a higher version than older devices."
434434
- name: VIRTUAL_MEMORY_SUPPORT
435435
desc: "[$x_bool_t] return true if the device supports virtual memory."
436436
- name: ESIMD_SUPPORT
437437
desc: "[$x_bool_t] return true if the device supports ESIMD."
438438
- name: COMPONENT_DEVICES
439-
desc: "[$x_device_handle_t[]] The set of component devices contained by this composite device."
439+
desc: "[$x_device_handle_t[]][optional-query] The set of component devices contained by this composite device."
440440
- name: COMPOSITE_DEVICE
441-
desc: "[$x_device_handle_t] The composite device containing this component device."
441+
desc: "[$x_device_handle_t][optional-query] The composite device containing this component device."
442442
- name: GLOBAL_VARIABLE_SUPPORT
443443
desc: "[$x_bool_t] return true if the device supports the `EnqueueDeviceGlobalVariableWrite` and `EnqueueDeviceGlobalVariableRead` entry points."
444444
- name: USM_POOL_SUPPORT

scripts/core/kernel.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ etors:
124124
- name: ATTRIBUTES
125125
desc: "[char[]] Return null-terminated kernel attributes string."
126126
- name: NUM_REGS
127-
desc: "[uint32_t] Return the number of registers used by the compiled kernel (device specific)."
127+
desc: "[uint32_t][optional-query] Return the number of registers used by the compiled kernel."
128128
--- #--------------------------------------------------------------------------
129129
type: enum
130130
desc: "Get Kernel Work Group information"
@@ -133,7 +133,7 @@ name: $x_kernel_group_info_t
133133
typed_etors: True
134134
etors:
135135
- name: GLOBAL_WORK_SIZE
136-
desc: "[size_t[3]] Return Work Group maximum global size"
136+
desc: "[size_t[3]][optional-query] Return Work Group maximum global size"
137137
- name: WORK_GROUP_SIZE
138138
desc: "[size_t] Return maximum Work Group size"
139139
- name: COMPILE_WORK_GROUP_SIZE
@@ -146,12 +146,12 @@ etors:
146146
desc: "[size_t] Return minimum amount of private memory in bytes used by each work item in the Kernel"
147147
- name: COMPILE_MAX_WORK_GROUP_SIZE
148148
desc: |
149-
[size_t[3]] Return the maximum Work Group size guaranteed by the
150-
source code, or (0, 0, 0) if unspecified
149+
[size_t[3]][optional-query] Return the maximum Work Group size guaranteed
150+
by the source code, or (0, 0, 0) if unspecified
151151
- name: COMPILE_MAX_LINEAR_WORK_GROUP_SIZE
152152
desc: |
153-
[size_t] Return the maximum linearized Work Group size (X * Y * Z)
154-
guaranteed by the source code, or 0 if unspecified
153+
[size_t][optional-query] Return the maximum linearized Work Group size
154+
(X * Y * Z) guaranteed by the source code, or 0 if unspecified
155155
--- #--------------------------------------------------------------------------
156156
type: enum
157157
desc: "Get Kernel SubGroup information"

scripts/core/program.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,9 +387,9 @@ etors:
387387
- name: BINARIES
388388
desc: "[unsigned char[]] Return program binaries for all devices for this Program."
389389
- name: NUM_KERNELS
390-
desc: "[size_t] Number of kernels in Program, return type size_t."
390+
desc: "[size_t][optional-query] Number of kernels in Program, return type size_t."
391391
- name: KERNEL_NAMES
392-
desc: "[char[]] Return a null-terminated, semi-colon separated list of kernel names in Program."
392+
desc: "[char[]][optional-query] Return a null-terminated, semi-colon separated list of kernel names in Program."
393393
--- #--------------------------------------------------------------------------
394394
type: function
395395
desc: "Query information about a Program object"

scripts/core/queue.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ etors:
3737
if the queue was created with the `ON_DEVICE` queue flag, otherwise
3838
`$xQueueGetInfo` will return `$X_RESULT_ERROR_INVALID_QUEUE`.
3939
- name: EMPTY
40-
desc: "[$x_bool_t] return true if the queue was empty at the time of the query"
40+
desc: "[$x_bool_t][optional-query] return true if the queue was empty at the time of the query."
4141
--- #--------------------------------------------------------------------------
4242
type: enum
4343
desc: "Queue property flags"

scripts/core/usm.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ etors:
7474
- name: DEVICE
7575
desc: "[$x_device_handle_t] Memory allocation device info"
7676
- name: POOL
77-
desc: "[$x_usm_pool_handle_t] Memory allocation pool info"
77+
desc: "[$x_usm_pool_handle_t][optional-query] Memory allocation pool info"
7878
--- #--------------------------------------------------------------------------
7979
type: enum
8080
desc: "USM memory advice"

scripts/generate_code.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,3 +548,24 @@ def generate_level_zero_queue_api(path, section, namespace, tags, version, specs
548548
specs=specs,
549549
meta=meta)
550550
print("QUEUE Generated %s lines of code.\n" % loc)
551+
552+
"""
553+
Entry-point:
554+
generates headers used by the CTS, for example containing meta-information
555+
about info query enums
556+
"""
557+
def generate_cts_headers(path, section, namespace, tags, version, specs, meta):
558+
template = "optional_queries.h.mako"
559+
fin = os.path.join("templates", template)
560+
name = "optional_queries"
561+
filename = "optional_queries.h"
562+
dstpath = os.path.join(path, "conformance", "testing", "include", "uur")
563+
fout = os.path.join(dstpath, filename)
564+
565+
print("Generating %s..." % fout)
566+
567+
loc = util.makoWrite(fin, fout,
568+
filename = name, namespace = namespace,
569+
tags = tags, specs = specs, meta = meta)
570+
571+
print("CTS Generated %s lines of code.\n" % loc)

0 commit comments

Comments
 (0)