mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 08:53:55 +08:00
feature: Don't allow to build program with stateful accesses on PVC
Related-To: NEO-6075 Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
25c7074d43
commit
1676c32c78
@@ -73,6 +73,8 @@ void ModuleImmutableDataFixture::MockKernel::setCrossThreadData(uint32_t dataSiz
|
||||
}
|
||||
|
||||
void ModuleImmutableDataFixture::setUp() {
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
|
||||
auto hwInfo = NEO::defaultHwInfo.get();
|
||||
if (DebugManager.flags.OverrideRevision.get() != -1) {
|
||||
this->copyHwInfo = *NEO::defaultHwInfo.get();
|
||||
@@ -86,6 +88,9 @@ void ModuleImmutableDataFixture::setUp() {
|
||||
}
|
||||
|
||||
void ModuleImmutableDataFixture::createModuleFromMockBinary(uint32_t perHwThreadPrivateMemorySize, bool isInternal, MockImmutableData *mockKernelImmData, std::initializer_list<ZebinTestData::appendElfAdditionalSection> additionalSections) {
|
||||
DebugManagerStateRestore restore;
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
|
||||
zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo(), additionalSections);
|
||||
const auto &src = zebinData->storage;
|
||||
|
||||
@@ -133,12 +138,13 @@ L0::Module *ModuleFixture::ProxyModuleImp::create(L0::Device *device, const ze_m
|
||||
}
|
||||
|
||||
void ModuleFixture::setUp() {
|
||||
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
DeviceFixture::setUp();
|
||||
createModuleFromMockBinary();
|
||||
}
|
||||
|
||||
void ModuleFixture::createModuleFromMockBinary(ModuleType type) {
|
||||
|
||||
zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo());
|
||||
const auto &src = zebinData->storage;
|
||||
|
||||
@@ -183,6 +189,8 @@ void MultiDeviceModuleFixture::setUp() {
|
||||
}
|
||||
|
||||
void MultiDeviceModuleFixture::createModuleFromMockBinary(uint32_t rootDeviceIndex) {
|
||||
DebugManagerStateRestore restore;
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
auto device = driverHandle->devices[rootDeviceIndex];
|
||||
zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo());
|
||||
const auto &src = zebinData->storage;
|
||||
|
||||
@@ -116,6 +116,7 @@ struct ModuleImmutableDataFixture : public DeviceFixture {
|
||||
std::unique_ptr<MockModule> module;
|
||||
std::unique_ptr<ZebinTestData::ZebinWithL0TestCommonModule> zebinData;
|
||||
MockImmutableMemoryManager *memoryManager;
|
||||
DebugManagerStateRestore restore;
|
||||
};
|
||||
|
||||
struct ModuleFixture : public DeviceFixture {
|
||||
@@ -146,6 +147,7 @@ struct ModuleFixture : public DeviceFixture {
|
||||
std::unique_ptr<L0::Module> module;
|
||||
std::unique_ptr<WhiteBox<::L0::Kernel>> kernel;
|
||||
std::unique_ptr<ZebinTestData::ZebinWithL0TestCommonModule> zebinData;
|
||||
DebugManagerStateRestore restore;
|
||||
};
|
||||
|
||||
struct MultiDeviceModuleFixture : public MultiDeviceFixture {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#include "shared/source/compiler_interface/external_functions.h"
|
||||
#include "shared/source/debug_settings/debug_settings_manager.h"
|
||||
#include "shared/source/debugger/debugger_l0.h"
|
||||
#include "shared/source/device_binary_format/patchtokens_decoder.h"
|
||||
#include "shared/source/helpers/bindless_heaps_helper.h"
|
||||
@@ -1392,6 +1393,8 @@ class KernelPropertiesTests : public ModuleFixture, public ::testing::Test {
|
||||
using KernelImp::kernelHasIndirectAccess;
|
||||
};
|
||||
void SetUp() override {
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
|
||||
ModuleFixture::setUp();
|
||||
|
||||
ze_kernel_desc_t kernelDesc = {};
|
||||
@@ -1411,6 +1414,7 @@ class KernelPropertiesTests : public ModuleFixture, public ::testing::Test {
|
||||
|
||||
ze_kernel_handle_t kernelHandle;
|
||||
MockKernel *kernel = nullptr;
|
||||
DebugManagerStateRestore restore;
|
||||
};
|
||||
|
||||
TEST_F(KernelPropertiesTests, givenKernelThenCorrectNameIsRetrieved) {
|
||||
|
||||
@@ -3103,6 +3103,9 @@ TEST_F(MultipleDevicePeerAllocationFailTest,
|
||||
|
||||
struct MultipleDevicePeerAllocationTest : public ::testing::Test {
|
||||
void createModuleFromMockBinary(L0::Device *device, ModuleType type = ModuleType::User) {
|
||||
DebugManagerStateRestore restorer;
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
|
||||
auto zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo());
|
||||
const auto &src = zebinData->storage;
|
||||
ze_module_desc_t moduleDesc = {};
|
||||
@@ -3117,7 +3120,7 @@ struct MultipleDevicePeerAllocationTest : public ::testing::Test {
|
||||
|
||||
void SetUp() override {
|
||||
DebugManagerStateRestore restorer;
|
||||
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
DebugManager.flags.CreateMultipleSubDevices.set(numSubDevices);
|
||||
VariableBackup<bool> mockDeviceFlagBackup(&MockDevice::createSingleDevice, false);
|
||||
|
||||
|
||||
@@ -2087,6 +2087,9 @@ HWTEST_F(MultiDeviceModuleSetArgBufferTest,
|
||||
using ContextModuleCreateTest = Test<DeviceFixture>;
|
||||
|
||||
HWTEST_F(ContextModuleCreateTest, givenCallToCreateModuleThenModuleIsReturned) {
|
||||
DebugManagerStateRestore restore;
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
|
||||
auto zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo());
|
||||
const auto &src = zebinData->storage;
|
||||
|
||||
@@ -2110,6 +2113,8 @@ using ModuleTranslationUnitTest = Test<DeviceFixture>;
|
||||
struct MockModuleTU : public L0::ModuleTranslationUnit {
|
||||
MockModuleTU(L0::Device *device) : L0::ModuleTranslationUnit(device) {}
|
||||
|
||||
DebugManagerStateRestore restore;
|
||||
|
||||
ze_result_t buildFromSpirV(const char *input, uint32_t inputSize, const char *buildOptions, const char *internalBuildOptions,
|
||||
const ze_module_constants_t *pConstants) override {
|
||||
wasBuildFromSpirVCalled = true;
|
||||
@@ -2121,6 +2126,7 @@ struct MockModuleTU : public L0::ModuleTranslationUnit {
|
||||
}
|
||||
|
||||
ze_result_t createFromNativeBinary(const char *input, size_t inputSize) override {
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
wasCreateFromNativeBinaryCalled = true;
|
||||
return L0::ModuleTranslationUnit::createFromNativeBinary(input, inputSize);
|
||||
}
|
||||
@@ -2133,7 +2139,6 @@ struct MockModuleTU : public L0::ModuleTranslationUnit {
|
||||
HWTEST_F(ModuleTranslationUnitTest, GivenRebuildPrecompiledKernelsFlagAndFileWithoutIntermediateCodeWhenCreatingModuleFromNativeBinaryThenModuleIsNotRecompiled) {
|
||||
DebugManagerStateRestore dgbRestorer;
|
||||
NEO::DebugManager.flags.RebuildPrecompiledKernels.set(true);
|
||||
|
||||
auto zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo());
|
||||
const auto &src = zebinData->storage;
|
||||
|
||||
@@ -2811,6 +2816,8 @@ TEST(ModuleBuildLog, WhenTooSmallBufferIsPassedToGetStringThenErrorIsReturned) {
|
||||
using PrintfModuleTest = Test<DeviceFixture>;
|
||||
|
||||
HWTEST_F(PrintfModuleTest, GivenModuleWithPrintfWhenKernelIsCreatedThenPrintfAllocationIsPlacedInResidencyContainer) {
|
||||
DebugManagerStateRestore restore{};
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
auto zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo());
|
||||
const auto &src = zebinData->storage;
|
||||
|
||||
@@ -3145,8 +3152,9 @@ TEST_F(ModuleInitializeTest, whenModuleInitializeIsCalledThenCorrectResultIsRetu
|
||||
moduleDesc.pInputModule = reinterpret_cast<const uint8_t *>(src.data());
|
||||
moduleDesc.inputSize = src.size();
|
||||
|
||||
std::array<std::tuple<ze_result_t, bool, ModuleType, int32_t>, 5> testParams = {{
|
||||
std::array<std::tuple<ze_result_t, bool, ModuleType, int32_t>, 6> testParams = {{
|
||||
{ZE_RESULT_SUCCESS, false, ModuleType::Builtin, -1},
|
||||
{ZE_RESULT_SUCCESS, true, ModuleType::User, -1},
|
||||
{ZE_RESULT_SUCCESS, true, ModuleType::Builtin, 0},
|
||||
{ZE_RESULT_SUCCESS, true, ModuleType::User, 0},
|
||||
{ZE_RESULT_SUCCESS, true, ModuleType::Builtin, 1},
|
||||
@@ -3158,6 +3166,13 @@ TEST_F(ModuleInitializeTest, whenModuleInitializeIsCalledThenCorrectResultIsRetu
|
||||
module.translationUnit = std::make_unique<MyMockModuleTU>(device);
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(debugKey);
|
||||
module.setAddressingMode(isStateful);
|
||||
|
||||
if (isStateful && debugKey == -1) {
|
||||
if (compilerProductHelper.failBuildProgramWithStatefulAccessPreference() == true) {
|
||||
expectedResult = ZE_RESULT_ERROR_MODULE_BUILD_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_EQ(expectedResult, module.initialize(&moduleDesc, device->getNEODevice()));
|
||||
}
|
||||
}
|
||||
@@ -3803,6 +3818,8 @@ HWTEST_F(ModuleWithZebinTest, givenZebinWithKernelCallingExternalFunctionThenUpd
|
||||
|
||||
using ModuleKernelImmDatasTest = Test<ModuleFixture>;
|
||||
TEST_F(ModuleKernelImmDatasTest, givenDeviceOOMWhenMemoryManagerFailsToAllocateMemoryThenReturnInformativeErrorToTheCaller) {
|
||||
DebugManagerStateRestore restore;
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
|
||||
auto zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo());
|
||||
const auto &src = zebinData->storage;
|
||||
|
||||
@@ -24,7 +24,7 @@ class ModuleOnlineCompiled : public DeviceFixture, public testing::Test {
|
||||
public:
|
||||
void SetUp() override {
|
||||
DeviceFixture::setUp();
|
||||
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
auto zebinData = std::make_unique<ZebinTestData::ZebinWithL0TestCommonModule>(device->getHwInfo());
|
||||
const auto &src = zebinData->storage;
|
||||
|
||||
@@ -42,6 +42,7 @@ class ModuleOnlineCompiled : public DeviceFixture, public testing::Test {
|
||||
DeviceFixture::tearDown();
|
||||
}
|
||||
std::unique_ptr<WhiteBox<L0::Module>> module;
|
||||
DebugManagerStateRestore restore;
|
||||
};
|
||||
|
||||
using ModuleTests = Test<DeviceFixture>;
|
||||
|
||||
@@ -139,6 +139,7 @@ class UmStatelessCompressionWithStatefulAccess : public ProgramFixture,
|
||||
void SetUp() override {
|
||||
DebugManager.flags.EnableStatelessCompressionWithUnifiedMemory.set(1);
|
||||
DebugManager.flags.EnableSharedSystemUsmSupport.set(0);
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(0);
|
||||
compareCompressedMemory = GetParam();
|
||||
|
||||
ProgramFixture::setUp();
|
||||
|
||||
@@ -1904,14 +1904,15 @@ TEST_F(ProgramTests, givenStatefulAndStatelessAccessesWhenProgramBuildIsCalledTh
|
||||
}
|
||||
};
|
||||
|
||||
std::array<std::tuple<int, bool, int32_t>, 3> testParams = {{{CL_SUCCESS, false, -1},
|
||||
std::array<std::tuple<int, bool, int32_t>, 4> testParams = {{{CL_SUCCESS, true, -1},
|
||||
{CL_SUCCESS, false, -1},
|
||||
{CL_SUCCESS, true, 0},
|
||||
{CL_BUILD_PROGRAM_FAILURE, true, 1}}};
|
||||
|
||||
for (auto &[result, isStatefulAccess, debuyKey] : testParams) {
|
||||
for (auto &[expectedResult, isStatefulAccess, debuyKey] : testParams) {
|
||||
|
||||
if (!compilerProductHelper.isForceToStatelessRequired()) {
|
||||
result = CL_SUCCESS;
|
||||
expectedResult = CL_SUCCESS;
|
||||
}
|
||||
MyMockProgram program(pContext, false, toClDeviceVector(*pClDevice));
|
||||
program.isBuiltIn = false;
|
||||
@@ -1919,7 +1920,14 @@ TEST_F(ProgramTests, givenStatefulAndStatelessAccessesWhenProgramBuildIsCalledTh
|
||||
program.createdFrom = Program::CreatedFrom::SOURCE;
|
||||
program.setAddressingMode(isStatefulAccess);
|
||||
DebugManager.flags.FailBuildProgramWithStatefulAccess.set(debuyKey);
|
||||
EXPECT_EQ(result, program.build(toClDeviceVector(*pClDevice), nullptr, false));
|
||||
|
||||
if (isStatefulAccess && debuyKey == -1) {
|
||||
if (compilerProductHelper.failBuildProgramWithStatefulAccessPreference() == true) {
|
||||
expectedResult = CL_BUILD_PROGRAM_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_EQ(expectedResult, program.build(toClDeviceVector(*pClDevice), nullptr, false));
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -10,4 +10,10 @@ template <>
|
||||
uint64_t CompilerProductHelperHw<IGFX_PVC>::getHwInfoConfig(const HardwareInfo &hwInfo) const {
|
||||
return 0x0;
|
||||
}
|
||||
|
||||
template <>
|
||||
bool CompilerProductHelperHw<IGFX_PVC>::failBuildProgramWithStatefulAccessPreference() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
Reference in New Issue
Block a user