Skip to content

Commit 17b5a6d

Browse files
authored
Merge pull request #2322 from IntelPython/use_return_tuple
Return tuple instead of list from device and platform collection APIs
2 parents 7336e73 + 367f7b7 commit 17b5a6d

8 files changed

Lines changed: 67 additions & 65 deletions

dpctl/_sycl_context.pyx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ cdef class SyclContext(_SyclContext):
153153
sub_devices = cpu_d.create_sub_devices(partition=2)
154154
# Create a context common to all the sub-devices.
155155
ctx = dpctl.SyclContext(sub_devices)
156-
assert(len(ctx.get_devices) == len(sub_devices))
156+
assert(len(ctx.get_devices()) == len(sub_devices))
157157
158158
- Invoking the constructor with a named ``PyCapsule`` with name
159159
**"SyclContextRef"** that carries a pointer to a ``sycl::context``
@@ -388,12 +388,12 @@ cdef class SyclContext(_SyclContext):
388388

389389
def get_devices(self):
390390
"""
391-
Returns the list of :class:`dpctl.SyclDevice` objects associated with
391+
Returns a tuple of :class:`dpctl.SyclDevice` objects associated with
392392
:class:`dpctl.SyclContext` instance.
393393
394394
Returns:
395-
list:
396-
A :obj:`list` of :class:`dpctl.SyclDevice` objects
395+
Tuple[:class:`dpctl.SyclDevice`]:
396+
A tuple of :class:`dpctl.SyclDevice` objects
397397
that belong to this context.
398398
399399
Raises:
@@ -415,7 +415,7 @@ cdef class SyclContext(_SyclContext):
415415
DRef = DPCTLDeviceVector_GetAt(DVRef, i)
416416
devices.append(SyclDevice._create(DRef))
417417
DPCTLDeviceVector_Delete(DVRef)
418-
return devices
418+
return tuple(devices)
419419

420420
@property
421421
def device_count(self):

dpctl/_sycl_device.pxd

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ cdef public api class SyclDevice(_SyclDevice) [
5151
cdef int _init_from__SyclDevice(self, _SyclDevice other)
5252
cdef int _init_from_selector(self, DPCTLSyclDeviceSelectorRef DSRef)
5353
cdef DPCTLSyclDeviceRef get_device_ref(self)
54-
cdef list create_sub_devices_equally(self, size_t count)
55-
cdef list create_sub_devices_by_counts(self, object counts)
56-
cdef list create_sub_devices_by_affinity(
54+
cdef tuple create_sub_devices_equally(self, size_t count)
55+
cdef tuple create_sub_devices_by_counts(self, object counts)
56+
cdef tuple create_sub_devices_by_affinity(
5757
self, _partition_affinity_domain_type domain
5858
)
5959
cdef cpp_bool equals(self, SyclDevice q)

dpctl/_sycl_device.pyx

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ cdef class _SyclDevice:
157157
DPCTLSize_t_Array_Delete(self._max_work_item_sizes)
158158

159159

160-
cdef list _get_devices(DPCTLDeviceVectorRef DVRef):
160+
cdef tuple _get_devices(DPCTLDeviceVectorRef DVRef):
161161
"""
162162
Deletes DVRef. Pass a copy in case an original reference is needed.
163163
"""
@@ -171,7 +171,7 @@ cdef list _get_devices(DPCTLDeviceVectorRef DVRef):
171171
devices.append(D)
172172
DPCTLDeviceVector_Delete(DVRef)
173173

174-
return devices
174+
return tuple(devices)
175175

176176

177177
cdef str _backend_type_to_filter_string_part(_backend_type BTy):
@@ -1188,7 +1188,7 @@ cdef class SyclDevice(_SyclDevice):
11881188

11891189
@property
11901190
def sub_group_sizes(self):
1191-
""" Returns list of supported sub-group sizes for this device.
1191+
""" Returns tuple of supported sub-group sizes for this device.
11921192
11931193
:Example:
11941194
@@ -1197,11 +1197,11 @@ cdef class SyclDevice(_SyclDevice):
11971197
>>> import dpctl
11981198
>>> dev = dpctl.select_cpu_device()
11991199
>>> dev.sub_group_sizes
1200-
[4, 8, 16, 32, 64]
1200+
(4, 8, 16, 32, 64)
12011201
12021202
Returns:
1203-
List[int]:
1204-
List of supported sub-group sizes.
1203+
Tuple[int]:
1204+
Tuple of supported sub-group sizes.
12051205
"""
12061206
cdef size_t *sg_sizes = NULL
12071207
cdef size_t sg_sizes_len = 0
@@ -1214,9 +1214,9 @@ cdef class SyclDevice(_SyclDevice):
12141214
for i in range(sg_sizes_len):
12151215
res.append(sg_sizes[i])
12161216
DPCTLSize_t_Array_Delete(sg_sizes)
1217-
return res
1217+
return tuple(res)
12181218
else:
1219-
return []
1219+
return ()
12201220

