def test_create_event_from_capsule(): try: event = dpctl.SyclEvent() event_capsule = event._get_capsule() dpctl.SyclEvent(event_capsule) except ValueError: pytest.fail("Failed to create an event from capsule")
def test_wait_with_list(): event_1 = dpctl.SyclEvent() event_2 = dpctl.SyclEvent() try: dpctl.SyclEvent.wait_for([event_1, event_2]) except ValueError: pytest.fail("Failed to wait for events from the list")
def test_wait_with_event(): event = dpctl.SyclEvent() try: dpctl.SyclEvent.wait_for(event) except ValueError: pytest.fail("Failed to wait_for(event)") event = dpctl.SyclEvent() try: event.wait() except ValueError: pytest.fail("Failed to wait for the event")
def test_event_capsule(): ev = dpctl.SyclEvent() cap1 = ev._get_capsule() cap2 = ev._get_capsule() del ev del cap1 # test deleter del cap2
def test_execution_status(): event = dpctl.SyclEvent() try: event_status = event.execution_status except ValueError: pytest.fail("Failed to get an event status") assert event_status == esty.complete
def test_backend(): try: dpctl.SyclEvent().backend except ValueError: pytest.fail("Failed to get backend from event") try: event = produce_event() except dpctl.SyclQueueCreationError: pytest.skip("OpenCL CPU queue could not be created") try: event.backend except ValueError: pytest.fail("Failed to get backend from event")
def test_cpython_api(): import ctypes import sys ev = dpctl.SyclEvent() mod = sys.modules[ev.__class__.__module__] # get capsule storign get_event_ref function ptr ev_ref_fn_cap = mod.__pyx_capi__["get_event_ref"] # construct Python callable to invoke "get_event_ref" cap_ptr_fn = ctypes.pythonapi.PyCapsule_GetPointer cap_ptr_fn.restype = ctypes.c_void_p cap_ptr_fn.argtypes = [ctypes.py_object, ctypes.c_char_p] ev_ref_fn_ptr = cap_ptr_fn( ev_ref_fn_cap, b"DPCTLSyclEventRef (struct PySyclEventObject *)") callable_maker = ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.py_object) get_event_ref_fn = callable_maker(ev_ref_fn_ptr) r2 = ev.addressof_ref() r1 = get_event_ref_fn(ev) assert r1 == r2
def test_create_program_from_source(ctype_str, dtype, ctypes_ctor): try: q = dpctl.SyclQueue("opencl", property="enable_profiling") except dpctl.SyclQueueCreationError: pytest.skip("OpenCL queue could not be created") # OpenCL conventions for indexing global_id is opposite to # that of SYCL (and DPCTL) oclSrc = ("kernel void axpy(" " global " + ctype_str + " *a, global " + ctype_str + " *b," " global " + ctype_str + " *c, " + ctype_str + " d) {" " size_t index = get_global_id(0);" " c[index] = d * a[index] + b[index];" "}") prog = dpctl_prog.create_program_from_source(q, oclSrc) axpyKernel = prog.get_sycl_kernel("axpy") n_elems = 1024 * 512 lws = 128 bufBytes = n_elems * dtype.itemsize abuf = dpctl_mem.MemoryUSMShared(bufBytes, queue=q) bbuf = dpctl_mem.MemoryUSMShared(bufBytes, queue=q) cbuf = dpctl_mem.MemoryUSMShared(bufBytes, queue=q) a = np.ndarray((n_elems, ), buffer=abuf, dtype=dtype) b = np.ndarray((n_elems, ), buffer=bbuf, dtype=dtype) c = np.ndarray((n_elems, ), buffer=cbuf, dtype=dtype) a[:] = np.arange(n_elems) b[:] = np.arange(n_elems, 0, -1) c[:] = 0 d = 2 args = [a.base, b.base, c.base, ctypes_ctor(d)] assert n_elems % lws == 0 for r in ( [ n_elems, ], [2, n_elems], [2, 2, n_elems], ): c[:] = 0 timer = dpctl.SyclTimer() with timer(q): q.submit(axpyKernel, args, r).wait() ref_c = a * np.array(d, dtype=dtype) + b host_dt, device_dt = timer.dt assert type(host_dt) is float and type(device_dt) is float assert np.allclose(c, ref_c), "Failed for {}".format(r) for gr, lr in ( ( [ n_elems, ], [lws], ), ([2, n_elems], [2, lws // 2]), ([2, 2, n_elems], [2, 2, lws // 4]), ): c[:] = 0 timer = dpctl.SyclTimer() with timer(q): q.submit(axpyKernel, args, gr, lr, [dpctl.SyclEvent()]).wait() ref_c = a * np.array(d, dtype=dtype) + b host_dt, device_dt = timer.dt assert type(host_dt) is float and type(device_dt) is float assert np.allclose(c, ref_c), "Faled for {}, {}".formatg(r, lr)
def test_invalid_constructor_arg(): with pytest.raises(TypeError): dpctl.SyclEvent(list())
def test_create_default_event(): try: dpctl.SyclEvent() except ValueError: pytest.fail("Failed to create a default event")
def test_addressof_ref(): ev = dpctl.SyclEvent() ref = ev.addressof_ref() assert type(ref) is int
def test_event_invalid_capsule(): cap = create_invalid_capsule() with pytest.raises(TypeError): dpctl.SyclEvent(cap)