Skip to content

Commit fb1fbb2

Browse files
author
Diptorup Deb
committed
bring back has_{cpu|gpu}_queues
1 parent 14bf63f commit fb1fbb2

File tree

5 files changed

+118
-54
lines changed

5 files changed

+118
-54
lines changed

dpctl/sycl_core.pyx

Lines changed: 82 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ cdef class SyclKernelInvalidRangeError (Exception):
7979
'''
8080
pass
8181

82+
cdef class SyclQueueCreationError (Exception):
83+
'''This exception is raised when a range that has more than three
84+
dimensions or less than one dimension.
85+
'''
86+
pass
8287

8388
cdef class SyclContext:
8489

@@ -479,29 +484,55 @@ cdef class SyclQueue:
479484
cdef class _SyclRTManager:
480485
''' Wrapper for the C API's sycl queue manager interface.
481486
'''
482-
cdef dict _backend_ty_dict
483-
cdef dict _device_ty_dict
487+
cdef dict _backend_str_ty_dict
488+
cdef dict _device_str_ty_dict
489+
cdef dict _backend_enum_ty_dict
490+
cdef dict _device_enum_ty_dict
484491

485492
def __cinit__ (self):
486493

487-
self._backend_ty_dict = {
488-
"opencl": _backend_type._OPENCL,
489-
"level0": _backend_type._LEVEL_ZERO
494+
self._backend_str_ty_dict = {
495+
"opencl" : _backend_type._OPENCL,
496+
"level0" : _backend_type._LEVEL_ZERO,
497+
}
498+
499+
self._device_str_ty_dict = {
500+
"gpu" : _device_type._GPU,
501+
"cpu" : _device_type._CPU,
502+
}
503+
504+
self._backend_enum_ty_dict = {
505+
backend_type.opencl : _backend_type._OPENCL,
506+
backend_type.level_zero : _backend_type._LEVEL_ZERO,
490507
}
491508

492-
self._device_ty_dict = {
493-
"gpu": _device_type._GPU,
494-
"cpu": _device_type._CPU,
509+
self._device_enum_ty_dict = {
510+
device_type.cpu : _device_type._CPU,
511+
device_type.gpu : _device_type._GPU,
495512
}
496513

514+
cdef _raise_queue_creation_error (self, str be, str dev, int devid, fname):
515+
e = SyclQueueCreationError(
516+
"Queue creation failed for :", be, dev, devid
517+
)
518+
e.fname = fname
519+
e.code = -1
520+
raise e
521+
522+
497523
def _set_as_current_queue (self, backend_ty, device_ty, device_id):
498524
cdef DPPLSyclQueueRef queue_ref
499525

500526
try :
501-
beTy = self._backend_ty_dict[backend_ty]
527+
beTy = self._backend_str_ty_dict[backend_ty]
502528
try :
503-
devTy = self._device_ty_dict[device_ty]
529+
devTy = self._device_str_ty_dict[device_ty]
504530
queue_ref = DPPLQueueMgr_PushQueue(beTy, devTy, device_id)
531+
if queue_ref is NULL:
532+
self._raise_queue_creation_error(
533+
backend_ty, device_ty, device_id,
534+
"DPPLQueueMgr_PushQueue"
535+
)
505536
return SyclQueue._create(queue_ref)
506537
except KeyError:
507538
raise UnsupportedDeviceError("Device can only be gpu or cpu")
@@ -553,17 +584,52 @@ cdef class _SyclRTManager:
553584
def get_num_queues (self, backend_ty, device_ty):
554585
cdef size_t num = 0
555586
try :
556-
beTy = self._backend_ty_dict[backend_ty]
587+
beTy = self._backend_enum_ty_dict[backend_ty]
557588
try :
558-
devTy = self._device_ty_dict[device_ty]
589+
devTy = self._device_enum_ty_dict[device_ty]
559590
num = DPPLQueueMgr_GetNumQueues(beTy, devTy)
560591
except KeyError:
561-
print("Device can only be gpu or cpu")
592+
raise UnsupportedDeviceError(
593+
"Device can only be device_type.gpu or device_type.cpu"
594+
)
562595
except KeyError:
563-
print("Backend can only be opencl or level-0")
596+
raise UnsupportedBackendError(
597+
"Backend can only be backend_type.opencl or "
598+
"backend_type.level_zero"
599+
)
564600

565601
return num
566602

603+
def has_gpu_queues (self, backend_ty=backend_type.opencl):
604+
cdef size_t num = 0
605+
try :
606+
beTy = self._backend_enum_ty_dict[backend_ty]
607+
num = DPPLQueueMgr_GetNumQueues(beTy, _device_type._GPU)
608+
except KeyError:
609+
raise UnsupportedBackendError(
610+
"Backend can only be backend_type.opencl or "
611+
"backend_type.level_zero"
612+
)
613+
if num:
614+
return True
615+
else:
616+
return False
617+
618+
def has_cpu_queues (self, backend_ty=backend_type.opencl):
619+
cdef size_t num = 0
620+
try :
621+
beTy = self._backend_enum_ty_dict[backend_ty]
622+
num = DPPLQueueMgr_GetNumQueues(beTy, _device_type._CPU)
623+
except KeyError:
624+
raise UnsupportedBackendError(
625+
"Backend can only be backend_type.opencl or "
626+
"backend_type.level_zero"
627+
)
628+
if num:
629+
return True
630+
else:
631+
return False
632+
567633
def has_sycl_platforms (self):
568634
cdef size_t num_platforms = DPPLPlatform_GetNumPlatforms()
569635
if num_platforms:
@@ -603,6 +669,8 @@ get_current_device_type = _mgr.get_current_device_type
603669
get_num_platforms = _mgr.get_num_platforms
604670
get_num_activated_queues = _mgr.get_num_activated_queues
605671
get_num_queues = _mgr.get_num_queues
672+
has_cpu_queues = _mgr.has_cpu_queues
673+
has_gpu_queues = _mgr.has_gpu_queues
606674
has_sycl_platforms = _mgr.has_sycl_platforms
607675
set_default_queue = _mgr.set_default_queue
608676
is_in_device_context = _mgr.is_in_device_context

dpctl/tests/test_sycl_kernel_submit.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@
2828
import dpctl._memory as dpctl_mem
2929
import numpy as np
3030

31-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
32-
device_ty="gpu") > 0,
33-
"No OpenCL GPU queues available")
31+
@unittest.skipUnless(dpctl.has_gpu_queues(), "No OpenCL GPU queues available")
3432
class Test1DKernelSubmit (unittest.TestCase):
3533

3634
def test_create_program_from_source (self):

dpctl/tests/test_sycl_program.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@
2727
import unittest
2828
import os
2929

30-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
31-
device_ty="gpu") > 0,
32-
"No OpenCL GPU queues available")
30+
@unittest.skipUnless(dpctl.has_gpu_queues(), "No OpenCL GPU queues available")
3331
class TestProgramFromOCLSource (unittest.TestCase):
3432

3533
def test_create_program_from_source (self):
@@ -59,9 +57,7 @@ def test_create_program_from_source (self):
5957
self.assertEqual(axpyKernel.get_num_args(), 4)
6058

6159

62-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
63-
device_ty="gpu") > 0,
64-
"No OpenCL GPU queues available")
60+
@unittest.skipUnless(dpctl.has_gpu_queues(), "No OpenCL GPU queues available")
6561
class TestProgramFromSPRIV (unittest.TestCase):
6662

6763
def test_create_program_from_spirv(self):

dpctl/tests/test_sycl_queue_manager.py

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,19 @@ class TestIsInDeviceContext (unittest.TestCase):
5656
def test_is_in_device_context_outside_device_ctxt (self):
5757
self.assertFalse(dpctl.is_in_device_context())
5858

59-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
60-
device_ty="gpu") > 0,
61-
"No OpenCL GPU queues available")
59+
@unittest.skipUnless(
60+
dpctl.has_gpu_queues(), "No OpenCL GPU queues available"
61+
)
6262
def test_is_in_device_context_inside_device_ctxt (self):
6363
with dpctl.device_context("opencl:gpu:0"):
6464
self.assertTrue(dpctl.is_in_device_context())
6565

66-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
67-
device_ty="gpu") > 0,
68-
"No OpenCL GPU queues available")
69-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
70-
device_ty="cpu") > 0,
71-
"No OpenCL CPU queues available")
66+
@unittest.skipUnless(
67+
dpctl.has_gpu_queues(), "No OpenCL GPU queues available"
68+
)
69+
@unittest.skipUnless(
70+
dpctl.has_cpu_queues(), "No OpenCL CPU queues available"
71+
)
7272
def test_is_in_device_context_inside_nested_device_ctxt (self):
7373
with dpctl.device_context("opencl:cpu:0"):
7474
with dpctl.device_context("opencl:gpu:0"):
@@ -87,13 +87,15 @@ def test_get_current_device_type_inside_device_ctxt (self):
8787
self.assertEqual(dpctl.get_current_device_type(), None)
8888

8989
with dpctl.device_context("opencl:gpu:0"):
90-
self.assertEqual(dpctl.get_current_device_type(), dpctl.device_type.gpu)
90+
self.assertEqual(
91+
dpctl.get_current_device_type(), dpctl.device_type.gpu
92+
)
9193

9294
self.assertEqual(dpctl.get_current_device_type(), None)
9395

94-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
95-
device_ty="cpu") > 0,
96-
"No OpenCL CPU queues available")
96+
@unittest.skipUnless(
97+
dpctl.has_cpu_queues(), "No OpenCL CPU queues available"
98+
)
9799
def test_get_current_device_type_inside_nested_device_ctxt (self):
98100
self.assertEqual(dpctl.get_current_device_type(), None)
99101

@@ -114,12 +116,12 @@ class TestGetCurrentQueueInMultipleThreads (unittest.TestCase):
114116
def test_num_current_queues_outside_with_clause (self):
115117
self.assertEqual(dpctl.get_num_activated_queues(), 0)
116118

117-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
118-
device_ty="gpu") > 0,
119-
"No OpenCL GPU queues available")
120-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
121-
device_ty="cpu") > 0,
122-
"No OpenCL CPU queues available")
119+
@unittest.skipUnless(
120+
dpctl.has_gpu_queues(), "No OpenCL GPU queues available"
121+
)
122+
@unittest.skipUnless(
123+
dpctl.has_cpu_queues(), "No OpenCL CPU queues available"
124+
)
123125
def test_num_current_queues_inside_with_clause (self):
124126
with dpctl.device_context("opencl:cpu:0"):
125127
self.assertEqual(dpctl.get_num_activated_queues(), 1)
@@ -128,12 +130,12 @@ def test_num_current_queues_inside_with_clause (self):
128130
self.assertEqual(dpctl.get_num_activated_queues(), 0)
129131

130132

131-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
132-
device_ty="gpu") > 0,
133-
"No OpenCL GPU queues available")
134-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
135-
device_ty="cpu") > 0,
136-
"No OpenCL CPU queues available")
133+
@unittest.skipUnless(
134+
dpctl.has_gpu_queues(), "No OpenCL GPU queues available"
135+
)
136+
@unittest.skipUnless(
137+
dpctl.has_cpu_queues(), "No OpenCL CPU queues available"
138+
)
137139
def test_num_current_queues_inside_threads (self):
138140
from threading import Thread, local
139141
def SessionThread (self):

dpctl/tests/test_sycl_usm.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ def test_memory_without_context (self):
4747
# Without context
4848
self.assertEqual(mobj._usm_type(), 'shared')
4949

50-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
51-
device_ty="cpu") > 0,
52-
"No OpenCL CPU queues available")
50+
@unittest.skipUnless(
51+
dpctl.has_cpu_queues(), "No OpenCL CPU queues available"
52+
)
5353
def test_memory_cpu_context (self):
5454
mobj = self._create_memory()
5555

@@ -67,9 +67,9 @@ def test_memory_cpu_context (self):
6767
# not in the same SYCL context
6868
self.assertTrue(usm_type in ['unknown', 'shared'])
6969

70-
@unittest.skipUnless(dpctl.get_num_queues(backend_ty="opencl",
71-
device_ty="gpu") > 0,
72-
"No OpenCL GPU queues available")
70+
@unittest.skipUnless(
71+
dpctl.has_gpu_queues(), "No OpenCL GPU queues available"
72+
)
7373
def test_memory_gpu_context (self):
7474
mobj = self._create_memory()
7575

0 commit comments

Comments
 (0)