12211221
@property
12221222
def sycl_platform(self):
@@ -1590,11 +1590,11 @@ cdef class SyclDevice(_SyclDevice):
15901590
"""
15911591
return DPCTLDevice_Hash(self._device_ref)
15921592

1593-
cdef list create_sub_devices_equally(self, size_t count):
1594-
""" Returns a list of sub-devices partitioned from this SYCL device
1593+
cdef tuple create_sub_devices_equally(self, size_t count):
1594+
""" Returns a tuple of sub-devices partitioned from this SYCL device
15951595
based on the ``count`` parameter.
15961596
1597-
The returned list contains as many sub-devices as can be created
1597+
The returned tuple contains as many sub-devices as can be created
15981598
such that each sub-device contains count compute units. If the
15991599
device’s total number of compute units is not evenly divided by
16001600
count, then the remaining compute units are not included in any of
@@ -1605,7 +1605,7 @@ cdef class SyclDevice(_SyclDevice):
16051605
Number of sub-devices to partition into.
16061606
16071607
Returns:
1608-
List[:class:`dpctl.SyclDevice`]:
1608+
Tuple[:class:`dpctl.SyclDevice`]:
16091609
Created sub-devices.
16101610
16111611
Raises:
@@ -1623,15 +1623,15 @@ cdef class SyclDevice(_SyclDevice):
16231623
)
16241624
return _get_devices(DVRef)
16251625

1626-
cdef list create_sub_devices_by_counts(self, object counts):
1627-
""" Returns a list of sub-devices partitioned from this SYCL device
1626+
cdef tuple create_sub_devices_by_counts(self, object counts):
1627+
""" Returns a tuple of sub-devices partitioned from this SYCL device
16281628
based on the ``counts`` parameter.
16291629
16301630
For each non-zero value ``M`` in the counts vector, a sub-device
16311631
with ``M`` compute units is created.
16321632
16331633
Returns:
1634-
List[:class:`dpctl.SyclDevice`]:
1634+
Tuple[:class:`dpctl.SyclDevice`]:
16351635
Created sub-devices.
16361636
16371637
Raises:
@@ -1670,14 +1670,14 @@ cdef class SyclDevice(_SyclDevice):
16701670
)
16711671
return _get_devices(DVRef)
16721672

1673-
cdef list create_sub_devices_by_affinity(
1673+
cdef tuple create_sub_devices_by_affinity(
16741674
self, _partition_affinity_domain_type domain
16751675
):
1676-
""" Returns a list of sub-devices partitioned from this SYCL device by
1676+
""" Returns a tuple of sub-devices partitioned from this SYCL device by
16771677
affinity domain based on the ``domain`` parameter.
16781678
16791679
Returns:
1680-
List[:class:`dpctl.SyclDevice`]:
1680+
Tuple[:class:`dpctl.SyclDevice`]:
16811681
Created sub-devices.
16821682
16831683
Raises:
@@ -1692,8 +1692,8 @@ cdef class SyclDevice(_SyclDevice):
16921692

16931693
def create_sub_devices(self, **kwargs):
16941694
"""create_sub_devices(partition=partition_spec)
1695-
Creates a list of sub-devices by partitioning a root device based on the
1696-
provided partition specifier.
1695+
Creates a tuple of sub-devices by partitioning a root device based on
1696+
the provided partition specifier.
16971697
16981698
A partition specifier must be provided using a ``partition``
16991699
keyword argument. Possible values for the specifier are: an integer, a
@@ -1725,7 +1725,7 @@ cdef class SyclDevice(_SyclDevice):
17251725
Specification to partition the device as follows:
17261726
17271727
- Specifying an int (``count``)
1728-
The returned list contains as
1728+
The returned tuple contains as
17291729
many sub-devices as can be created such that each
17301730
sub-device contains ``count`` compute units. If the
17311731
device’s total number of compute units is not evenly
@@ -1742,7 +1742,7 @@ cdef class SyclDevice(_SyclDevice):
17421742
sub-device with ``M`` compute units is created.
17431743
17441744
Returns:
1745-
List[:class:`dpctl.SyclDevice`]:
1745+
Tuple[:class:`dpctl.SyclDevice`]:
17461746
Created sub-devices.
17471747
17481748
Raises:
@@ -1831,14 +1831,14 @@ cdef class SyclDevice(_SyclDevice):
18311831
return SyclDevice._create(CDRef)
18321832

