Skip to content

Commit c043566

Browse files
authored
Merge pull request #2168 from RossBrunton/ross/backend
Improved adapter selection in CTS testing
2 parents 5e95d33 + 8c5c5ad commit c043566

File tree

11 files changed

+256
-122
lines changed

11 files changed

+256
-122
lines changed

.github/workflows/build-hw-reusable.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ jobs:
8282
-DUR_ENABLE_TRACING=ON
8383
-DUR_DEVELOPER_MODE=ON
8484
-DUR_BUILD_TESTS=ON
85+
-DUR_CONFORMANCE_TEST_LOADER=OFF
8586
-DUR_BUILD_ADAPTER_${{matrix.adapter.name}}=ON
8687
-DUR_STATIC_LOADER=${{matrix.adapter.static_Loader}}
8788
-DUR_STATIC_ADAPTER_${{matrix.adapter.name}}=${{matrix.adapter.static_adapter}}

.github/workflows/cmake.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ jobs:
9292
-DUR_BUILD_TESTS=ON
9393
-DUR_FORMAT_CPP_STYLE=OFF
9494
-DUR_DPCXX=${{github.workspace}}/dpcpp_compiler/bin/clang++
95+
-DUR_CONFORMANCE_TEST_LOADER=OFF
9596
${{matrix.libbacktrace}}
9697
${{matrix.pool_tracking}}
9798
${{matrix.latency_tracking}}
@@ -259,6 +260,7 @@ jobs:
259260
-DUR_DEVELOPER_MODE=ON
260261
-DUR_BUILD_TESTS=ON
261262
-DUR_FORMAT_CPP_STYLE=OFF
263+
-DUR_CONFORMANCE_TEST_LOADER=OFF
262264
${{matrix.adapter.var}}
263265
264266
- name: Build all

