mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 00:24:58 +08:00
Refactor handling unknown builtins
Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
459524f129
commit
0d82216f43
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2018-2021 Intel Corporation
|
||||
# Copyright (C) 2018-2022 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
@@ -11,7 +11,6 @@ set(RUNTIME_SRCS_BUILT_INS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/builtins_dispatch_builder.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/built_in_ops_vme.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/built_ins.inl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}unknown_built_in.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/vme_builtin.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/vme_builtin.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/vme_dispatch_builder.h
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
* Copyright (C) 2020-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "built_in_ops.h"
|
||||
#include "shared/source/built_ins/builtinops/built_in_ops.h"
|
||||
|
||||
namespace NEO {
|
||||
namespace EBuiltInOps {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
* Copyright (C) 2020-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -776,7 +776,7 @@ BuiltinDispatchInfoBuilder &BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuil
|
||||
std::call_once(operationBuilder.second, [&] { operationBuilder.first = std::make_unique<BuiltInOp<EBuiltInOps::AuxTranslation>>(builtins, device); });
|
||||
break;
|
||||
default:
|
||||
return getUnknownDispatchInfoBuilder(operation, device);
|
||||
UNRECOVERABLE_IF("getBuiltinDispatchInfoBuilder failed");
|
||||
}
|
||||
return *operationBuilder.first;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2021 Intel Corporation
|
||||
* Copyright (C) 2018-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -7,12 +7,12 @@
|
||||
|
||||
#pragma once
|
||||
#include "shared/source/built_ins/built_ins.h"
|
||||
#include "shared/source/built_ins/builtinops/built_in_ops.h"
|
||||
#include "shared/source/helpers/vec.h"
|
||||
|
||||
#include "opencl/source/kernel/multi_device_kernel.h"
|
||||
|
||||
#include "CL/cl.h"
|
||||
#include "built_in_ops.h"
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
@@ -113,7 +113,6 @@ class BuiltinDispatchInfoBuilder {
|
||||
class BuiltInDispatchBuilderOp {
|
||||
public:
|
||||
static BuiltinDispatchInfoBuilder &getBuiltinDispatchInfoBuilder(EBuiltInOps::Type op, ClDevice &device);
|
||||
static BuiltinDispatchInfoBuilder &getUnknownDispatchInfoBuilder(EBuiltInOps::Type op, ClDevice &device);
|
||||
};
|
||||
|
||||
class BuiltInOwnershipWrapper : public NonCopyableOrMovableClass {
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
* Copyright (C) 2020-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "shared/source/built_ins/builtinops/built_in_ops.h"
|
||||
#include "shared/source/execution_environment/execution_environment.h"
|
||||
|
||||
#include "built_in_ops.h"
|
||||
|
||||
#include <mutex>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
@@ -10,7 +10,7 @@ set(IGDRCL_SRCS_tests_built_in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/built_ins_file_names.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests_ocl.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}get_built_ins_file_names.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/get_built_ins_file_names.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sip_tests.cpp
|
||||
)
|
||||
target_sources(igdrcl_tests PRIVATE ${IGDRCL_SRCS_tests_built_in})
|
||||
|
||||
@@ -149,10 +149,89 @@ HWTEST2_F(BuiltInTests, GivenBuiltinTypeBinaryWhenGettingAuxTranslationBuiltinTh
|
||||
mockBuiltinsLib->getBuiltinResource(EBuiltInOps::AuxTranslation, BuiltinCode::ECodeType::Binary, *pDevice).size() != 0);
|
||||
}
|
||||
|
||||
class MockAuxBuilInOp : public BuiltInOp<EBuiltInOps::AuxTranslation> {
|
||||
public:
|
||||
using BuiltinDispatchInfoBuilder::populate;
|
||||
using BaseClass = BuiltInOp<EBuiltInOps::AuxTranslation>;
|
||||
using BaseClass::baseKernel;
|
||||
using BaseClass::convertToAuxKernel;
|
||||
using BaseClass::convertToNonAuxKernel;
|
||||
using BaseClass::resizeKernelInstances;
|
||||
using BaseClass::usedKernels;
|
||||
|
||||
using BaseClass::BuiltInOp;
|
||||
};
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(,
|
||||
AuxBuiltInTests,
|
||||
testing::ValuesIn({KernelObjForAuxTranslation::Type::MEM_OBJ, KernelObjForAuxTranslation::Type::GFX_ALLOC}));
|
||||
|
||||
HWCMDTEST_P(IGFX_XE_HP_CORE, AuxBuiltInTests, givenXeHpCoreCommandsAndAuxTranslationKernelWhenSettingKernelArgsThenSetValidMocs) {
|
||||
|
||||
const auto &compilerHwInfoConfig = *CompilerHwInfoConfig::get(defaultHwInfo->platform.eProductFamily);
|
||||
if (compilerHwInfoConfig.isForceToStatelessRequired()) {
|
||||
GTEST_SKIP();
|
||||
}
|
||||
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
|
||||
|
||||
MockAuxBuilInOp mockAuxBuiltInOp(*pBuiltIns, *pClDevice);
|
||||
|
||||
BuiltinOpParams builtinOpParamsToAux;
|
||||
builtinOpParamsToAux.auxTranslationDirection = AuxTranslationDirection::NonAuxToAux;
|
||||
|
||||
BuiltinOpParams builtinOpParamsToNonAux;
|
||||
builtinOpParamsToNonAux.auxTranslationDirection = AuxTranslationDirection::AuxToNonAux;
|
||||
|
||||
std::unique_ptr<Buffer> buffer = nullptr;
|
||||
std::unique_ptr<GraphicsAllocation> gfxAllocation = nullptr;
|
||||
|
||||
auto kernelObjsForAuxTranslation = std::make_unique<KernelObjsForAuxTranslation>();
|
||||
if (kernelObjType == MockKernelObjForAuxTranslation::Type::MEM_OBJ) {
|
||||
cl_int retVal = CL_SUCCESS;
|
||||
buffer.reset(Buffer::create(pContext, 0, MemoryConstants::pageSize, nullptr, retVal));
|
||||
kernelObjsForAuxTranslation->insert({KernelObjForAuxTranslation::Type::MEM_OBJ, buffer.get()});
|
||||
} else {
|
||||
gfxAllocation.reset(new MockGraphicsAllocation(nullptr, MemoryConstants::pageSize));
|
||||
kernelObjsForAuxTranslation->insert({KernelObjForAuxTranslation::Type::GFX_ALLOC, gfxAllocation.get()});
|
||||
}
|
||||
|
||||
MultiDispatchInfo multiDispatchInfo;
|
||||
multiDispatchInfo.setKernelObjsForAuxTranslation(std::move(kernelObjsForAuxTranslation));
|
||||
|
||||
mockAuxBuiltInOp.buildDispatchInfosForAuxTranslation<FamilyType>(multiDispatchInfo, builtinOpParamsToAux);
|
||||
mockAuxBuiltInOp.buildDispatchInfosForAuxTranslation<FamilyType>(multiDispatchInfo, builtinOpParamsToNonAux);
|
||||
|
||||
{
|
||||
// read args
|
||||
auto argNum = 0;
|
||||
auto expectedMocs = pDevice->getGmmHelper()->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED);
|
||||
auto sshBase = mockAuxBuiltInOp.convertToAuxKernel[0]->getSurfaceStateHeap();
|
||||
auto sshOffset = mockAuxBuiltInOp.convertToAuxKernel[0]->getKernelInfo().getArgDescriptorAt(argNum).as<ArgDescPointer>().bindful;
|
||||
auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset));
|
||||
EXPECT_EQ(expectedMocs, surfaceState->getMemoryObjectControlState());
|
||||
|
||||
sshBase = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getSurfaceStateHeap();
|
||||
sshOffset = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getKernelInfo().getArgDescriptorAt(argNum).as<ArgDescPointer>().bindful;
|
||||
surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset));
|
||||
EXPECT_EQ(expectedMocs, surfaceState->getMemoryObjectControlState());
|
||||
}
|
||||
|
||||
{
|
||||
// write args
|
||||
auto argNum = 1;
|
||||
auto expectedMocs = pDevice->getGmmHelper()->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CONST);
|
||||
auto sshBase = mockAuxBuiltInOp.convertToAuxKernel[0]->getSurfaceStateHeap();
|
||||
auto sshOffset = mockAuxBuiltInOp.convertToAuxKernel[0]->getKernelInfo().getArgDescriptorAt(argNum).as<ArgDescPointer>().bindful;
|
||||
auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset));
|
||||
EXPECT_EQ(expectedMocs, surfaceState->getMemoryObjectControlState());
|
||||
|
||||
sshBase = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getSurfaceStateHeap();
|
||||
sshOffset = mockAuxBuiltInOp.convertToNonAuxKernel[0]->getKernelInfo().getArgDescriptorAt(argNum).as<ArgDescPointer>().bindful;
|
||||
surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(sshBase, sshOffset));
|
||||
EXPECT_EQ(expectedMocs, surfaceState->getMemoryObjectControlState());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(BuiltInTests, WhenBuildingListOfBuiltinsThenBuiltinsHaveBeenGenerated) {
|
||||
for (auto supportsImages : ::testing::Bool()) {
|
||||
allBuiltIns.clear();
|
||||
@@ -445,19 +524,6 @@ HWTEST2_P(AuxBuiltInTests, givenInvalidAuxTranslationDirectionWhenBuildingDispat
|
||||
EXPECT_THROW(builder.buildDispatchInfosForAuxTranslation<FamilyType>(multiDispatchInfo, builtinOpsParams), std::exception);
|
||||
}
|
||||
|
||||
class MockAuxBuilInOp : public BuiltInOp<EBuiltInOps::AuxTranslation> {
|
||||
public:
|
||||
using BuiltinDispatchInfoBuilder::populate;
|
||||
using BaseClass = BuiltInOp<EBuiltInOps::AuxTranslation>;
|
||||
using BaseClass::baseKernel;
|
||||
using BaseClass::convertToAuxKernel;
|
||||
using BaseClass::convertToNonAuxKernel;
|
||||
using BaseClass::resizeKernelInstances;
|
||||
using BaseClass::usedKernels;
|
||||
|
||||
using BaseClass::BuiltInOp;
|
||||
};
|
||||
|
||||
TEST_F(BuiltInTests, whenAuxBuiltInIsConstructedThenResizeKernelInstancedTo5) {
|
||||
MockAuxBuilInOp mockAuxBuiltInOp(*pBuiltIns, *pClDevice);
|
||||
EXPECT_EQ(5u, mockAuxBuiltInOp.convertToAuxKernel.size());
|
||||
@@ -1230,11 +1296,6 @@ TEST_F(VmeBuiltInTests, WhenGettingBuiltinAsStringThenCorrectStringIsReturned) {
|
||||
EXPECT_EQ(0, strcmp("unknown", getBuiltinAsString(EBuiltInOps::COUNT)));
|
||||
}
|
||||
|
||||
TEST_F(BuiltInTests, WhenUnknownOperationIsSpecifiedThenUnknownNameIsReturned) {
|
||||
EXPECT_EQ(0, strcmp("unknown", getUnknownBuiltinAsString(EBuiltInOps::CopyImage3dToBuffer)));
|
||||
EXPECT_EQ(0, strcmp("unknown", getUnknownBuiltinAsString(EBuiltInOps::COUNT)));
|
||||
}
|
||||
|
||||
TEST_F(BuiltInTests, GivenEncodeTypeWhenGettingExtensionThenCorrectStringIsReturned) {
|
||||
EXPECT_EQ(0, strcmp("", BuiltinCode::getExtension(BuiltinCode::ECodeType::Any)));
|
||||
EXPECT_EQ(0, strcmp(".bin", BuiltinCode::getExtension(BuiltinCode::ECodeType::Binary)));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2020-2021 Intel Corporation
|
||||
# Copyright (C) 2020-2022 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
@@ -14,7 +14,6 @@ set(NEO_CORE_SRCS_BUILT_INS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sip.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sip.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sip_kernel_type.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}unknown_built_in_name.cpp
|
||||
)
|
||||
|
||||
add_subdirectory(builtinops)
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2021 Intel Corporation
|
||||
* Copyright (C) 2018-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "shared/source/built_ins/builtinops/built_in_ops.h"
|
||||
#include "shared/source/built_ins/sip_kernel_type.h"
|
||||
#include "shared/source/helpers/debug_helpers.h"
|
||||
#include "shared/source/helpers/non_copyable_or_moveable.h"
|
||||
#include "shared/source/helpers/vec.h"
|
||||
|
||||
#include "built_in_ops.h"
|
||||
#include "compiler_options.h"
|
||||
|
||||
#include <array>
|
||||
@@ -46,7 +46,6 @@ std::string createBuiltinResourceName(EBuiltInOps::Type builtin, const std::stri
|
||||
const std::string &platformName = "", uint32_t deviceRevId = 0);
|
||||
std::string joinPath(const std::string &lhs, const std::string &rhs);
|
||||
const char *getBuiltinAsString(EBuiltInOps::Type builtin);
|
||||
const char *getUnknownBuiltinAsString(EBuiltInOps::Type builtin);
|
||||
const char *getAdditionalBuiltinAsString(EBuiltInOps::Type builtin);
|
||||
|
||||
class Storage {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2021 Intel Corporation
|
||||
* Copyright (C) 2018-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -24,7 +24,7 @@ const char *getBuiltinAsString(EBuiltInOps::Type builtin) {
|
||||
}
|
||||
switch (builtin) {
|
||||
default:
|
||||
return getUnknownBuiltinAsString(builtin);
|
||||
return "unknown";
|
||||
case EBuiltInOps::AuxTranslation:
|
||||
return "aux_translation.builtin_kernel";
|
||||
case EBuiltInOps::CopyBufferToBuffer:
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2020-2021 Intel Corporation
|
||||
# Copyright (C) 2020-2022 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
set(NEO_CORE_SRCS_BUILT_INS_OPS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}built_in_ops.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/built_in_ops.h
|
||||
)
|
||||
add_subdirectories()
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/built_ins/built_ins.h"
|
||||
|
||||
namespace NEO {
|
||||
|
||||
const char *getUnknownBuiltinAsString(EBuiltInOps::Type builtin) {
|
||||
return "unknown";
|
||||
}
|
||||
} // namespace NEO
|
||||
@@ -77,7 +77,7 @@ set(neo_libult_common_SRCS_LIB_ULT
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/fixtures/tbx_command_stream_fixture.h
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/helpers/execution_environment_helper.cpp
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/helpers/execution_environment_helper.h
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/helpers${BRANCH_DIR_SUFFIX}kernel_binary_helper_hash_value.cpp
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/helpers/kernel_binary_helper_hash_value.cpp
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/helpers/kernel_binary_helper.cpp
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/helpers/kernel_binary_helper.h
|
||||
${NEO_SHARED_TEST_DIRECTORY}/common/helpers/kernel_filename_helper.h
|
||||
|
||||
Reference in New Issue
Block a user