Refactor handling unknown builtins

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2022-04-26 10:09:28 +00:00
committed by Compute-Runtime-Automation
parent 459524f129
commit 0d82216f43
13 changed files with 97 additions and 56 deletions

View File

@@ -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

View File

@@ -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 {

View File

@@ -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;
}

View File

@@ -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 {

View File

@@ -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>

View File

@@ -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})

View File

@@ -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)));

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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:

View File

@@ -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()

View File

@@ -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

View File

@@ -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