Exemple #1
0
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")
Exemple #2
0
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")
Exemple #3
0
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")
Exemple #4
0
def test_event_capsule():
    ev = dpctl.SyclEvent()
    cap1 = ev._get_capsule()
    cap2 = ev._get_capsule()
    del ev
    del cap1  # test deleter
    del cap2
Exemple #5
0
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
Exemple #6
0
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")
Exemple #7
0
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
Exemple #8
0
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)
Exemple #9
0
def test_invalid_constructor_arg():
    with pytest.raises(TypeError):
        dpctl.SyclEvent(list())
Exemple #10
0
def test_create_default_event():
    try:
        dpctl.SyclEvent()
    except ValueError:
        pytest.fail("Failed to create a default event")
Exemple #11
0
def test_addressof_ref():
    ev = dpctl.SyclEvent()
    ref = ev.addressof_ref()
    assert type(ref) is int
Exemple #12
0
def test_event_invalid_capsule():
    cap = create_invalid_capsule()
    with pytest.raises(TypeError):
        dpctl.SyclEvent(cap)