refactor: move builtinOpsBuilders from ClExecutionEnvironment to ClDevice

Signed-off-by: Fabian Zwoliński <fabian.zwolinski@intel.com>
This commit is contained in:
Fabian Zwoliński
2025-11-07 09:36:19 +00:00
committed by Compute-Runtime-Automation
parent 48c11c24ff
commit 5abdcc045e
23 changed files with 82 additions and 126 deletions

View File

@@ -1090,8 +1090,7 @@ class BuiltInOp<EBuiltInOps::fillImage1dBufferHeapless> : public BuiltInOp<EBuil
BuiltinDispatchInfoBuilder &BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, ClDevice &device) {
uint32_t operationId = static_cast<uint32_t>(operation);
auto &builtins = *device.getDevice().getBuiltIns();
auto clExecutionEnvironment = static_cast<ClExecutionEnvironment *>(device.getExecutionEnvironment());
auto &operationBuilder = clExecutionEnvironment->peekBuilders(device.getRootDeviceIndex())[operationId];
auto &operationBuilder = device.peekBuilders()[operationId];
switch (operation) {
case EBuiltInOps::copyBufferToBuffer:
std::call_once(operationBuilder.second, [&] { operationBuilder.first = std::make_unique<BuiltInOp<EBuiltInOps::copyBufferToBuffer>>(builtins, device); });

View File

@@ -20,6 +20,7 @@
#include "shared/source/os_interface/driver_info.h"
#include "shared/source/os_interface/os_interface.h"
#include "opencl/source/built_ins/builtins_dispatch_builder.h"
#include "opencl/source/gtpin/gtpin_gfx_core_helper.h"
#include "opencl/source/helpers/cl_gfx_core_helper.h"
#include "opencl/source/platform/platform.h"
@@ -61,12 +62,17 @@ ClDevice::ClDevice(Device &device, ClDevice &rootClDevice, Platform *platform) :
subDevices.push_back(std::move(pClSubDevice));
}
if (!device.isSubDevice()) {
builtinOpsBuilders = std::make_unique<BuilderT[]>(EBuiltInOps::count);
}
}
ClDevice::ClDevice(Device &device, Platform *platformId) : ClDevice(device, *this, platformId) {
}
ClDevice::~ClDevice() {
builtinOpsBuilders.reset();
for (auto &subDevice : subDevices) {
subDevice.reset();
}

View File

@@ -44,6 +44,8 @@ class GfxCoreHelper;
class ProductHelper;
class GTPinGfxCoreHelper;
class CompilerProductHelper;
class BuiltinDispatchInfoBuilder;
enum class EngineGroupType : uint32_t;
template <>
@@ -137,6 +139,9 @@ class ClDevice : public BaseObject<_cl_device_id> {
std::unique_ptr<GTPinGfxCoreHelper> gtpinGfxCoreHelper;
cl_version getExtensionVersion(std::string name);
using BuilderT = std::pair<std::unique_ptr<BuiltinDispatchInfoBuilder>, std::once_flag>;
BuilderT *peekBuilders() { return rootClDevice.builtinOpsBuilders.get(); }
protected:
void initializeCaps();
void initializeExtensionsWithVersion();
@@ -158,6 +163,7 @@ class ClDevice : public BaseObject<_cl_device_id> {
std::unique_ptr<DriverInfo> driverInfo;
std::string deviceExtensions;
std::string exposedBuiltinKernels = "";
std::unique_ptr<BuilderT[]> builtinOpsBuilders;
ClDeviceInfo deviceInfo = {};
std::once_flag initializeExtensionsWithVersionOnce;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2023 Intel Corporation
* Copyright (C) 2020-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -7,7 +7,6 @@
#include "opencl/source/execution_environment/cl_execution_environment.h"
#include "opencl/source/built_ins/builtins_dispatch_builder.h"
#include "opencl/source/event/async_events_handler.h"
namespace NEO {
@@ -25,9 +24,5 @@ ClExecutionEnvironment::~ClExecutionEnvironment() {
};
void ClExecutionEnvironment::prepareRootDeviceEnvironments(uint32_t numRootDevices) {
ExecutionEnvironment::prepareRootDeviceEnvironments(numRootDevices);
builtinOpsBuilders.resize(numRootDevices);
for (auto i = 0u; i < numRootDevices; i++) {
builtinOpsBuilders[i] = std::make_unique<BuilderT[]>(EBuiltInOps::count);
}
}
} // namespace NEO

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2023 Intel Corporation
* Copyright (C) 2020-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -23,11 +23,8 @@ class ClExecutionEnvironment : public ExecutionEnvironment {
AsyncEventsHandler *getAsyncEventsHandler() const;
~ClExecutionEnvironment() override;
void prepareRootDeviceEnvironments(uint32_t numRootDevices) override;
using BuilderT = std::pair<std::unique_ptr<BuiltinDispatchInfoBuilder>, std::once_flag>;
BuilderT *peekBuilders(uint32_t rootDeviceIndex) { return builtinOpsBuilders[rootDeviceIndex].get(); }
protected:
std::vector<std::unique_ptr<BuilderT[]>> builtinOpsBuilders;
std::unique_ptr<AsyncEventsHandler> asyncEventsHandler;
};
} // namespace NEO

View File

@@ -82,7 +82,7 @@ class BuiltInTests
void TearDown() override {
allBuiltIns.clear();
auto builders = pClExecutionEnvironment->peekBuilders(pClDevice->getRootDeviceIndex());
auto builders = pClDevice->peekBuilders();
if (builders) {
for (uint32_t i = 0; i < static_cast<uint32_t>(EBuiltInOps::count); ++i) {
builders[i].first.reset();
@@ -612,7 +612,7 @@ HWTEST2_F(BuiltInTests, givenAuxBuiltInWhenResizeIsCalledThenCloneAllNewInstance
HWTEST2_P(AuxBuiltInTests, givenKernelWithAuxTranslationRequiredWhenEnqueueCalledThenLockOnBuiltin, AuxBuiltinsMatcher) {
BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::auxTranslation, *pClDevice);
auto mockAuxBuiltInOp = new MockAuxBuilInOp(*pBuiltIns, *pClDevice);
pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(rootDeviceIndex, EBuiltInOps::auxTranslation, std::unique_ptr<MockAuxBuilInOp>(mockAuxBuiltInOp));
pClDevice->setBuiltinDispatchInfoBuilder(EBuiltInOps::auxTranslation, std::unique_ptr<MockAuxBuilInOp>(mockAuxBuiltInOp));
auto mockProgram = clUniquePtr(new MockProgram(toClDeviceVector(*pClDevice)));
auto mockBuiltinKernel = MockKernel::create(*pDevice, mockProgram.get());
@@ -1435,13 +1435,12 @@ TEST_F(BuiltInTests, WhenGettingBuilderInfoTwiceThenPointerIsSame) {
HWTEST_F(BuiltInTests, GivenBuiltInOperationWhenGettingBuilderThenCorrectBuiltInBuilderIsReturned) {
auto clExecutionEnvironment = static_cast<ClExecutionEnvironment *>(pClDevice->getExecutionEnvironment());
bool heaplessAllowed = UnitTestHelper<FamilyType>::isHeaplessAllowed();
bool isForceStateless = pClDevice->getCompilerProductHelper().isForceToStatelessRequired();
auto verifyBuilder = [&](auto operation) {
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(operation, *pClDevice);
auto *expectedBuilder = clExecutionEnvironment->peekBuilders(pClDevice->getRootDeviceIndex())[static_cast<uint32_t>(operation)].first.get();
auto *expectedBuilder = pClDevice->peekBuilders()[static_cast<uint32_t>(operation)].first.get();
EXPECT_EQ(expectedBuilder, &builder);
};

View File

@@ -122,8 +122,7 @@ struct BuiltinParamsCommandQueueHwTests : public CommandQueueHwTest {
auto builtIns = new MockBuiltins();
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
auto swapBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto swapBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
operation,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));

View File

@@ -229,8 +229,7 @@ HWTEST_P(MipMapCopyBufferToImageTest, GivenImageWithMipLevelNonZeroWhenCopyBuffe
pCmdQ->getClDevice());
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
adjustBuiltInType(pCmdQ->getHeaplessModeEnabled(), builtInType),
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
@@ -290,8 +289,7 @@ HWTEST_P(MipMapCopyBufferToImageTest, GivenImageWithMipLevelNonZeroWhenCopyBuffe
EXPECT_EQ(expectedMipLevel, params->dstMipLevel);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
adjustBuiltInType(pCmdQ->getHeaplessModeEnabled(), builtInType),
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -426,8 +424,7 @@ HWTEST_F(EnqueueCopyBufferToImageTest, given4gbBufferAndIsForceStatelessIsFalseW
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
@@ -444,8 +441,7 @@ HWTEST_F(EnqueueCopyBufferToImageTest, given4gbBufferAndIsForceStatelessIsFalseW
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());

View File

@@ -238,8 +238,7 @@ HWTEST_P(MipMapCopyImageTest, GivenImagesWithNonZeroMipLevelsWhenCopyImageIsCall
builtInType,
pCmdQ->getClDevice());
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtInType,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
@@ -334,8 +333,7 @@ HWTEST_P(MipMapCopyImageTest, GivenImagesWithNonZeroMipLevelsWhenCopyImageIsCall
EXPECT_EQ(expectedDstMipLevel, params->dstMipLevel);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtInType,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);

View File

@@ -231,8 +231,7 @@ HWTEST_P(MipMapCopyImageToBufferTest, GivenImageWithMipLevelNonZeroWhenCopyImage
pCmdQ->getClDevice());
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtInType,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
@@ -291,8 +290,7 @@ HWTEST_P(MipMapCopyImageToBufferTest, GivenImageWithMipLevelNonZeroWhenCopyImage
EXPECT_EQ(expectedMipLevel, params->srcMipLevel);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtInType,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);

View File

@@ -719,8 +719,7 @@ HWTEST_F(EnqueueFillBufferCmdTests, given4gbBufferAndIsForceStatelessIsFalseWhen
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
@@ -737,8 +736,7 @@ HWTEST_F(EnqueueFillBufferCmdTests, given4gbBufferAndIsForceStatelessIsFalseWhen
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());

View File

@@ -1041,8 +1041,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, given4gbBufferAndIsForceStatelessIsFalseWhen
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
@@ -1059,8 +1058,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, given4gbBufferAndIsForceStatelessIsFalseWhen
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());

View File

@@ -735,8 +735,7 @@ HWTEST_F(EnqueueReadImageTest, GivenImage1DarrayWhenReadImageIsCalledThenRowPitc
pCmdQ->getClDevice());
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
@@ -755,8 +754,7 @@ HWTEST_F(EnqueueReadImageTest, GivenImage1DarrayWhenReadImageIsCalledThenRowPitc
EXPECT_EQ(params->dstRowPitch, slicePitch);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -953,8 +951,7 @@ HWTEST_P(MipMapReadImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalled
pCmdQ->getClDevice());
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
eBuiltInOp,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
@@ -1017,8 +1014,7 @@ HWTEST_P(MipMapReadImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalled
EXPECT_EQ(expectedMipLevel, params->srcMipLevel);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
eBuiltInOp,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -1270,8 +1266,7 @@ HWTEST_F(EnqueueReadImageTest, given4gbImageAndIsForceStatelessIsFalseWhenEnqueu
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
@@ -1302,8 +1297,7 @@ HWTEST_F(EnqueueReadImageTest, given4gbImageAndIsForceStatelessIsFalseWhenEnqueu
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());

View File

@@ -104,8 +104,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
ASSERT_NE(nullptr, &origBuilder);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
EXPECT_EQ(&origBuilder, oldBuilder.get());
@@ -124,8 +123,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
EXPECT_EQ(CL_SUCCESS, retVal);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -182,8 +180,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
ASSERT_NE(nullptr, &origBuilder);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
EXPECT_EQ(&origBuilder, oldBuilder.get());
@@ -202,8 +199,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
EXPECT_EQ(CL_SUCCESS, retVal);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -265,8 +261,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
ASSERT_NE(nullptr, &origBuilder);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
EXPECT_EQ(&origBuilder, oldBuilder.get());
@@ -285,8 +280,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
EXPECT_EQ(CL_SUCCESS, retVal);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -527,8 +521,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSvmMemcpyWhenSvmZeroCopyThenBuiltinK
ASSERT_NE(nullptr, &origBuilder);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
EXPECT_EQ(&origBuilder, oldBuilder.get());
@@ -550,8 +543,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSvmMemcpyWhenSvmZeroCopyThenBuiltinK
EXPECT_EQ(CL_SUCCESS, retVal);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -605,8 +597,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSvmMemcpyWhenSvmGpuThenBuiltinKernel
ASSERT_NE(nullptr, &origBuilder);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
EXPECT_EQ(&origBuilder, oldBuilder.get());
@@ -628,8 +619,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSvmMemcpyWhenSvmGpuThenBuiltinKernel
EXPECT_EQ(CL_SUCCESS, retVal);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -718,8 +708,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmMemCopyTest, given4gbB
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
@@ -742,8 +731,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmMemCopyTest, given4gbB
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -758,8 +746,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmMemCopyTest, givenDst4
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
@@ -782,8 +769,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmMemCopyTest, givenDst4
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);

View File

@@ -93,8 +93,7 @@ HWTEST_F(BaseEnqueueSvmMemFillTest, givenEnqueueSVMMemFillWhenUsingFillBufferBui
ASSERT_NE(nullptr, &origBuilder);
// note that we need to store the returned value, as it is an unique pointer storing original builder, which will be later invoked
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockFillBufferBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder, pattern, patternSize)));
@@ -177,8 +176,7 @@ HWTEST_P(EnqueueSvmMemFillTest, givenEnqueueSVMMemFillWhenUsingFillBufferBuilder
ASSERT_NE(nullptr, &origBuilder);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockFillBufferBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder, pattern, patternSize)));
EXPECT_EQ(&origBuilder, oldBuilder.get());
@@ -196,8 +194,7 @@ HWTEST_P(EnqueueSvmMemFillTest, givenEnqueueSVMMemFillWhenUsingFillBufferBuilder
EXPECT_EQ(CL_SUCCESS, retVal);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
builtIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);

View File

@@ -1707,8 +1707,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmTestLocalMemory, given
MockRootDeviceEnvironment::resetBuiltins(queue.getDevice().getExecutionEnvironment()->rootDeviceEnvironments[queue.getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, queue.getClDevice())));
@@ -1728,8 +1727,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmTestLocalMemory, given
EXPECT_EQ(CL_SUCCESS, retVal);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());
@@ -1752,8 +1750,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmTestLocalMemory, given
EXPECT_EQ(CL_SUCCESS, retVal);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, queue.getClDevice())));
@@ -1767,8 +1764,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmTestLocalMemory, given
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());
@@ -1791,8 +1787,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmTestLocalMemory, given
EXPECT_EQ(CL_SUCCESS, retVal);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, queue.getClDevice())));
@@ -1808,8 +1803,7 @@ HWTEST_F(StatelessMockAlignedMallocMemoryManagerEnqueueSvmTestLocalMemory, given
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());