18331833
def component_devices(self):
1834-
""" Returns a list of component devices contained in this SYCL device.
1834+
""" Returns a tuple of component devices contained in this SYCL device.
18351835
1836-
The returned list will be empty if this SYCL device is not a composite
1836+
The returned tuple will be empty if this SYCL device is not a composite
18371837
device, i.e., if `is_composite` is ``False``.
18381838
18391839
Returns:
1840-
List[:class:`dpctl.SyclDevice`]:
1841-
List of component devices.
1840+
Tuple[:class:`dpctl.SyclDevice`]:
1841+
Tuple of component devices.
18421842
18431843
Raises:
18441844
ValueError:

dpctl/_sycl_device_factory.pxd

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
# cython: language_level=3
1919

2020
""" The file declares several helper functions to create SyclDevice objects
21-
from SYCL standard device_selectors, to get a list of SyclDevices for a
21+
from SYCL standard device_selectors, to get a tuple of SyclDevices for a
2222
specific backend or device_type.
2323
"""
2424

@@ -31,8 +31,8 @@ cpdef SyclDevice select_accelerator_device()
3131
cpdef SyclDevice select_cpu_device()
3232
cpdef SyclDevice select_default_device()
3333
cpdef SyclDevice select_gpu_device()
34-
cpdef list get_devices(backend=*, device_type=*)
35-
cpdef list get_composite_devices()
34+
cpdef tuple get_devices(backend=*, device_type=*)
35+
cpdef tuple get_composite_devices()
3636
cpdef int get_num_devices(backend=*, device_type=*)
3737
cpdef cpp_bool has_gpu_devices()
3838
cpdef cpp_bool has_cpu_devices()

dpctl/_sycl_device_factory.pyx

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
2323
- wrapper functions to create a SyclDevice from the standard SYCL
2424
device selector classes.
25-
- functions to return a list of devices based on a specified device_type or
25+
- functions to return a tuple of devices based on a specified device_type or
2626
backend_type combination.
2727
"""
2828

@@ -133,7 +133,7 @@ cdef _device_type _enum_to_dpctl_sycl_device_ty(DTy):
133133
return _device_type._UNKNOWN_DEVICE
134134

135135

136-
cdef list _get_devices(DPCTLDeviceVectorRef DVRef):
136+
cdef tuple _get_devices(DPCTLDeviceVectorRef DVRef):
137137
cdef list devices = []
138138
cdef size_t nelems = 0
139139
if DVRef:
@@ -143,12 +143,14 @@ cdef list _get_devices(DPCTLDeviceVectorRef DVRef):
143143
D = SyclDevice._create(DRef)
144144
devices.append(D)
145145

146-
return devices
146+
return tuple(devices)
147147

148148

149-
cpdef list get_devices(backend=backend_type.all, device_type=device_type_t.all):
149+
cpdef tuple get_devices(
150+
backend=backend_type.all, device_type=device_type_t.all
151+
):
150152
"""
151-
Returns a list of :class:`dpctl.SyclDevice` instances selected based on
153+
Returns a tuple of :class:`dpctl.SyclDevice` instances selected based on
152154
the given :class:`dpctl.device_type` and :class:`dpctl.backend_type` values.
153155
154156
The function is analogous to ``sycl::devices::get_devices()``, but with an
@@ -167,15 +169,15 @@ cpdef list get_devices(backend=backend_type.all, device_type=device_type_t.all):
167169
"gpu", "cpu", "accelerator", or "all".
168170
Default: ``dpctl.device_type.all``.
169171
Returns:
170-
list:
171-
A list of available :class:`dpctl.SyclDevice` instances that
172+
Tuple[:class:`dpctl.SyclDevice`]:
173+
A tuple of available :class:`dpctl.SyclDevice` instances that
172174
satisfy the provided :class:`dpctl.backend_type` and
173175
:class:`dpctl.device_type` values.
174176
"""
175177
cdef _backend_type BTy = _backend_type._ALL_BACKENDS
176178
cdef _device_type DTy = _device_type._ALL_DEVICES
177179
cdef DPCTLDeviceVectorRef DVRef = NULL
178-
cdef list devices
180+
cdef tuple devices
179181

180182
if isinstance(backend, str):
181183
BTy = _string_to_dpctl_sycl_backend_ty(backend)
@@ -204,9 +206,9 @@ cpdef list get_devices(backend=backend_type.all, device_type=device_type_t.all):
204206
return devices
205207

206208

207-
cpdef list get_composite_devices():
209+
cpdef tuple get_composite_devices():
208210
"""
209-
Returns a list of the available composite :class:`dpctl.SyclDevice`
211+
Returns a tuple of the available composite :class:`dpctl.SyclDevice`
210212
instances.
211213
212214
Only available when `ZE_FLAT_DEVICE_HIERARCHY=COMBINED` is set in
@@ -219,11 +221,11 @@ cpdef list get_composite_devices():
219221
https://github.com/intel/llvm/blob/sycl/sycl/doc/extensions/experimental/sycl_ext_oneapi_composite_device.asciidoc
220222
221223
Returns:
222-
list:
223-
A list of available composite :class:`dpctl.SyclDevice` instances.
224+
Tuple[:class:`dpctl.SyclDevice`]:
225+
A tuple of available composite :class:`dpctl.SyclDevice` instances.
224226
"""
225227
cdef DPCTLDeviceVectorRef DVRef = NULL
226-
cdef list composite_devices
228+
cdef tuple composite_devices
227229

228230
DVRef = DPCTLDeviceMgr_GetCompositeDevices()
229231
composite_devices = _get_devices(DVRef)

dpctl/_sycl_platform.pxd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,4 @@ cdef class SyclPlatform(_SyclPlatform):
4545
cdef bool equals(self, SyclPlatform)
4646

4747

48-
cpdef list get_platforms()
48+
cpdef tuple get_platforms()

dpctl/_sycl_platform.pyx

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ cdef class SyclPlatform(_SyclPlatform):
378378

379379
def get_devices(self, device_type=device_type_t.all):
380380
"""
381-
Returns the list of :class:`dpctl.SyclDevice` objects associated with
381+
Returns a tuple of :class:`dpctl.SyclDevice` objects associated with
382382
:class:`dpctl.SyclPlatform` instance selected based on
383383
the given :class:`dpctl.device_type`.
384384
@@ -391,8 +391,8 @@ cdef class SyclPlatform(_SyclPlatform):
391391
Default: ``dpctl.device_type.all``.
392392
393393
Returns:
394-
list:
395-
A :obj:`list` of :class:`dpctl.SyclDevice` objects
394+
Tuple[:class:`dpctl.SyclDevice`]:
395+
A tuple of :class:`dpctl.SyclDevice` objects
396396
that belong to this platform.
397397
398398
Raises:
@@ -455,16 +455,16 @@ cdef class SyclPlatform(_SyclPlatform):
455455
devices.append(SyclDevice._create(DRef))
456456
DPCTLDeviceVector_Delete(DVRef)
457457

