From 4d88b9ae0b6270820cdb032cdf7f173ef3225cd9 Mon Sep 17 00:00:00 2001 From: Patryk Kaminski Date: Fri, 16 Feb 2024 13:04:19 +0100 Subject: [PATCH] Refactor kernel triggering in fuzz tests - Properly set up and trigger the test kernel within the fuzz test. - Change the test kernel used from "bar" to "fill". - Refactor env vars used in test. --- test/fuzz/CMakeLists.txt | 2 +- test/fuzz/urFuzz.cpp | 37 +++++++++++++++++++++++++++---------- test/fuzz/utils.hpp | 6 +++++- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/test/fuzz/CMakeLists.txt b/test/fuzz/CMakeLists.txt index 897075c53d..9ed6e323dd 100644 --- a/test/fuzz/CMakeLists.txt +++ b/test/fuzz/CMakeLists.txt @@ -38,7 +38,7 @@ function(add_fuzz_test name label) ENVIRONMENT "${ENV_VARS}") # TODO: Should we check if this sanitizer flag is available? target_compile_options(${TEST_TARGET_NAME} PRIVATE -g -fsanitize=fuzzer) - target_compile_definitions(${TEST_TARGET_NAME} PRIVATE -DKERNEL_IL_PATH="${UR_CONFORMANCE_DEVICE_BINARIES_DIR}/bar/sycl_spir641.spv") + target_compile_definitions(${TEST_TARGET_NAME} PRIVATE -DKERNEL_IL_PATH="${UR_CONFORMANCE_DEVICE_BINARIES_DIR}/fill/spir64.bin.0") target_include_directories(${TEST_TARGET_NAME} PRIVATE ${UR_CONFORMANCE_DEVICE_BINARIES_DIR}) add_dependencies(${TEST_TARGET_NAME} generate_device_binaries) diff --git a/test/fuzz/urFuzz.cpp b/test/fuzz/urFuzz.cpp index f91ca23633..d1a15c4c55 100644 --- a/test/fuzz/urFuzz.cpp +++ b/test/fuzz/urFuzz.cpp @@ -353,36 +353,53 @@ int ur_program_create_with_il(TestState &state) { } std::vector il_bin; - ur_program_handle_t program = nullptr; - ur_kernel_handle_t kernel = nullptr; - ur_queue_handle_t queue = nullptr; - ur_event_handle_t event = nullptr; + ur_program_handle_t program; + ur_kernel_handle_t kernel; + ur_queue_handle_t queue; + ur_event_handle_t event; auto &context = state.contexts[state.context_num]->handle; auto &device = state.devices[state.device_num]; std::string kernel_name = - uur::device_binaries::program_kernel_map["bar"][0]; + uur::device_binaries::program_kernel_map["fill"][0]; il_bin = state.load_kernel_source(); if (il_bin.empty()) { return -1; } + constexpr int vec_size = 64; + std::vector vec(vec_size, 0); + urProgramCreateWithIL(context, il_bin.data(), il_bin.size(), nullptr, &program); urProgramBuild(context, program, nullptr); + + ur_mem_handle_t memory_buffer; + urMemBufferCreate(context, UR_MEM_FLAG_READ_WRITE, vec_size * sizeof(int), + nullptr, &memory_buffer); urKernelCreate(program, kernel_name.data(), &kernel); + urKernelSetArgMemObj(kernel, 0, nullptr, memory_buffer); + urQueueCreate(context, device, nullptr, &queue); - const uint32_t nDim = 3; - const size_t gWorkOffset[] = {0, 0, 0}; - const size_t gWorkSize[] = {128, 128, 128}; + urEnqueueMemBufferWrite(queue, memory_buffer, true, 0, + vec_size * sizeof(int), vec.data(), 0, nullptr, + &event); + urEventWait(1, &event); + urEventRelease(event); - urEnqueueKernelLaunch(queue, kernel, nDim, gWorkOffset, gWorkSize, nullptr, - 0, nullptr, &event); + constexpr uint32_t nDim = 3; + const size_t gWorkOffset[] = {0, 0, 0}; + const size_t gWorkSize[] = {vec_size * 4, 1, 1}; + const size_t lWorkSize[] = {1, 1, 1}; + urEnqueueKernelLaunch(queue, kernel, nDim, gWorkOffset, gWorkSize, + lWorkSize, 0, nullptr, &event); urEventWait(1, &event); urEventRelease(event); + urQueueFinish(queue); + urMemRelease(memory_buffer); urQueueRelease(queue); urKernelRelease(kernel); urProgramRelease(program); diff --git a/test/fuzz/utils.hpp b/test/fuzz/utils.hpp index a65fc2e381..c6911d0b06 100644 --- a/test/fuzz/utils.hpp +++ b/test/fuzz/utils.hpp @@ -105,7 +105,11 @@ struct TestState { uint8_t context_num; TestState(std::unique_ptr data_provider) - : data_provider(std::move(data_provider)) {} + : data_provider(std::move(data_provider)) { + num_adapters = 0; + num_platforms = 0; + num_devices = 0; + } template int get_next_input_data(IntType *data) { if (data_provider->remaining_bytes() < sizeof(IntType)) {