View File

@@ -820,8 +820,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, given4gbBufferAndIsForceStatelessIsFalseWhe
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
@@ -838,8 +837,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, given4gbBufferAndIsForceStatelessIsFalseWhe
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());

View File

@@ -277,8 +277,7 @@ HWTEST_F(EnqueueWriteImageTest, GivenImage1DarrayWhenWriteImageIsCalledThenRowPi
pCmdQ->getClDevice());
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
@@ -298,8 +297,7 @@ HWTEST_F(EnqueueWriteImageTest, GivenImage1DarrayWhenWriteImageIsCalledThenRowPi
EXPECT_EQ(params->srcRowPitch, slicePitch);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -430,8 +428,7 @@ HWTEST_P(MipMapWriteImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalle
pCmdQ->getClDevice());
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
eBuiltInOp,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder)));
@@ -497,8 +494,7 @@ HWTEST_P(MipMapWriteImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalle
EXPECT_EQ(expectedMipLevel, params->dstMipLevel);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
eBuiltInOp,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
@@ -1023,8 +1019,7 @@ HWTEST_F(EnqueueWriteImageTest, given4gbBufferAndIsForceStatelessIsFalseWhenEnqu
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto oldBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuilder(*builtIns, pCmdQ->getClDevice())));
@@ -1041,8 +1036,7 @@ HWTEST_F(EnqueueWriteImageTest, given4gbBufferAndIsForceStatelessIsFalseWhenEnqu
EXPECT_TRUE(mockBuilder->wasBuildDispatchInfosWithBuiltinOpParamsCalled);
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
auto newBuilder = pClDevice->setBuiltinDispatchInfoBuilder(
copyBuiltIn,
std::move(oldBuilder));
EXPECT_EQ(mockBuilder, newBuilder.get());

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/device/device.h"
#include "shared/source/os_interface/device_factory.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"
#include "shared/test/common/test_macros/test.h"

View File

@@ -42,6 +42,14 @@ std::unique_ptr<CommandStreamReceiver> MockClDevice::createCommandStreamReceiver
return device.createCommandStreamReceiver();
}
std::unique_ptr<BuiltinDispatchInfoBuilder> MockClDevice::setBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, std::unique_ptr<BuiltinDispatchInfoBuilder> builder) {
uint32_t operationId = static_cast<uint32_t>(operation);
auto &operationBuilder = peekBuilders()[operationId];
std::call_once(operationBuilder.second, [] {});
operationBuilder.first.swap(builder);
return builder;
}
void MockClDevice::setPciUuid(std::array<uint8_t, ProductHelper::uuidSize> &id) {
memcpy_s(device.uuid.id.data(), ProductHelper::uuidSize, id.data(), ProductHelper::uuidSize);
device.uuid.isValid = true;

View File

@@ -9,6 +9,7 @@
#include "shared/test/common/mocks/mock_device.h"
#include "opencl/source/built_ins/builtins_dispatch_builder.h"
#include "opencl/source/cl_device/cl_device.h"
#include "opencl/test/unit_test/mocks/mock_cl_execution_environment.h"
@@ -78,6 +79,7 @@ class MockClDevice : public ClDevice {
SubDevice *createSubDevice(uint32_t subDeviceIndex) { return device.createSubDevice(subDeviceIndex); }
std::unique_ptr<CommandStreamReceiver> createCommandStreamReceiver() const;
BuiltIns *getBuiltIns() const { return getDevice().getBuiltIns(); }
std::unique_ptr<BuiltinDispatchInfoBuilder> setBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, std::unique_ptr<BuiltinDispatchInfoBuilder> builder);
MockDevice &device;
DeviceInfo &sharedDeviceInfo;

View File

@@ -1,26 +1,17 @@
/*
* Copyright (C) 2020-2023 Intel Corporation
* Copyright (C) 2020-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "opencl/source/built_ins/builtins_dispatch_builder.h"
#include "opencl/source/execution_environment/cl_execution_environment.h"
namespace NEO {
class MockClExecutionEnvironment : public ClExecutionEnvironment {
public:
using ClExecutionEnvironment::asyncEventsHandler;
using ClExecutionEnvironment::builtinOpsBuilders;
using ClExecutionEnvironment::ClExecutionEnvironment;
std::unique_ptr<BuiltinDispatchInfoBuilder> setBuiltinDispatchInfoBuilder(uint32_t rootDeviceIndex, EBuiltInOps::Type operation, std::unique_ptr<BuiltinDispatchInfoBuilder> builder) {
uint32_t operationId = static_cast<uint32_t>(operation);
auto &operationBuilder = peekBuilders(rootDeviceIndex)[operationId];
std::call_once(operationBuilder.second, [] {});
operationBuilder.first.swap(builder);
return builder;
}
};
} // namespace NEO

View File

@@ -443,6 +443,8 @@ HWTEST2_TEMPLATED_F(ClDrmMemoryManagerTest, givenDrmMemoryManagerWhenTiledImageI
// builtins kernels
mock->ioctlExpected.gemUserptr += 7;
mock->ioctlExpected.gemClose += 7; // builtins cleaned up in ClDevice destructor
mock->ioctlExpected.gemWait += 7;
// command buffers
mock->ioctlExpected.gemUserptr += 2;