458-
return devices
458+
return tuple(devices)
459459

460460
def get_composite_devices(self):
461461
"""
462-
Returns the list of composite :class:`dpctl.SyclDevice` objects
462+
Returns a tuple of composite :class:`dpctl.SyclDevice` objects
463463
associated with :class:`dpctl.SyclPlatform` instance.
464464
465465
Returns:
466-
list:
467-
A :obj:`list` of composite :class:`dpctl.SyclDevice` objects
466+
Tuple[:class:`dpctl.SyclDevice`]:
467+
A tuple of composite :class:`dpctl.SyclDevice` objects
468468
that belong to this platform.
469469
470470
Raises:
@@ -487,7 +487,7 @@ cdef class SyclPlatform(_SyclPlatform):
487487
composite_devices.append(SyclDevice._create(DRef))
488488
DPCTLDeviceVector_Delete(DVRef)
489489

490-
return composite_devices
490+
return tuple(composite_devices)
491491

492492

493493
def lsplatform(verbosity=0):
@@ -596,13 +596,13 @@ def lsplatform(verbosity=0):
596596
DPCTLPlatformVector_Delete(PVRef)
597597

598598

599-
cpdef list get_platforms():
599+
cpdef tuple get_platforms():
600600
"""
601-
Returns a list of all available SYCL platforms on the system.
601+
Returns a tuple of all available SYCL platforms on the system.
602602
603603
Returns:
604-
List[:class:`.SyclPlatform`]:
605-
A list of SYCL platforms on the system.
604+
Tuple[:class:`.SyclPlatform`]:
605+
A tuple of SYCL platforms on the system.
606606
"""
607607
cdef list platforms = []
608608
cdef DPCTLPlatformVectorRef PVRef = NULL
@@ -617,4 +617,4 @@ cpdef list get_platforms():
617617
platforms.append(P)
618618

619619
DPCTLPlatformVector_Delete(PVRef)
620-
return platforms
620+
return tuple(platforms)

0 commit comments

Comments
 (0)