diff --git a/.github/workflows/cts_ci.yml b/.github/workflows/cts_ci.yml index 1f16aacde..8fb281b89 100644 --- a/.github/workflows/cts_ci.yml +++ b/.github/workflows/cts_ci.yml @@ -59,7 +59,7 @@ jobs: # - sycl-impl: computecpp # version: 2.11.0 - sycl-impl: dpcpp - version: 0267c1b + version: 83f877975c97acdb38d84f94dc146571cd522e0e - sycl-impl: hipsycl version: 3d8b1cd steps: @@ -119,7 +119,7 @@ jobs: - sycl-impl: computecpp version: 2.11.0 - sycl-impl: dpcpp - version: 0267c1b + version: 83f877975c97acdb38d84f94dc146571cd522e0e - sycl-impl: hipsycl version: 3d8b1cd env: diff --git a/docker/dpcpp/Dockerfile b/docker/dpcpp/Dockerfile index f93a1084c..741cbc277 100644 --- a/docker/dpcpp/Dockerfile +++ b/docker/dpcpp/Dockerfile @@ -1,24 +1,7 @@ -# DPC++ version (git revision) to install +# DPC++ build version (git revision) to install +# Go to https://github.com/intel/llvm/pkgs/container/llvm%2Fsycl_ubuntu2204_nightly to see avilable docker image tags ARG IMPL_VERSION -FROM khronosgroup/sycl-cts-ci:common - -ARG IMPL_VERSION -RUN test -n "$IMPL_VERSION" || ( echo "Error: IMPL_VERSION is not set"; exit 1 ) - -RUN git clone https://github.com/intel/llvm.git \ - --branch=sycl --single-branch --shallow-since=2021-09-01 \ - --recurse-submodules /tmp/dpcpp && \ - cd /tmp/dpcpp && \ - git checkout $IMPL_VERSION && \ - python3 /tmp/dpcpp/buildbot/configure.py \ - --src-dir=/tmp/dpcpp \ - --obj-dir=/tmp/build \ - --build-type=Release \ - --cmake-opt=-DCMAKE_INSTALL_PREFIX=/sycl && \ - python3 /tmp/dpcpp/buildbot/compile.py \ - --src-dir=/tmp/dpcpp \ - --obj-dir=/tmp/build && \ - rm -rf /tmp/dpcpp /tmp/build +FROM ghcr.io/intel/llvm/sycl_ubuntu2204_nightly:no-drivers-$IMPL_VERSION COPY configure.sh /scripts/ diff --git a/docker/dpcpp/configure.sh b/docker/dpcpp/configure.sh index d90df3f90..48a26fca8 100644 --- a/docker/dpcpp/configure.sh +++ b/docker/dpcpp/configure.sh @@ -5,8 +5,8 @@ set -o errexit -o pipefail -o noclobber -o nounset cmake . -G Ninja -B build \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DSYCL_IMPLEMENTATION=DPCPP \ - -DDPCPP_INSTALL_DIR=/sycl \ - -DCMAKE_CXX_COMPILER=/sycl/bin/clang++ \ + -DDPCPP_INSTALL_DIR=/opt/sycl \ + -DCMAKE_CXX_COMPILER=/opt/sycl/bin/clang++ \ -DCMAKE_BUILD_TYPE=Release \ -DSYCL_CTS_ENABLE_FULL_CONFORMANCE=0 \ -DSYCL_CTS_ENABLE_DEPRECATED_FEATURES_TESTS=1 \ diff --git a/test_plans/oneapi_discard_queue_events.asciidoc b/test_plans/oneapi_discard_queue_events.asciidoc new file mode 100644 index 000000000..ec34ea380 --- /dev/null +++ b/test_plans/oneapi_discard_queue_events.asciidoc @@ -0,0 +1,103 @@ +:sectnums: +:xrefstyle: short + += Test plan for sycl extension oneapi discard queue events + +This is a test plan for the extension adding +`ext::oneapi::property::queue::discard_events` property for `sycl::queue`. The +extension is described in +https://github.com/intel/llvm/blob/sycl/sycl/doc/extensions/supported/sycl_ext_oneapi_discard_queue_events.asciidoc[sycl_ext_oneapi_discard_queue_events.asciidoc]. + +== Testing scope + +=== Device coverage + +All of the tests described below are performed only on the default device that +is selected on the CTS command line. + +=== Feature test macro + +All of the tests should use `#ifdef SYCL_EXT_ONEAPI_DISCARD_QUEUE_EVENTS` so they can +be skipped if feature is not supported. + +== Tests + +Extension introduces new `ext::oneapi::property::queue::discard_events` +property for `sycl::queue` and new enumerator value for the +`sycl::info::event_command_status` enumeration. When the queue is created +with the `discard_events` property the queue member functions returning +events will return _invalid_ events. +Behavior of some _invalid_ event member functions is different from the default +event behavior and needs to be tested. The behavior when _invalid_ event is +passed into `handler::depends_on()` function is also different and needs to be +tested. Also we should check correct kernel execution submitted to the queue +constructed with the `ext::oneapi::property::queue::discard_events` property. + +=== Test description + +==== Event member functions + +* Create a queue with property list that includes `discard_events` property +* Submit a kernel to the queue, save a returned event +* Call `get_wait_list()` for the event object +* Check that an exception with the `errc::invalid` error code is thrown +* Call `wait()` for the event object +* Check that an exception with the `errc::invalid` error code is thrown +* Call the static version of `wait()` function and passed the saved event + object to it +* Check that an exception with the `errc::invalid` error code is thrown +* Call `wait_and_throw()` for the event object +* Check that an exception with the `errc::invalid` error code is thrown +* Call the static version of `wait_and_throw()` function and passed the saved + event object to it +* Check that an exception with the `errc::invalid` error code is thrown +* Call `get_info()` for the event object +* Check returned value type is `sycl::info::event_command_status` and returned + value is `sycl::info::event_command_status::ext_oneapi_unknown` + +Perform the test for two cases when queue property list includes also +`in-order` property and doesn't. + +==== Handler member functions + +* Create a queue with property list that includes `discard_events` and + `in-order` properties +* Submit a kernel to the queue, save a returned event +* Submit a command group that call `handler::depends_on(event)` on the saved + event +* Check that an exception with the `errc::invalid` error code is thrown +* Submit a command group that call `handler::depends_on(vector)` on the + saved event +* Check that an exception with the `errc::invalid` error code is thrown + +Perform the test for two cases when queue property list includes also +`in-order` property and doesn't. + +==== Simultaneously using `discard_events` and `enable_profiling` properties + +According to the specification `discard_events` property is incompatible with +`enable_profiling`. We should check that attempts to construct a queue with both properties raises `errc::invalid`. + +* Create a queue with property list that includes `discard_events` and + `enable_profiling` properties +* Check that an exception with the `errc::invalid` error code is thrown + +==== Kernel execution check + +Do all of the following twice, with a queue constructed with `discard_events` +and with a queue constructed with both `discard_events` and `in_order`: + +* Submit a `single_task` kernel, wait on the queue, validate that the kernel + ran +* Submit a simple `parallel_for` kernel, wait on the queue, validate that the + kernel ran +* Submit an `nd-range` kernel, wait on the queue, validate that the kernel ran +* Submit a `single_task` kernel using assert (where the assert does not + trigger), wait on the queue, validate that the kernel ran +* Submit a `single_task` kernel using stream, wait on the kernel, validate that + the kernel ran +* Submit a `single_task` kernel using a buffer accessor, wait on the kernel, + validate that the kernel ran + +If the `SYCL_EXT_ONEAPI_ASSERT` macro isn't defined test with kernel using +assert can be skipped.