From e995457a954cabb519427912eb0d00b10bd40de8 Mon Sep 17 00:00:00 2001 From: Ross Brunton Date: Wed, 11 Sep 2024 17:37:04 +0100 Subject: [PATCH] [CI] Add "loader" support to conformance testing This expands our CI to test the loader; the dispatcher that is used when multiple adapters are availabe. Previously, the unit tests forced a specific adapter, via `UR_ADAPTERS_FORCE_LOAD`. Now an extra "loader" target is created for each test suite, which doesn't set that variable and allows the loader to be used. In addition, the test runner's adapter selection logic has been rewritten to support a "--backend" variable, which allows you to select a backend (OpenCL, Level Zero, etc.). The platform selection has also been expanded to support filtering by a backend to match that platform only on that backend (e.g. `UR_CTS_ADAPTER_PLATFORM="opencl:Fictional Corp(R)"`). The old "run on hardware" jobs should behave the same (they have the loader tests disabled), but there is a new `combined-opencl-level-zero` job that tests a build with both OpenCL and Level Zero available. --- .github/workflows/build-hw-reusable.yml | 25 +- .github/workflows/cmake.yml | 9 + .github/workflows/multi_device.yml | 1 + CMakeLists.txt | 1 + source/loader/ur_ldrddi.cpp | 3 + test/adapters/CMakeLists.txt | 2 +- test/conformance/CMakeLists.txt | 41 +++- .../adapter_adapter_native_cpu_loader.match | 1 + .../context_adapter_level_zero_loader.match | 1 + ...context_adapter_level_zero_v2_loader.match | 1 + .../context_adapter_native_cpu_loader.match | 1 + test/conformance/cts_exe.py | 4 +- .../device/device_adapter_cuda_loader.match | 1 + .../device/device_adapter_hip_loader.match | 1 + .../device_adapter_level_zero_loader.match | 1 + .../device_adapter_level_zero_v2_loader.match | 1 + .../device_adapter_native_cpu_loader.match | 1 + .../device/device_adapter_opencl_loader.match | 1 + test/conformance/device_code/single.cpp | 20 ++ .../enqueue/enqueue_adapter_cuda_loader.match | 1 + .../enqueue/enqueue_adapter_hip_loader.match | 1 + .../enqueue_adapter_level_zero_loader.match | 1 + ...enqueue_adapter_level_zero_v2_loader.match | 1 + .../enqueue_adapter_native_cpu_loader.match | 1 + .../enqueue_adapter_opencl_loader.match | 1 + .../event/event_adapter_cuda_loader.match | 1 + .../event/event_adapter_hip_loader.match | 1 + .../event_adapter_level_zero_loader.match | 1 + .../event_adapter_level_zero_v2_loader.match | 1 + .../event_adapter_native_cpu_loader.match | 1 + ...p_command_buffer_adapter_cuda_loader.match | 1 + ...xp_command_buffer_adapter_hip_loader.match | 1 + ..._buffer_adapter_level_zero_v2_loader.match | 1 + ...and_buffer_adapter_native_cpu_loader.match | 1 + ..._native_adapter_level_zero_v2_loader.match | 1 + ...properties_adapter_native_cpu_loader.match | 1 + ...ntegration_adapter_level_zero_loader.match | 1 + ...gration_adapter_level_zero_v2_loader.match | 1 + ...ntegration_adapter_native_cpu_loader.match | 1 + .../integration_adapter_opencl_loader.match | 1 + .../kernel/kernel_adapter_cuda_loader.match | 1 + .../kernel/kernel_adapter_hip_loader.match | 1 + .../kernel_adapter_level_zero_loader.match | 1 + .../kernel_adapter_level_zero_v2_loader.match | 1 + .../kernel_adapter_native_cpu_loader.match | 1 + .../kernel/kernel_adapter_opencl_loader.match | 1 + .../memory/memory_adapter_cuda_loader.match | 1 + .../memory/memory_adapter_hip_loader.match | 1 + .../memory_adapter_level_zero_loader.match | 1 + .../memory_adapter_level_zero_v2_loader.match | 1 + .../memory_adapter_native_cpu_loader.match | 1 + .../memory/memory_adapter_opencl_loader.match | 1 + .../platform_adapter_cuda_loader.match | 1 + .../platform_adapter_hip_loader.match | 1 + .../platform_adapter_native_cpu_loader.match | 1 + .../program/program_adapter_cuda_loader.match | 1 + .../program/program_adapter_hip_loader.match | 1 + .../program_adapter_level_zero_loader.match | 1 + ...program_adapter_level_zero_v2_loader.match | 1 + .../program_adapter_native_cpu_loader.match | 1 + .../program_adapter_opencl_loader.match | 1 + .../queue_adapter_level_zero_loader.match | 1 + .../queue_adapter_native_cpu_loader.match | 1 + .../sampler_adapter_level_zero_loader.match | 1 + ...sampler_adapter_level_zero_v2_loader.match | 1 + test/conformance/source/environment.cpp | 226 ++++++++++++++---- .../testing/include/uur/environment.h | 4 +- .../usm/usm_adapter_cuda_loader.match | 1 + .../usm/usm_adapter_hip_loader.match | 1 + .../usm/usm_adapter_level_zero_loader.match | 1 + .../usm_adapter_level_zero_v2_loader.match | 1 + .../usm/usm_adapter_native_cpu_loader.match | 1 + .../usm/usm_adapter_opencl_loader.match | 1 + ...ual_memory_adapter_level_zero_loader.match | 1 + ..._memory_adapter_level_zero_v2_loader.match | 1 + 75 files changed, 332 insertions(+), 68 deletions(-) create mode 120000 test/conformance/adapter/adapter_adapter_native_cpu_loader.match create mode 120000 test/conformance/context/context_adapter_level_zero_loader.match create mode 120000 test/conformance/context/context_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/context/context_adapter_native_cpu_loader.match create mode 120000 test/conformance/device/device_adapter_cuda_loader.match create mode 120000 test/conformance/device/device_adapter_hip_loader.match create mode 120000 test/conformance/device/device_adapter_level_zero_loader.match create mode 120000 test/conformance/device/device_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/device/device_adapter_native_cpu_loader.match create mode 120000 test/conformance/device/device_adapter_opencl_loader.match create mode 100644 test/conformance/device_code/single.cpp create mode 120000 test/conformance/enqueue/enqueue_adapter_cuda_loader.match create mode 120000 test/conformance/enqueue/enqueue_adapter_hip_loader.match create mode 120000 test/conformance/enqueue/enqueue_adapter_level_zero_loader.match create mode 120000 test/conformance/enqueue/enqueue_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/enqueue/enqueue_adapter_native_cpu_loader.match create mode 120000 test/conformance/enqueue/enqueue_adapter_opencl_loader.match create mode 120000 test/conformance/event/event_adapter_cuda_loader.match create mode 120000 test/conformance/event/event_adapter_hip_loader.match create mode 120000 test/conformance/event/event_adapter_level_zero_loader.match create mode 120000 test/conformance/event/event_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/event/event_adapter_native_cpu_loader.match create mode 120000 test/conformance/exp_command_buffer/exp_command_buffer_adapter_cuda_loader.match create mode 120000 test/conformance/exp_command_buffer/exp_command_buffer_adapter_hip_loader.match create mode 120000 test/conformance/exp_command_buffer/exp_command_buffer_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/exp_command_buffer/exp_command_buffer_adapter_native_cpu_loader.match create mode 120000 test/conformance/exp_enqueue_native/exp_enqueue_native_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/exp_launch_properties/exp_launch_properties_adapter_native_cpu_loader.match create mode 120000 test/conformance/integration/integration_adapter_level_zero_loader.match create mode 120000 test/conformance/integration/integration_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/integration/integration_adapter_native_cpu_loader.match create mode 120000 test/conformance/integration/integration_adapter_opencl_loader.match create mode 120000 test/conformance/kernel/kernel_adapter_cuda_loader.match create mode 120000 test/conformance/kernel/kernel_adapter_hip_loader.match create mode 120000 test/conformance/kernel/kernel_adapter_level_zero_loader.match create mode 120000 test/conformance/kernel/kernel_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/kernel/kernel_adapter_native_cpu_loader.match create mode 120000 test/conformance/kernel/kernel_adapter_opencl_loader.match create mode 120000 test/conformance/memory/memory_adapter_cuda_loader.match create mode 120000 test/conformance/memory/memory_adapter_hip_loader.match create mode 120000 test/conformance/memory/memory_adapter_level_zero_loader.match create mode 120000 test/conformance/memory/memory_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/memory/memory_adapter_native_cpu_loader.match create mode 120000 test/conformance/memory/memory_adapter_opencl_loader.match create mode 120000 test/conformance/platform/platform_adapter_cuda_loader.match create mode 120000 test/conformance/platform/platform_adapter_hip_loader.match create mode 120000 test/conformance/platform/platform_adapter_native_cpu_loader.match create mode 120000 test/conformance/program/program_adapter_cuda_loader.match create mode 120000 test/conformance/program/program_adapter_hip_loader.match create mode 120000 test/conformance/program/program_adapter_level_zero_loader.match create mode 120000 test/conformance/program/program_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/program/program_adapter_native_cpu_loader.match create mode 120000 test/conformance/program/program_adapter_opencl_loader.match create mode 120000 test/conformance/queue/queue_adapter_level_zero_loader.match create mode 120000 test/conformance/queue/queue_adapter_native_cpu_loader.match create mode 120000 test/conformance/sampler/sampler_adapter_level_zero_loader.match create mode 120000 test/conformance/sampler/sampler_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/usm/usm_adapter_cuda_loader.match create mode 120000 test/conformance/usm/usm_adapter_hip_loader.match create mode 120000 test/conformance/usm/usm_adapter_level_zero_loader.match create mode 120000 test/conformance/usm/usm_adapter_level_zero_v2_loader.match create mode 120000 test/conformance/usm/usm_adapter_native_cpu_loader.match create mode 120000 test/conformance/usm/usm_adapter_opencl_loader.match create mode 120000 test/conformance/virtual_memory/virtual_memory_adapter_level_zero_loader.match create mode 120000 test/conformance/virtual_memory/virtual_memory_adapter_level_zero_v2_loader.match diff --git a/.github/workflows/build-hw-reusable.yml b/.github/workflows/build-hw-reusable.yml index fa23c38248..b17e3e3f9c 100644 --- a/.github/workflows/build-hw-reusable.yml +++ b/.github/workflows/build-hw-reusable.yml @@ -7,6 +7,10 @@ on: adapter_name: required: true type: string + other_adapter_name: + required: false + type: string + default: "" runner_name: required: true type: string @@ -14,6 +18,10 @@ on: required: false type: string default: "" + other_platform: + required: false + type: string + default: "" static_loader: required: false type: string @@ -39,9 +47,14 @@ jobs: if: github.repository == 'oneapi-src/unified-runtime' # run only on upstream; forks won't have the HW strategy: matrix: - adapter: [ - {name: "${{inputs.adapter_name}}", platform: "${{inputs.platform}}", static_Loader: "${{inputs.static_loader}}", static_adapter: "${{inputs.static_loader}}"}, - ] + adapter: [{ + name: "${{inputs.adapter_name}}", + other_name: "${{inputs.other_adapter_name}}", + platform: "${{inputs.platform}}", + other_platform: "${{inputs.other_platform}}", + static_Loader: "${{inputs.static_loader}}", + static_adapter: "${{inputs.static_loader}}" + }] build_type: [Debug, Release] compiler: [{c: gcc, cxx: g++}, {c: clang, cxx: clang++}] # TODO: The latest L0 loader segfaults when built with clang. @@ -83,10 +96,12 @@ jobs: -DUR_DEVELOPER_MODE=ON -DUR_BUILD_TESTS=ON -DUR_BUILD_ADAPTER_${{matrix.adapter.name}}=ON + ${{ matrix.adapter.other_name != '' && format('-DUR_BUILD_ADAPTER_{}=ON', matrix.adapter.other_name) || '' }} -DUR_STATIC_LOADER=${{matrix.adapter.static_Loader}} -DUR_STATIC_ADAPTER_${{matrix.adapter.name}}=${{matrix.adapter.static_adapter}} -DUR_DPCXX=${{github.workspace}}/dpcpp_compiler/bin/clang++ -DUR_SYCL_LIBRARY_DIR=${{github.workspace}}/dpcpp_compiler/lib + -DUR_CONFORMANCE_TEST_LOADER=${{ matrix.adapter.other_name != '' && 'ON' || 'OFF' }} ${{ matrix.adapter.name == 'HIP' && '-DUR_CONFORMANCE_AMD_ARCH=gfx1030' || '' }} ${{ matrix.adapter.name == 'HIP' && '-DUR_HIP_PLATFORM=AMD' || '' }} @@ -97,10 +112,12 @@ jobs: - name: Test adapter specific working-directory: ${{github.workspace}}/build run: ctest -C ${{matrix.build_type}} --output-on-failure -L "adapter-specific" --timeout 180 + # Don't run adapter specific tests when building multiple adapters + if: ${{ matrix.adapter.other_name == '' }} - name: Test adapters working-directory: ${{github.workspace}}/build - run: env UR_CTS_ADAPTER_PLATFORM="${{matrix.adapter.platform}}" ctest -C ${{matrix.build_type}} --output-on-failure -L "conformance" --timeout 180 + run: env UR_CTS_ADAPTER_PLATFORM="${{matrix.adapter.name}}:${{matrix.adapter.platform}};${{matrix.adapter.other_name}}:${{matrix.adapter.other_platform}}" ctest -C ${{matrix.build_type}} --output-on-failure -L "conformance" --timeout 180 - name: Get information about platform if: ${{ always() }} diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 6662f7833d..5c066d65c6 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -186,6 +186,15 @@ jobs: adapter_name: NATIVE_CPU runner_name: NATIVE_CPU + combined-opencl-level-zero: + name: OpenCL + Level Zero + uses: ./.github/workflows/build-hw-reusable.yml + with: + adapter_name: OPENCL + other_adapter_name: L0 + runner_name: OPENCL + platform: "Intel(R) OpenCL" + e2e-level-zero: name: E2E L0 permissions: diff --git a/.github/workflows/multi_device.yml b/.github/workflows/multi_device.yml index b9ae70ece6..243cb30ea2 100644 --- a/.github/workflows/multi_device.yml +++ b/.github/workflows/multi_device.yml @@ -48,6 +48,7 @@ jobs: -DUR_DEVELOPER_MODE=ON -DUR_BUILD_TESTS=ON -DUR_BUILD_ADAPTER_${{matrix.adapter.name}}=ON + -DUR_CONFORMANCE_TEST_LOADER=OFF -DUR_TEST_DEVICES_COUNT=2 - name: Build diff --git a/CMakeLists.txt b/CMakeLists.txt index a908a22d80..ea2c6586d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,6 +68,7 @@ set(UR_CONFORMANCE_TARGET_TRIPLES "" CACHE STRING "List of sycl targets to build CTS device binaries for") set(UR_CONFORMANCE_AMD_ARCH "" CACHE STRING "AMD device target ID to build CTS binaries for") option(UR_CONFORMANCE_ENABLE_MATCH_FILES "Enable CTS match files" ON) +option(UR_CONFORMANCE_TEST_LOADER "Also test the loader in the conformance tests" ON) set(UR_ADAPTER_LEVEL_ZERO_SOURCE_DIR "" CACHE PATH "Path to external 'level_zero' adapter source dir") set(UR_ADAPTER_OPENCL_SOURCE_DIR "" CACHE PATH diff --git a/source/loader/ur_ldrddi.cpp b/source/loader/ur_ldrddi.cpp index 4d384dbb52..98f1162c14 100644 --- a/source/loader/ur_ldrddi.cpp +++ b/source/loader/ur_ldrddi.cpp @@ -506,6 +506,9 @@ __urdlllocal ur_result_t UR_APICALL urDeviceGetInfo( [[maybe_unused]] auto context = getContext(); + // For testing + abort(); + // extract platform's function pointer table auto dditable = reinterpret_cast(hDevice)->dditable; auto pfnGetInfo = dditable->ur.Device.pfnGetInfo; diff --git a/test/adapters/CMakeLists.txt b/test/adapters/CMakeLists.txt index 78f0306d7b..54f8f76a7b 100644 --- a/test/adapters/CMakeLists.txt +++ b/test/adapters/CMakeLists.txt @@ -63,7 +63,7 @@ function(add_adapter_memcheck_test name) add_test(NAME ${test_name} COMMAND ${CMAKE_COMMAND} -D TEST_FILE=valgrind - -D TEST_ARGS="--tool=memcheck --leak-check=full $ --devices_count=${UR_TEST_DEVICES_COUNT} --platforms_count=${UR_TEST_DEVICES_COUNT}" + -D TEST_ARGS="--tool=memcheck --leak-check=full $ --backend=${backend} --devices_count=${UR_TEST_DEVICES_COUNT} --platforms_count=${UR_TEST_DEVICES_COUNT}" -D MODE=stderr -D MATCH_FILE=${CMAKE_CURRENT_SOURCE_DIR}/${name}_memcheck.match -P ${PROJECT_SOURCE_DIR}/cmake/match.cmake diff --git a/test/conformance/CMakeLists.txt b/test/conformance/CMakeLists.txt index b45a3fc3da..c166831a67 100644 --- a/test/conformance/CMakeLists.txt +++ b/test/conformance/CMakeLists.txt @@ -9,7 +9,7 @@ set(UR_CONFORMANCE_DEVICE_BINARIES_DIR "${CMAKE_CURRENT_BINARY_DIR}/device_binaries" CACHE INTERNAL "Internal cache variable for device binaries directory") -function(add_test_adapter name adapter) +function(add_test_adapter name adapter backend force) if(NOT "${ARGN}" STREQUAL "") set(EXTRA_NAME "-${ARGN}") endif() @@ -17,7 +17,7 @@ function(add_test_adapter name adapter) set(TEST_NAME ${name}-${adapter}${EXTRA_NAME}) set(TEST_COMMAND - "${PROJECT_BINARY_DIR}/bin/${TEST_TARGET_NAME} --devices_count=${UR_TEST_DEVICES_COUNT} --platforms_count=${UR_TEST_PLATFORMS_COUNT}" + "${PROJECT_BINARY_DIR}/bin/${TEST_TARGET_NAME} --backend=${backend} --devices_count=${UR_TEST_DEVICES_COUNT} --platforms_count=${UR_TEST_PLATFORMS_COUNT}" ) set(MATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${name}_${adapter}${EXTRA_NAME}.match") @@ -41,7 +41,9 @@ function(add_test_adapter name adapter) ) endif() - set(TEST_ENV UR_ADAPTERS_FORCE_LOAD="$") + if(${force}) + set(TEST_ENV UR_ADAPTERS_FORCE_LOAD="$") + endif() if(UR_CONFORMANCE_ENABLE_MATCH_FILES) list(APPEND TEST_ENV GTEST_COLOR=no) endif() @@ -66,22 +68,43 @@ function(add_conformance_test name) unit_tests_helpers) if(UR_BUILD_ADAPTER_CUDA OR UR_BUILD_ADAPTER_ALL) - add_test_adapter(${name} adapter_cuda) + add_test_adapter(${name} adapter_cuda CUDA ON) endif() if(UR_BUILD_ADAPTER_HIP OR UR_BUILD_ADAPTER_ALL) - add_test_adapter(${name} adapter_hip) + add_test_adapter(${name} adapter_hip HIP ON) endif() if(UR_BUILD_ADAPTER_L0 OR UR_BUILD_ADAPTER_ALL) - add_test_adapter(${name} adapter_level_zero) + add_test_adapter(${name} adapter_level_zero LEVEL_ZERO ON) endif() if(UR_BUILD_ADAPTER_L0_V2) - add_test_adapter(${name} adapter_level_zero_v2) + add_test_adapter(${name} adapter_level_zero_v2 LEVEL_ZERO ON) endif() if(UR_BUILD_ADAPTER_OPENCL OR UR_BUILD_ADAPTER_ALL) - add_test_adapter(${name} adapter_opencl) + add_test_adapter(${name} adapter_opencl OPENCL ON) endif() if(UR_BUILD_ADAPTER_NATIVE_CPU OR UR_BUILD_ADAPTER_ALL) - add_test_adapter(${name} adapter_native_cpu) + add_test_adapter(${name} adapter_native_cpu NATIVE_CPU ON) + endif() + + if(UR_CONFORMANCE_TEST_LOADER) + if(UR_BUILD_ADAPTER_CUDA OR UR_BUILD_ADAPTER_ALL) + add_test_adapter(${name} adapter_cuda_loader CUDA OFF) + endif() + if(UR_BUILD_ADAPTER_HIP OR UR_BUILD_ADAPTER_ALL) + add_test_adapter(${name} adapter_hip_loader HIP OFF) + endif() + if(UR_BUILD_ADAPTER_L0 OR UR_BUILD_ADAPTER_ALL) + add_test_adapter(${name} adapter_level_zero_loader LEVEL_ZERO OFF) + endif() + if(UR_BUILD_ADAPTER_L0_V2) + add_test_adapter(${name} adapter_level_zero_v2_loader LEVEL_ZERO OFF) + endif() + if(UR_BUILD_ADAPTER_OPENCL OR UR_BUILD_ADAPTER_ALL) + add_test_adapter(${name} adapter_opencl_loader OPENCL OFF) + endif() + if(UR_BUILD_ADAPTER_NATIVE_CPU OR UR_BUILD_ADAPTER_ALL) + add_test_adapter(${name} adapter_native_cpu_loader NATIVE_CPU OFF) + endif() endif() if(NOT (UR_BUILD_ADAPTER_CUDA OR UR_BUILD_ADAPTER_HIP diff --git a/test/conformance/adapter/adapter_adapter_native_cpu_loader.match b/test/conformance/adapter/adapter_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..6ea94ce644 --- /dev/null +++ b/test/conformance/adapter/adapter_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/adapter/adapter_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/context/context_adapter_level_zero_loader.match b/test/conformance/context/context_adapter_level_zero_loader.match new file mode 120000 index 0000000000..b36695adbe --- /dev/null +++ b/test/conformance/context/context_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/context/context_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/context/context_adapter_level_zero_v2_loader.match b/test/conformance/context/context_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..5335ccdd3b --- /dev/null +++ b/test/conformance/context/context_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/context/context_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/context/context_adapter_native_cpu_loader.match b/test/conformance/context/context_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..c4a02ab93a --- /dev/null +++ b/test/conformance/context/context_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/context/context_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/cts_exe.py b/test/conformance/cts_exe.py index 3434c1727c..4272509cd4 100644 --- a/test/conformance/cts_exe.py +++ b/test/conformance/cts_exe.py @@ -23,11 +23,13 @@ parser.add_argument("--test_command", help="Ctest test case") parser.add_argument("--devices_count", type=str, help="Number of devices on which tests will be run") parser.add_argument("--platforms_count", type=str, help="Number of platforms on which tests will be run") + parser.add_argument("--backend", type=str, help="Number of platforms on which tests will be run") args = parser.parse_args() result = subprocess.Popen([args.test_command, '--gtest_brief=1', # nosec B603 f'--devices_count={args.devices_count}', - f'--platforms_count={args.platforms_count}'], + f'--platforms_count={args.platforms_count}', + f'--backend={args.backend}'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) pat = re.compile(r'\[( )*FAILED( )*\]') diff --git a/test/conformance/device/device_adapter_cuda_loader.match b/test/conformance/device/device_adapter_cuda_loader.match new file mode 120000 index 0000000000..54f2ad3d46 --- /dev/null +++ b/test/conformance/device/device_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/device/device_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/device/device_adapter_hip_loader.match b/test/conformance/device/device_adapter_hip_loader.match new file mode 120000 index 0000000000..2f476eb216 --- /dev/null +++ b/test/conformance/device/device_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/device/device_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/device/device_adapter_level_zero_loader.match b/test/conformance/device/device_adapter_level_zero_loader.match new file mode 120000 index 0000000000..bbf39f644d --- /dev/null +++ b/test/conformance/device/device_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/device/device_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/device/device_adapter_level_zero_v2_loader.match b/test/conformance/device/device_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..e60a321899 --- /dev/null +++ b/test/conformance/device/device_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/device/device_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/device/device_adapter_native_cpu_loader.match b/test/conformance/device/device_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..e40575190c --- /dev/null +++ b/test/conformance/device/device_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/device/device_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/device/device_adapter_opencl_loader.match b/test/conformance/device/device_adapter_opencl_loader.match new file mode 120000 index 0000000000..647d45c6a1 --- /dev/null +++ b/test/conformance/device/device_adapter_opencl_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/device/device_adapter_opencl.match \ No newline at end of file diff --git a/test/conformance/device_code/single.cpp b/test/conformance/device_code/single.cpp new file mode 100644 index 0000000000..5b9e617e1e --- /dev/null +++ b/test/conformance/device_code/single.cpp @@ -0,0 +1,20 @@ +// Copyright (C) 2023 Intel Corporation +// Part of the Unified-Runtime Project, under the Apache License v2.0 with LLVM Exceptions. +// See LICENSE.TXT +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include + +class Single; + +int main() { + sycl::queue deviceQueue; + sycl::range<1> numOfItems{1}; + + deviceQueue.submit([&](sycl::handler &cgh) { + auto kern = [=]() {}; + cgh.single_task(kern); + }); + + return 0; +} diff --git a/test/conformance/enqueue/enqueue_adapter_cuda_loader.match b/test/conformance/enqueue/enqueue_adapter_cuda_loader.match new file mode 120000 index 0000000000..cb1657d41a --- /dev/null +++ b/test/conformance/enqueue/enqueue_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/enqueue/enqueue_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/enqueue/enqueue_adapter_hip_loader.match b/test/conformance/enqueue/enqueue_adapter_hip_loader.match new file mode 120000 index 0000000000..3a78dd23ce --- /dev/null +++ b/test/conformance/enqueue/enqueue_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/enqueue/enqueue_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/enqueue/enqueue_adapter_level_zero_loader.match b/test/conformance/enqueue/enqueue_adapter_level_zero_loader.match new file mode 120000 index 0000000000..baad4dd3ed --- /dev/null +++ b/test/conformance/enqueue/enqueue_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/enqueue/enqueue_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/enqueue/enqueue_adapter_level_zero_v2_loader.match b/test/conformance/enqueue/enqueue_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..baf26ae9c9 --- /dev/null +++ b/test/conformance/enqueue/enqueue_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/enqueue/enqueue_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/enqueue/enqueue_adapter_native_cpu_loader.match b/test/conformance/enqueue/enqueue_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..2629e69b3a --- /dev/null +++ b/test/conformance/enqueue/enqueue_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/enqueue/enqueue_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/enqueue/enqueue_adapter_opencl_loader.match b/test/conformance/enqueue/enqueue_adapter_opencl_loader.match new file mode 120000 index 0000000000..feb49e2b36 --- /dev/null +++ b/test/conformance/enqueue/enqueue_adapter_opencl_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/enqueue/enqueue_adapter_opencl.match \ No newline at end of file diff --git a/test/conformance/event/event_adapter_cuda_loader.match b/test/conformance/event/event_adapter_cuda_loader.match new file mode 120000 index 0000000000..f5cd9e5407 --- /dev/null +++ b/test/conformance/event/event_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/event/event_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/event/event_adapter_hip_loader.match b/test/conformance/event/event_adapter_hip_loader.match new file mode 120000 index 0000000000..1a9676725d --- /dev/null +++ b/test/conformance/event/event_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/event/event_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/event/event_adapter_level_zero_loader.match b/test/conformance/event/event_adapter_level_zero_loader.match new file mode 120000 index 0000000000..6db9e58231 --- /dev/null +++ b/test/conformance/event/event_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/event/event_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/event/event_adapter_level_zero_v2_loader.match b/test/conformance/event/event_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..4e60d87a90 --- /dev/null +++ b/test/conformance/event/event_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/event/event_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/event/event_adapter_native_cpu_loader.match b/test/conformance/event/event_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..bac12efac6 --- /dev/null +++ b/test/conformance/event/event_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/event/event_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/exp_command_buffer/exp_command_buffer_adapter_cuda_loader.match b/test/conformance/exp_command_buffer/exp_command_buffer_adapter_cuda_loader.match new file mode 120000 index 0000000000..0540fb598b --- /dev/null +++ b/test/conformance/exp_command_buffer/exp_command_buffer_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/exp_command_buffer/exp_command_buffer_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/exp_command_buffer/exp_command_buffer_adapter_hip_loader.match b/test/conformance/exp_command_buffer/exp_command_buffer_adapter_hip_loader.match new file mode 120000 index 0000000000..1a723b6905 --- /dev/null +++ b/test/conformance/exp_command_buffer/exp_command_buffer_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/exp_command_buffer/exp_command_buffer_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/exp_command_buffer/exp_command_buffer_adapter_level_zero_v2_loader.match b/test/conformance/exp_command_buffer/exp_command_buffer_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..f88e397d02 --- /dev/null +++ b/test/conformance/exp_command_buffer/exp_command_buffer_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/exp_command_buffer/exp_command_buffer_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/exp_command_buffer/exp_command_buffer_adapter_native_cpu_loader.match b/test/conformance/exp_command_buffer/exp_command_buffer_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..c2aa252b67 --- /dev/null +++ b/test/conformance/exp_command_buffer/exp_command_buffer_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/exp_command_buffer/exp_command_buffer_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/exp_enqueue_native/exp_enqueue_native_adapter_level_zero_v2_loader.match b/test/conformance/exp_enqueue_native/exp_enqueue_native_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..7b663aa699 --- /dev/null +++ b/test/conformance/exp_enqueue_native/exp_enqueue_native_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/exp_enqueue_native/exp_enqueue_native_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/exp_launch_properties/exp_launch_properties_adapter_native_cpu_loader.match b/test/conformance/exp_launch_properties/exp_launch_properties_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..b382d4fa48 --- /dev/null +++ b/test/conformance/exp_launch_properties/exp_launch_properties_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/exp_launch_properties/exp_launch_properties_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/integration/integration_adapter_level_zero_loader.match b/test/conformance/integration/integration_adapter_level_zero_loader.match new file mode 120000 index 0000000000..7cc969ea09 --- /dev/null +++ b/test/conformance/integration/integration_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/integration/integration_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/integration/integration_adapter_level_zero_v2_loader.match b/test/conformance/integration/integration_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..3a66285047 --- /dev/null +++ b/test/conformance/integration/integration_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/integration/integration_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/integration/integration_adapter_native_cpu_loader.match b/test/conformance/integration/integration_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..6555251476 --- /dev/null +++ b/test/conformance/integration/integration_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/integration/integration_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/integration/integration_adapter_opencl_loader.match b/test/conformance/integration/integration_adapter_opencl_loader.match new file mode 120000 index 0000000000..2015a5a4c7 --- /dev/null +++ b/test/conformance/integration/integration_adapter_opencl_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/integration/integration_adapter_opencl.match \ No newline at end of file diff --git a/test/conformance/kernel/kernel_adapter_cuda_loader.match b/test/conformance/kernel/kernel_adapter_cuda_loader.match new file mode 120000 index 0000000000..da21e3c14e --- /dev/null +++ b/test/conformance/kernel/kernel_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/kernel/kernel_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/kernel/kernel_adapter_hip_loader.match b/test/conformance/kernel/kernel_adapter_hip_loader.match new file mode 120000 index 0000000000..0b1c409a23 --- /dev/null +++ b/test/conformance/kernel/kernel_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/kernel/kernel_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/kernel/kernel_adapter_level_zero_loader.match b/test/conformance/kernel/kernel_adapter_level_zero_loader.match new file mode 120000 index 0000000000..55b90ced5d --- /dev/null +++ b/test/conformance/kernel/kernel_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/kernel/kernel_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/kernel/kernel_adapter_level_zero_v2_loader.match b/test/conformance/kernel/kernel_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..e59fb35a13 --- /dev/null +++ b/test/conformance/kernel/kernel_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/kernel/kernel_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/kernel/kernel_adapter_native_cpu_loader.match b/test/conformance/kernel/kernel_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..dc27f07a9b --- /dev/null +++ b/test/conformance/kernel/kernel_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/kernel/kernel_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/kernel/kernel_adapter_opencl_loader.match b/test/conformance/kernel/kernel_adapter_opencl_loader.match new file mode 120000 index 0000000000..9cde5525dd --- /dev/null +++ b/test/conformance/kernel/kernel_adapter_opencl_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/kernel/kernel_adapter_opencl.match \ No newline at end of file diff --git a/test/conformance/memory/memory_adapter_cuda_loader.match b/test/conformance/memory/memory_adapter_cuda_loader.match new file mode 120000 index 0000000000..f8f8155083 --- /dev/null +++ b/test/conformance/memory/memory_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/memory/memory_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/memory/memory_adapter_hip_loader.match b/test/conformance/memory/memory_adapter_hip_loader.match new file mode 120000 index 0000000000..39d25de543 --- /dev/null +++ b/test/conformance/memory/memory_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/memory/memory_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/memory/memory_adapter_level_zero_loader.match b/test/conformance/memory/memory_adapter_level_zero_loader.match new file mode 120000 index 0000000000..64dc4739c5 --- /dev/null +++ b/test/conformance/memory/memory_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/memory/memory_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/memory/memory_adapter_level_zero_v2_loader.match b/test/conformance/memory/memory_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..af9d99ed5d --- /dev/null +++ b/test/conformance/memory/memory_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/memory/memory_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/memory/memory_adapter_native_cpu_loader.match b/test/conformance/memory/memory_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..53097550f9 --- /dev/null +++ b/test/conformance/memory/memory_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/memory/memory_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/memory/memory_adapter_opencl_loader.match b/test/conformance/memory/memory_adapter_opencl_loader.match new file mode 120000 index 0000000000..39d91886a8 --- /dev/null +++ b/test/conformance/memory/memory_adapter_opencl_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/memory/memory_adapter_opencl.match \ No newline at end of file diff --git a/test/conformance/platform/platform_adapter_cuda_loader.match b/test/conformance/platform/platform_adapter_cuda_loader.match new file mode 120000 index 0000000000..127511dca6 --- /dev/null +++ b/test/conformance/platform/platform_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/platform/platform_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/platform/platform_adapter_hip_loader.match b/test/conformance/platform/platform_adapter_hip_loader.match new file mode 120000 index 0000000000..e1cf30214d --- /dev/null +++ b/test/conformance/platform/platform_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/platform/platform_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/platform/platform_adapter_native_cpu_loader.match b/test/conformance/platform/platform_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..df4afb90da --- /dev/null +++ b/test/conformance/platform/platform_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/platform/platform_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/program/program_adapter_cuda_loader.match b/test/conformance/program/program_adapter_cuda_loader.match new file mode 120000 index 0000000000..2dd487b7db --- /dev/null +++ b/test/conformance/program/program_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/program/program_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/program/program_adapter_hip_loader.match b/test/conformance/program/program_adapter_hip_loader.match new file mode 120000 index 0000000000..6e84054aa9 --- /dev/null +++ b/test/conformance/program/program_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/program/program_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/program/program_adapter_level_zero_loader.match b/test/conformance/program/program_adapter_level_zero_loader.match new file mode 120000 index 0000000000..25e20a1e7c --- /dev/null +++ b/test/conformance/program/program_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/program/program_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/program/program_adapter_level_zero_v2_loader.match b/test/conformance/program/program_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..9730cd0319 --- /dev/null +++ b/test/conformance/program/program_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/program/program_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/program/program_adapter_native_cpu_loader.match b/test/conformance/program/program_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..9d80c55d45 --- /dev/null +++ b/test/conformance/program/program_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/program/program_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/program/program_adapter_opencl_loader.match b/test/conformance/program/program_adapter_opencl_loader.match new file mode 120000 index 0000000000..8e40493ecd --- /dev/null +++ b/test/conformance/program/program_adapter_opencl_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/program/program_adapter_opencl.match \ No newline at end of file diff --git a/test/conformance/queue/queue_adapter_level_zero_loader.match b/test/conformance/queue/queue_adapter_level_zero_loader.match new file mode 120000 index 0000000000..0e173c3795 --- /dev/null +++ b/test/conformance/queue/queue_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/queue/queue_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/queue/queue_adapter_native_cpu_loader.match b/test/conformance/queue/queue_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..e8e0229c84 --- /dev/null +++ b/test/conformance/queue/queue_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/queue/queue_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/sampler/sampler_adapter_level_zero_loader.match b/test/conformance/sampler/sampler_adapter_level_zero_loader.match new file mode 120000 index 0000000000..5cfb22ada0 --- /dev/null +++ b/test/conformance/sampler/sampler_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/sampler/sampler_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/sampler/sampler_adapter_level_zero_v2_loader.match b/test/conformance/sampler/sampler_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..8a6a685f3b --- /dev/null +++ b/test/conformance/sampler/sampler_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/sampler/sampler_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/source/environment.cpp b/test/conformance/source/environment.cpp index 05dbe8c847..2284644a3e 100644 --- a/test/conformance/source/environment.cpp +++ b/test/conformance/source/environment.cpp @@ -6,7 +6,9 @@ #include #include #include +#include +#include "ur_api.h" #include "ur_filesystem_resolved.hpp" #ifdef KERNELS_ENVIRONMENT @@ -23,6 +25,38 @@ constexpr char ERROR_NO_ADAPTER[] = "Could not load adapter"; PlatformEnvironment *PlatformEnvironment::instance = nullptr; +constexpr std::pair backends[] = { + {"LEVEL_ZERO", UR_PLATFORM_BACKEND_LEVEL_ZERO}, + {"L0", UR_PLATFORM_BACKEND_LEVEL_ZERO}, + {"OPENCL", UR_PLATFORM_BACKEND_OPENCL}, + {"CUDA", UR_PLATFORM_BACKEND_CUDA}, + {"HIP", UR_PLATFORM_BACKEND_HIP}, + {"NATIVE_CPU", UR_PLATFORM_BACKEND_NATIVE_CPU}, + {"UNKNOWN", UR_PLATFORM_BACKEND_UNKNOWN}, +}; + +namespace { +constexpr const char *backend_to_str(ur_platform_backend_t backend) { + for (auto b : backends) { + if (b.second == backend) { + return b.first; + } + } + return "INVALID"; +}; + +ur_platform_backend_t str_to_backend(std::string str) { + + std::transform(str.begin(), str.end(), str.begin(), ::toupper); + for (auto b : backends) { + if (b.first == str) { + return b.second; + } + } + return UR_PLATFORM_BACKEND_UNKNOWN; +}; +} // namespace + std::ostream &operator<<(std::ostream &out, const ur_platform_handle_t &platform) { size_t size; @@ -62,6 +96,10 @@ std::ostream &operator<<(std::ostream &out, uur::PlatformEnvironment::PlatformEnvironment(int argc, char **argv) : platform_options{parsePlatformOptions(argc, argv)} { instance = this; + // Check for errors from parsing platform options + if (!error.empty()) { + return; + } ur_loader_config_handle_t config; if (urLoaderConfigCreate(&config) == UR_RESULT_SUCCESS) { @@ -100,8 +138,13 @@ uur::PlatformEnvironment::PlatformEnvironment(int argc, char **argv) adapters.resize(adapter_count); urAdapterGet(adapter_count, adapters.data(), nullptr); - // Search through the adapters individually so we can store the one we end - // up choosing. + struct platform_info { + ur_adapter_handle_t adapter; + ur_platform_handle_t platform; + std::string name; + ur_platform_backend_t backend; + }; + std::vector platforms; for (auto a : adapters) { uint32_t count = 0; if (urPlatformGet(&a, 1, 0, nullptr, &count)) { @@ -109,66 +152,111 @@ uur::PlatformEnvironment::PlatformEnvironment(int argc, char **argv) return; } - if (count == 0) { - error = "Failed to find any platforms."; - return; - } - - std::vector platforms(count); - if (urPlatformGet(&a, 1, count, platforms.data(), nullptr)) { + std::vector platform_list(count); + if (urPlatformGet(&a, 1, count, platform_list.data(), nullptr)) { error = "urPlatformGet failed to get platforms."; return; } - if (platform_options.platform_name.empty()) { - - if (platforms.size() == 1 || - platform_options.platforms_count == 1) { - platform = platforms[0]; - adapter = a; - } else { - std::stringstream ss_error; - ss_error << "Select a single platform from below using the " - "--platform=NAME " - "command-line option:" - << platforms << std::endl - << "or set --platforms_count=1."; - error = ss_error.str(); + for (auto p : platform_list) { + ur_platform_backend_t backend; + if (urPlatformGetInfo(p, UR_PLATFORM_INFO_BACKEND, + sizeof(ur_platform_backend_t), &backend, + nullptr)) { + error = "urPlatformGetInfo failed to get backend."; return; } - } else { - for (auto candidate : platforms) { - size_t size; - if (urPlatformGetInfo(candidate, UR_PLATFORM_INFO_NAME, 0, - nullptr, &size)) { - error = "urPlatformGetInfoFailed"; - return; - } - std::vector platform_name(size); - if (urPlatformGetInfo(candidate, UR_PLATFORM_INFO_NAME, size, - platform_name.data(), nullptr)) { - error = "urPlatformGetInfo() failed"; - return; - } - if (platform_options.platform_name == platform_name.data()) { - platform = candidate; - adapter = a; - break; - } + + size_t size; + if (urPlatformGetInfo(p, UR_PLATFORM_INFO_NAME, 0, nullptr, + &size)) { + error = "urPlatformGetInfo failed to get name length."; + return; } - if (!platform) { - std::stringstream ss_error; - ss_error << "Platform \"" << platform_options.platform_name - << "\" not found. Select a single platform from below " - "using the " - "--platform=NAME command-line options:" - << platforms << std::endl - << "or set --platforms_count=1."; - error = ss_error.str(); + std::vector platform_name{}; + platform_name.reserve(size); + if (urPlatformGetInfo(p, UR_PLATFORM_INFO_NAME, size, + platform_name.data(), nullptr)) { + error = "urPlatformGetInfo failed to get name."; return; } + + platforms.push_back(platform_info{ + a, p, std::string(platform_name.data()), backend}); } } + + std::string default_name{}; + std::map backend_platform_names{}; + auto stream = std::stringstream{platform_options.platform_name}; + for (std::string filter; std::getline(stream, filter, ';');) { + auto split = filter.find(':'); + if (split == std::string::npos) { + default_name = filter; + } else { + backend_platform_names.insert( + {str_to_backend(filter.substr(0, split)), + filter.substr(split + 1)}); + } + } + + std::vector platforms_filtered{}; + std::copy_if(platforms.begin(), platforms.end(), + std::inserter(platforms_filtered, platforms_filtered.begin()), + [&](platform_info info) { + if (!default_name.empty() && default_name != info.name) { + return false; + } + if (backend_platform_names.count(info.backend) && + backend_platform_names[info.backend] != info.name) { + return false; + } + if (platform_options.platform_backend && + platform_options.platform_backend != info.backend) { + return false; + } + return true; + }); + + if (platforms_filtered.size() == 0) { + std::stringstream errstr; + errstr << "No platforms were found with the following filters:"; + if (platform_options.platform_backend) { + errstr << " --backend=" + << backend_to_str(*platform_options.platform_backend); + } + if (!platform_options.platform_name.empty()) { + errstr << " --platform=\"" << platform_options.platform_name + << "\""; + } + if (!platform_options.platform_backend && + platform_options.platform_name.empty()) { + errstr << " (none)"; + } + errstr << "\nAvailable platforms:\n"; + for (auto p : platforms) { + errstr << " --backend=" << backend_to_str(p.backend) + << " --platform=\"" << p.name << "\"\n"; + } + error = errstr.str(); + } else if (platforms_filtered.size() == 1 || + platform_options.platforms_count == 1) { + auto &selected = platforms_filtered[0]; + platform = selected.platform; + adapter = selected.adapter; + std::cerr << "Selected platform: [" << backend_to_str(selected.backend) + << "] " << selected.name << "\n"; + } else if (platforms_filtered.size() > 1) { + std::stringstream errstr; + errstr << "Multiple possible platforms found; please select one of the " + "ones below or set --platforms_count=1:\n"; + for (auto p : platforms_filtered) { + errstr << " --backend=" << backend_to_str(p.backend) + << " --platform=\"" << p.name << "\"\n"; + } + error = errstr.str(); + } + return; } void uur::PlatformEnvironment::SetUp() { @@ -196,6 +284,26 @@ void uur::PlatformEnvironment::TearDown() { PlatformEnvironment::PlatformOptions PlatformEnvironment::parsePlatformOptions(int argc, char **argv) { PlatformOptions options{}; + auto parse_backend = [&](std::string backend_string) { + options.platform_backend = str_to_backend(backend_string); + if (options.platform_backend == UR_PLATFORM_BACKEND_UNKNOWN) { + std::stringstream errstr{error}; + errstr << "--backend not valid; expected one of ["; + bool first = true; + for (auto b : backends) { + if (!first) { + errstr << ", "; + } + errstr << b.first; + first = false; + } + errstr << "], but got `" << backend_string << "`"; + error = errstr.str(); + return false; + } + return true; + }; + for (int argi = 1; argi < argc; ++argi) { const char *arg = argv[argi]; if (!(std::strcmp(arg, "-h") && std::strcmp(arg, "--help"))) { @@ -205,6 +313,12 @@ PlatformEnvironment::parsePlatformOptions(int argc, char **argv) { arg, "--platform=", sizeof("--platform=") - 1) == 0) { options.platform_name = std::string(&arg[std::strlen("--platform=")]); + } else if (std::strncmp(arg, "--backend=", sizeof("--backend=") - 1) == + 0) { + std::string backend_string{&arg[std::strlen("--backend=")]}; + if (!parse_backend(backend_string)) { + return options; + } } else if (std::strncmp(arg, "--platforms_count=", sizeof("--platforms_count=") - 1) == 0) { options.platforms_count = std::strtoul( @@ -212,7 +326,7 @@ PlatformEnvironment::parsePlatformOptions(int argc, char **argv) { } } - /* If a platform was not provided using the --platform command line option, + /* If a platform was not provided using the --platform/--backend command line options, * check if environment variable is set to use as a fallback. */ if (options.platform_name.empty()) { auto env_platform = ur_getenv("UR_CTS_ADAPTER_PLATFORM"); @@ -220,6 +334,14 @@ PlatformEnvironment::parsePlatformOptions(int argc, char **argv) { options.platform_name = env_platform.value(); } } + if (!options.platform_backend) { + auto env_backend = ur_getenv("UR_CTS_BACKEND"); + if (env_backend.has_value()) { + if (!parse_backend(env_backend.value())) { + return options; + } + } + } return options; } diff --git a/test/conformance/testing/include/uur/environment.h b/test/conformance/testing/include/uur/environment.h index ec4a39fe7f..c85dcf4037 100644 --- a/test/conformance/testing/include/uur/environment.h +++ b/test/conformance/testing/include/uur/environment.h @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -17,6 +18,7 @@ struct PlatformEnvironment : ::testing::Environment { struct PlatformOptions { std::string platform_name; + std::optional platform_backend; unsigned long platforms_count = 0; }; @@ -28,11 +30,11 @@ struct PlatformEnvironment : ::testing::Environment { PlatformOptions parsePlatformOptions(int argc, char **argv); + std::string error{}; PlatformOptions platform_options; std::vector adapters{}; ur_adapter_handle_t adapter = nullptr; ur_platform_handle_t platform = nullptr; - std::string error; static PlatformEnvironment *instance; }; diff --git a/test/conformance/usm/usm_adapter_cuda_loader.match b/test/conformance/usm/usm_adapter_cuda_loader.match new file mode 120000 index 0000000000..22723bf600 --- /dev/null +++ b/test/conformance/usm/usm_adapter_cuda_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/usm/usm_adapter_cuda.match \ No newline at end of file diff --git a/test/conformance/usm/usm_adapter_hip_loader.match b/test/conformance/usm/usm_adapter_hip_loader.match new file mode 120000 index 0000000000..afb6169ff4 --- /dev/null +++ b/test/conformance/usm/usm_adapter_hip_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/usm/usm_adapter_hip.match \ No newline at end of file diff --git a/test/conformance/usm/usm_adapter_level_zero_loader.match b/test/conformance/usm/usm_adapter_level_zero_loader.match new file mode 120000 index 0000000000..22898fd70d --- /dev/null +++ b/test/conformance/usm/usm_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/usm/usm_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/usm/usm_adapter_level_zero_v2_loader.match b/test/conformance/usm/usm_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..53ebcb357c --- /dev/null +++ b/test/conformance/usm/usm_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/usm/usm_adapter_level_zero_v2.match \ No newline at end of file diff --git a/test/conformance/usm/usm_adapter_native_cpu_loader.match b/test/conformance/usm/usm_adapter_native_cpu_loader.match new file mode 120000 index 0000000000..20249d128d --- /dev/null +++ b/test/conformance/usm/usm_adapter_native_cpu_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/usm/usm_adapter_native_cpu.match \ No newline at end of file diff --git a/test/conformance/usm/usm_adapter_opencl_loader.match b/test/conformance/usm/usm_adapter_opencl_loader.match new file mode 120000 index 0000000000..52345e08be --- /dev/null +++ b/test/conformance/usm/usm_adapter_opencl_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/usm/usm_adapter_opencl.match \ No newline at end of file diff --git a/test/conformance/virtual_memory/virtual_memory_adapter_level_zero_loader.match b/test/conformance/virtual_memory/virtual_memory_adapter_level_zero_loader.match new file mode 120000 index 0000000000..dd3b098729 --- /dev/null +++ b/test/conformance/virtual_memory/virtual_memory_adapter_level_zero_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/virtual_memory/virtual_memory_adapter_level_zero.match \ No newline at end of file diff --git a/test/conformance/virtual_memory/virtual_memory_adapter_level_zero_v2_loader.match b/test/conformance/virtual_memory/virtual_memory_adapter_level_zero_v2_loader.match new file mode 120000 index 0000000000..91146c6752 --- /dev/null +++ b/test/conformance/virtual_memory/virtual_memory_adapter_level_zero_v2_loader.match @@ -0,0 +1 @@ +/home/ross/dpcpp/unified-runtime/test/conformance/virtual_memory/virtual_memory_adapter_level_zero_v2.match \ No newline at end of file