Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/SYCL-2020' into steffen/dpcpp_…
Browse files Browse the repository at this point in the history
…huge_device_code_linking
  • Loading branch information
steffenlarsen committed Jun 21, 2023
2 parents c842d0b + 3493cc7 commit 618729b
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 24 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/cts_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
23 changes: 3 additions & 20 deletions docker/dpcpp/Dockerfile
Original file line number Diff line number Diff line change
@@ -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/
4 changes: 2 additions & 2 deletions docker/dpcpp/configure.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
103 changes: 103 additions & 0 deletions test_plans/oneapi_discard_queue_events.asciidoc
Original file line number Diff line number Diff line change
@@ -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<info::event::command_execution_status>()` 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<event>)` 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.

0 comments on commit 618729b

Please sign in to comment.