From e518acea15297b06e55be2f0e8cda23616d3d1b7 Mon Sep 17 00:00:00 2001 From: Marcel Skierkowski Date: Fri, 14 Feb 2025 10:21:44 +0000 Subject: [PATCH] test: mock Filesystem in IOQTaskTestsMt ULTs The MockZebin module is used, which has prepared CopyBuffer kernel, so it does not need to be fetched from a file Related-To: NEO-14058 Signed-off-by: Marcel Skierkowski --- .../fixtures/hello_world_kernel_fixture.h | 45 ++++++++++++++++++- .../unit_test/fixtures/program_fixture.cpp | 21 ++++++++- .../test/unit_test/fixtures/program_fixture.h | 7 ++- .../command_queue/ioq_task_tests_mt.cpp | 44 +++++++++++++++++- 4 files changed, 112 insertions(+), 5 deletions(-) diff --git a/opencl/test/unit_test/fixtures/hello_world_kernel_fixture.h b/opencl/test/unit_test/fixtures/hello_world_kernel_fixture.h index 9c44f604fc..43abac4f62 100644 --- a/opencl/test/unit_test/fixtures/hello_world_kernel_fixture.h +++ b/opencl/test/unit_test/fixtures/hello_world_kernel_fixture.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -7,8 +7,10 @@ #pragma once #include "shared/source/device/device.h" +#include "shared/source/helpers/constants.h" #include "shared/source/helpers/file_io.h" #include "shared/test/common/helpers/test_files.h" +#include "shared/test/common/mocks/mock_modules_zebin.h" #include "opencl/source/kernel/kernel.h" #include "opencl/source/platform/platform.h" @@ -80,6 +82,47 @@ struct HelloWorldKernelFixture : public ProgramFixture { EXPECT_EQ(CL_SUCCESS, retVal); } + void setUp(ClDevice *pDevice, const char *kernelNameStr) { + ProgramFixture::setUp(); + pKernelName = new std::string(kernelNameStr); + + constexpr auto numBits = is32bit ? Elf::EI_CLASS_32 : Elf::EI_CLASS_64; + auto zebinData = std::make_unique>(pDevice->getHardwareInfo(), 32); + const auto &src = zebinData->storage; + + ASSERT_NE(nullptr, src.data()); + ASSERT_NE(0u, src.size()); + + const unsigned char *binaries[1] = {reinterpret_cast(src.data())}; + const size_t binarySize = src.size(); + + auto deviceVector = toClDeviceVector(*pDevice); + pContext = Context::create(nullptr, deviceVector, nullptr, nullptr, retVal); + ASSERT_EQ(CL_SUCCESS, retVal); + ASSERT_NE(nullptr, pContext); + + createProgramFromBinary( + pContext, + deviceVector, + binaries, + &binarySize); + + ASSERT_NE(nullptr, pProgram); + + retVal = pProgram->build( + pProgram->getDevices(), + nullptr); + ASSERT_EQ(CL_SUCCESS, retVal); + // create a kernel + pMultiDeviceKernel = MultiDeviceKernel::create( + pProgram, + pProgram->getKernelInfosForKernel(pKernelName->c_str()), + retVal); + pKernel = static_cast(pMultiDeviceKernel->getKernel(pDevice->getRootDeviceIndex())); + EXPECT_NE(nullptr, pKernel); + EXPECT_EQ(CL_SUCCESS, retVal); + } + void tearDown() { delete pKernelName; delete pTestFilename; diff --git a/opencl/test/unit_test/fixtures/program_fixture.cpp b/opencl/test/unit_test/fixtures/program_fixture.cpp index 57dabf56bd..02873efe77 100644 --- a/opencl/test/unit_test/fixtures/program_fixture.cpp +++ b/opencl/test/unit_test/fixtures/program_fixture.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -96,6 +96,25 @@ void ProgramFixture::createProgramFromBinary(Context *pContext, ASSERT_EQ(CL_SUCCESS, retVal); } +void ProgramFixture::createProgramFromBinary(Context *pContext, + const ClDeviceVector &deviceVector, + const unsigned char **binary, + const size_t *binarySize) { + cleanup(); + cl_int retVal = CL_SUCCESS; + + pProgram = Program::create( + pContext, + deviceVector, + binarySize, + binary, + nullptr, + retVal); + + ASSERT_NE(nullptr, pProgram); + ASSERT_EQ(CL_SUCCESS, retVal); +} + NEOProgramFixture::NEOProgramFixture() = default; NEOProgramFixture::~NEOProgramFixture() = default; diff --git a/opencl/test/unit_test/fixtures/program_fixture.h b/opencl/test/unit_test/fixtures/program_fixture.h index 44b7ee92fb..050076c0c2 100644 --- a/opencl/test/unit_test/fixtures/program_fixture.h +++ b/opencl/test/unit_test/fixtures/program_fixture.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -32,6 +32,11 @@ class NEOProgramFixture { class ProgramFixture { public: + void createProgramFromBinary(Context *pContext, + const ClDeviceVector &deviceVector, + const unsigned char **binary, + const size_t *binarySize); + void createProgramFromBinary(Context *pContext, const ClDeviceVector &deviceVector, const std::string &binaryFileName, diff --git a/opencl/test/unit_test/mt_tests/command_queue/ioq_task_tests_mt.cpp b/opencl/test/unit_test/mt_tests/command_queue/ioq_task_tests_mt.cpp index 8d94dab8b9..b7a5f9e2c1 100644 --- a/opencl/test/unit_test/mt_tests/command_queue/ioq_task_tests_mt.cpp +++ b/opencl/test/unit_test/mt_tests/command_queue/ioq_task_tests_mt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -14,7 +14,47 @@ using namespace NEO; -typedef HelloWorldTest IOQTaskTestsMt; +struct IOQTaskTestsMt : public HelloWorldTest { + void SetUp() override { + ClDeviceFixture::setUp(); + ASSERT_NE(nullptr, pClDevice); + pDevice->disableSecondaryEngines = true; + + CommandQueueFixture::setUp(pClDevice, 0); + ASSERT_NE(nullptr, pCmdQ); + CommandStreamFixture::setUp(pCmdQ); + ASSERT_NE(nullptr, pCS); + IndirectHeapFixture::setUp(pCmdQ); + KernelFixture::setUp(pClDevice, kernelName); + ASSERT_NE(nullptr, pKernel); + + auto retVal = CL_INVALID_VALUE; + BufferDefaults::context = new MockContext(pClDevice); + + destBuffer = Buffer::create( + BufferDefaults::context, + CL_MEM_READ_WRITE, + sizeUserMemory, + nullptr, + retVal); + + srcBuffer = Buffer::create( + BufferDefaults::context, + CL_MEM_READ_WRITE, + sizeUserMemory, + nullptr, + retVal); + + pDestMemory = destBuffer->getCpuAddressForMapping(); + pSrcMemory = srcBuffer->getCpuAddressForMapping(); + + memset(pDestMemory, destPattern, sizeUserMemory); + memset(pSrcMemory, srcPattern, sizeUserMemory); + + pKernel->setArg(0, srcBuffer); + pKernel->setArg(1, destBuffer); + } +}; TEST_F(IOQTaskTestsMt, GivenBlockingAndBlockedOnUserEventWhenReadingBufferThenTaskCountAndTaskLevelAreIncremented) { auto buffer = std::unique_ptr(BufferHelper<>::create());