.github/workflows/multi_device.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ jobs:
4747
-DUR_DEVELOPER_MODE=ON
4848
-DUR_BUILD_TESTS=ON
4949
-DUR_BUILD_ADAPTER_${{matrix.adapter.name}}=ON
50+
-DUR_CONFORMANCE_TEST_LOADER=OFF
5051
-DUR_TEST_DEVICES_COUNT=2
5152
-DUR_DPCXX=${{github.workspace}}/dpcpp_compiler/bin/clang++
5253
-DUR_SYCL_LIBRARY_DIR=${{github.workspace}}/dpcpp_compiler/lib

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ set(UR_CONFORMANCE_TARGET_TRIPLES "" CACHE STRING
6868
"List of sycl targets to build CTS device binaries for")
6969
set(UR_CONFORMANCE_AMD_ARCH "" CACHE STRING "AMD device target ID to build CTS binaries for")
7070
option(UR_CONFORMANCE_ENABLE_MATCH_FILES "Enable CTS match files" ON)
71+
option(UR_CONFORMANCE_TEST_LOADER "Also test the loader in the conformance tests" ON)
7172
set(UR_ADAPTER_LEVEL_ZERO_SOURCE_DIR "" CACHE PATH
7273
"Path to external 'level_zero' adapter source dir")
7374
set(UR_ADAPTER_OPENCL_SOURCE_DIR "" CACHE PATH

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ List of options provided by CMake:
133133
| UR_CONFORMANCE_TARGET_TRIPLES | SYCL triples to build CTS device binaries for | Comma-separated list | spir64 |
134134
| UR_CONFORMANCE_AMD_ARCH | AMD device target ID to build CTS binaries for | string | `""` |
135135
| UR_CONFORMANCE_ENABLE_MATCH_FILES | Enable CTS match files | ON/OFF | ON |
136+
| UR_CONFORMANCE_TEST_LOADER | Build and run "loader" tests for the CTS | ON/OFF | ON |
136137
| UR_BUILD_ADAPTER_L0 | Build the Level-Zero adapter | ON/OFF | OFF |
137138
| UR_BUILD_ADAPTER_OPENCL | Build the OpenCL adapter | ON/OFF | OFF |
138139
| UR_BUILD_ADAPTER_CUDA | Build the CUDA adapter | ON/OFF | OFF |

scripts/core/INTRO.rst

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,32 @@ Specific environment variables can be set to control the behavior of unified run
404404

405405
This environment variable is default enabled on Linux, but default disabled on Windows.
406406

407+
CTS Environment Variables
408+
-------------------------
409+
410+
The following environment variables are used by the CTS runner and can be used to specify the platform that the test
411+
framework should run on. This can be used during development and testing to run CTS tests in case multiple platforms
412+
are available. If both filters are specified, then they both must match a platform for it to be selected. If there are
413+
no valid platforms, then the tests will fail. Command line arguments take priority over these variables.
414+
415+
.. envvar:: UR_CTS_ADAPTER_PLATFORM
416+
417+
A specifier list in the form of `[(backend):](platform name)[;[(backend)]:(platform name)]...`. If a backend
418+
specific specifier is present in the list and the test is running for that backend, the device with the given name
419+
is chosen. Otherwise, it must match the name of the specifier from the list with no backend. Backend names are case-
420+
insensitive, however platform names must match exactly.
421+
422+
For example, if the test device has multiple platforms and you want to run tests on the "ABC Corp" backend when
423+
testing OpenCL and "XYZ Org" when testing level zero, you'd use `OPENCL:ABC Corp;LEVEL_ZERO:XYZ Org`. This form is
424+
useful when running the `build` target with a build with multiple backends.
425+
426+
For testing only one platform, the backend can be omitted. For example, just `ABC Corp` is sufficient if the tests
427+
are only going to be testing OpenCL.
428+
429+
.. envvar:: UR_CTS_BACKEND
430+
431+
A (case insensitive) backend to force the test to use. For example, `opencl`, `level_zero`, `hip` and so on.
432+
407433
Service identifiers
408434
---------------------
409435

test/adapters/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ function(add_adapter_memcheck_test name)
6363
add_test(NAME ${test_name}
6464
COMMAND ${CMAKE_COMMAND}
6565
-D TEST_FILE=valgrind
66-
-D TEST_ARGS="--tool=memcheck --leak-check=full $<TARGET_FILE:${target}> --devices_count=${UR_TEST_DEVICES_COUNT} --platforms_count=${UR_TEST_DEVICES_COUNT}"
66+
-D TEST_ARGS="--tool=memcheck --leak-check=full $<TARGET_FILE:${target}> --backend=${backend} --devices_count=${UR_TEST_DEVICES_COUNT} --platforms_count=${UR_TEST_DEVICES_COUNT}"
6767
-D MODE=stderr
6868
-D MATCH_FILE=${CMAKE_CURRENT_SOURCE_DIR}/${name}_memcheck.match
6969
-P ${PROJECT_SOURCE_DIR}/cmake/match.cmake

test/conformance/CMakeLists.txt

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,45 +9,48 @@ set(UR_CONFORMANCE_DEVICE_BINARIES_DIR
99
"${CMAKE_CURRENT_BINARY_DIR}/device_binaries" CACHE INTERNAL
1010
"Internal cache variable for device binaries directory")
1111

12-
function(add_test_adapter name adapter)
13-
if(NOT "${ARGN}" STREQUAL "")
14-
set(EXTRA_NAME "-${ARGN}")
15-
endif()
12+
function(add_test_adapter name adapter backend)
1613
set(TEST_TARGET_NAME test-${name})
17-
set(TEST_NAME ${name}-${adapter}${EXTRA_NAME})
14+
set(TEST_NAME ${name}-${adapter})
1815

1916
set(TEST_COMMAND
20-
"${PROJECT_BINARY_DIR}/bin/${TEST_TARGET_NAME} --devices_count=${UR_TEST_DEVICES_COUNT} --platforms_count=${UR_TEST_PLATFORMS_COUNT}"
17+
"${PROJECT_BINARY_DIR}/bin/${TEST_TARGET_NAME} --backend=${backend} --devices_count=${UR_TEST_DEVICES_COUNT} --platforms_count=${UR_TEST_PLATFORMS_COUNT}"
2118
)
22-
set(MATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${name}_${adapter}${EXTRA_NAME}.match")
23-
24-
if(${UR_CONFORMANCE_ENABLE_MATCH_FILES} AND EXISTS ${MATCH_FILE})
25-
add_test(NAME ${TEST_NAME}
26-
COMMAND ${CMAKE_COMMAND}
27-
-D TEST_FILE=${Python3_EXECUTABLE}
28-
-D TEST_ARGS="${UR_CONFORMANCE_TEST_DIR}/cts_exe.py --test_command ${TEST_COMMAND}"
29-
-D MODE=stdout
30-
-D MATCH_FILE=${MATCH_FILE}
31-
-P ${PROJECT_SOURCE_DIR}/cmake/match.cmake
32-
DEPENDS ${TEST_TARGET_NAME}
33-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
34-
)
35-
else()
36-
separate_arguments(TEST_COMMAND)
37-
add_test(NAME ${TEST_NAME}
38-
COMMAND ${TEST_COMMAND}
39-
DEPENDS ${TEST_TARGET_NAME}
40-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
41-
)
42-
endif()
19+
set(MATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${name}_${adapter}.match")
20+
21+
function(do_add_test tname env)
22+
if(${UR_CONFORMANCE_ENABLE_MATCH_FILES} AND EXISTS ${MATCH_FILE})
23+
add_test(NAME ${tname}
24+
COMMAND ${CMAKE_COMMAND}
25+
-D TEST_FILE=${Python3_EXECUTABLE}
26+
-D TEST_ARGS="${UR_CONFORMANCE_TEST_DIR}/cts_exe.py --test_command ${TEST_COMMAND}"
27+
-D MODE=stdout
28+
-D MATCH_FILE=${MATCH_FILE}
29+
-P ${PROJECT_SOURCE_DIR}/cmake/match.cmake
30+
DEPENDS ${TEST_TARGET_NAME}
31+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
32+
)
33+
else()
34+
separate_arguments(TEST_COMMAND)
35+
add_test(NAME ${tname}
36+
COMMAND ${TEST_COMMAND}
37+
DEPENDS ${TEST_TARGET_NAME}
38+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
39+
)
40+
endif()
4341

44-
set(TEST_ENV UR_ADAPTERS_FORCE_LOAD="$<TARGET_FILE:ur_${adapter}>")
45-
if(UR_CONFORMANCE_ENABLE_MATCH_FILES)
46-
list(APPEND TEST_ENV GTEST_COLOR=no)
42+
if(UR_CONFORMANCE_ENABLE_MATCH_FILES)
43+
list(APPEND env GTEST_COLOR=no)
44+
endif()
45+
set_tests_properties(${TEST_NAME} PROPERTIES
46+
ENVIRONMENT "${env}"
47+
LABELS "conformance;${adapter}")
48+
endfunction()
49+
50+
do_add_test(${TEST_NAME} UR_ADAPTERS_FORCE_LOAD="$<TARGET_FILE:ur_${adapter}>")
51+
if(UR_CONFORMANCE_TEST_LOADER)
52+
do_add_test(${TEST_NAME}-loader "")
4753
endif()
48-
set_tests_properties(${TEST_NAME} PROPERTIES
49-
ENVIRONMENT "${TEST_ENV}"
50-
LABELS "conformance;${adapter}")
5154
endfunction()
5255

5356
function(add_conformance_test name)
@@ -66,29 +69,29 @@ function(add_conformance_test name)
6669
unit_tests_helpers)
6770

6871
if(UR_BUILD_ADAPTER_CUDA OR UR_BUILD_ADAPTER_ALL)
69-
add_test_adapter(${name} adapter_cuda)
72+
add_test_adapter(${name} adapter_cuda CUDA)
7073
endif()
7174
if(UR_BUILD_ADAPTER_HIP OR UR_BUILD_ADAPTER_ALL)
72-
add_test_adapter(${name} adapter_hip)
75+
add_test_adapter(${name} adapter_hip HIP)
7376
endif()
7477
if(UR_BUILD_ADAPTER_L0 OR UR_BUILD_ADAPTER_ALL)
75-
add_test_adapter(${name} adapter_level_zero)
78+
add_test_adapter(${name} adapter_level_zero LEVEL_ZERO)
7679
endif()
7780
if(UR_BUILD_ADAPTER_L0_V2)
78-
add_test_adapter(${name} adapter_level_zero_v2)
81+
add_test_adapter(${name} adapter_level_zero_v2 LEVEL_ZERO)
7982
endif()
8083
if(UR_BUILD_ADAPTER_OPENCL OR UR_BUILD_ADAPTER_ALL)
81-
add_test_adapter(${name} adapter_opencl)
84+
add_test_adapter(${name} adapter_opencl OPENCL)
8285
endif()
8386
if(UR_BUILD_ADAPTER_NATIVE_CPU OR UR_BUILD_ADAPTER_ALL)
84-
add_test_adapter(${name} adapter_native_cpu)
87+
add_test_adapter(${name} adapter_native_cpu NATIVE_CPU)
8588
endif()
8689

8790
if(NOT (UR_BUILD_ADAPTER_CUDA OR UR_BUILD_ADAPTER_HIP
8891
OR UR_BUILD_ADAPTER_L0 OR UR_BUILD_ADAPTER_OPENCL
8992
OR UR_BUILD_ADAPTER_NATIVE_CPU OR UR_BUILD_ADAPTER_L0_V2
9093
OR UR_BUILD_ADAPTER_ALL))
91-
add_test_adapter(${name} adapter_mock)
94+
add_test_adapter(${name} adapter_mock MOCK)
9295
endif()
9396
endfunction()
9497

test/conformance/cts_exe.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,14 @@ def _print_cmdline(cmd_args, env, cwd, file=sys.stderr):
3535
parser.add_argument("--test_command", help="Ctest test case")
3636
parser.add_argument("--devices_count", type=str, help="Number of devices on which tests will be run")
3737
parser.add_argument("--platforms_count", type=str, help="Number of platforms on which tests will be run")
38+
parser.add_argument("--backend", type=str, help="Number of platforms on which tests will be run")
3839
args = parser.parse_args()
3940
invocation = [
4041
args.test_command,
4142
"--gtest_brief=1",
4243
f"--devices_count={args.devices_count}",
4344
f"--platforms_count={args.platforms_count}",
45+
f"--backend={args.backend}",
4446
]
4547
_print_cmdline(invocation, os.environ, os.getcwd())
4648

0 commit comments

Comments
 (0)