fix(zebin): Enforce fallback to CTNI on TGL/ICL for nGEN dummy kernel
For TGL and ICL platforms - if on clCreateProgramWithSource() call we detect a nGen dummy kernel usage - enforce fallback to the patchtokens format (only for this kernel). - corrected naming - minor ULTs refactor (less dependencies). Signed-off-by: Kacper Nowak <kacper.nowak@intel.com>
This commit is contained in:
parent
0c3cde2141
commit
d2a2656caa
|
@ -117,6 +117,10 @@ cl_int Program::build(
|
||||||
NEO::CompilerOptions::concatenateAppend(internalOptions, NEO::DebugManager.flags.InjectInternalBuildOptions.get());
|
NEO::CompilerOptions::concatenateAppend(internalOptions, NEO::DebugManager.flags.InjectInternalBuildOptions.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->enforceFallbackToPatchtokens) {
|
||||||
|
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::disableZebin);
|
||||||
|
}
|
||||||
|
|
||||||
inputArgs.apiOptions = ArrayRef<const char>(options.c_str(), options.length());
|
inputArgs.apiOptions = ArrayRef<const char>(options.c_str(), options.length());
|
||||||
inputArgs.internalOptions = ArrayRef<const char>(internalOptions.c_str(), internalOptions.length());
|
inputArgs.internalOptions = ArrayRef<const char>(internalOptions.c_str(), internalOptions.length());
|
||||||
inputArgs.GTPinInput = gtpinGetIgcInit();
|
inputArgs.GTPinInput = gtpinGetIgcInit();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018-2022 Intel Corporation
|
* Copyright (C) 2018-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -78,6 +78,9 @@ T *Program::create(
|
||||||
}
|
}
|
||||||
|
|
||||||
program = new T(pContext, false, pContext->getDevices());
|
program = new T(pContext, false, pContext->getDevices());
|
||||||
|
if (ail) {
|
||||||
|
ail->forceFallbackToPatchtokensIfRequired(combinedString, program->enforceFallbackToPatchtokens);
|
||||||
|
}
|
||||||
program->sourceCode.swap(combinedString);
|
program->sourceCode.swap(combinedString);
|
||||||
program->createdFrom = CreatedFrom::SOURCE;
|
program->createdFrom = CreatedFrom::SOURCE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -371,6 +371,7 @@ class Program : public BaseObject<_cl_program> {
|
||||||
|
|
||||||
bool isBuiltIn = false;
|
bool isBuiltIn = false;
|
||||||
bool kernelDebugEnabled = false;
|
bool kernelDebugEnabled = false;
|
||||||
|
bool enforceFallbackToPatchtokens = false;
|
||||||
uint32_t maxRootDeviceIndex = std::numeric_limits<uint32_t>::max();
|
uint32_t maxRootDeviceIndex = std::numeric_limits<uint32_t>::max();
|
||||||
std::mutex lockMutex;
|
std::mutex lockMutex;
|
||||||
uint32_t exposedKernels = 0;
|
uint32_t exposedKernels = 0;
|
||||||
|
|
|
@ -54,6 +54,7 @@ class MockProgram : public Program {
|
||||||
using Program::createProgramFromBinary;
|
using Program::createProgramFromBinary;
|
||||||
using Program::deviceBuildInfos;
|
using Program::deviceBuildInfos;
|
||||||
using Program::disableZebinIfVmeEnabled;
|
using Program::disableZebinIfVmeEnabled;
|
||||||
|
using Program::enforceFallbackToPatchtokens;
|
||||||
using Program::extractInternalOptions;
|
using Program::extractInternalOptions;
|
||||||
using Program::getKernelInfo;
|
using Program::getKernelInfo;
|
||||||
using Program::internalOptionsToExtract;
|
using Program::internalOptionsToExtract;
|
||||||
|
|
|
@ -623,7 +623,19 @@ HWTEST_F(ProgramFromBinaryTest, givenIsaAllocationUsedByMultipleCsrsWhenItIsDele
|
||||||
EXPECT_TRUE(csr1.requiresInstructionCacheFlush);
|
EXPECT_TRUE(csr1.requiresInstructionCacheFlush);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ProgramFromSourceTest, givenEmptyAilWhenCreateProgramWithSourcesThenSourcesDoNotChange) {
|
void MinimumProgramFixture::SetUp() {
|
||||||
|
PlatformFixture::setUp();
|
||||||
|
cl_device_id device = pPlatform->getClDevice(0);
|
||||||
|
rootDeviceIndex = pPlatform->getClDevice(0)->getRootDeviceIndex();
|
||||||
|
NEO::ContextFixture::setUp(1, &device);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MinimumProgramFixture::TearDown() {
|
||||||
|
NEO::ContextFixture::tearDown();
|
||||||
|
NEO::PlatformFixture::tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(MinimumProgramFixture, givenEmptyAilWhenCreateProgramWithSourcesThenSourcesDoNotChange) {
|
||||||
|
|
||||||
VariableBackup<AILConfiguration *> ailConfigurationBackup(&ailConfigurationTable[productFamily]);
|
VariableBackup<AILConfiguration *> ailConfigurationBackup(&ailConfigurationTable[productFamily]);
|
||||||
ailConfigurationTable[productFamily] = nullptr;
|
ailConfigurationTable[productFamily] = nullptr;
|
||||||
|
@ -644,6 +656,53 @@ TEST_F(ProgramFromSourceTest, givenEmptyAilWhenCreateProgramWithSourcesThenSourc
|
||||||
pProgram->release();
|
pProgram->release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HWTEST2_F(MinimumProgramFixture, givenEmptyAilWhenCreateProgramWithSourcesAndWithDummyKernelThenDoNotSetFallbackRequired, IsICLLPOrTGLLP) {
|
||||||
|
|
||||||
|
VariableBackup<AILConfiguration *> ailConfigurationBackup(&ailConfigurationTable[productFamily]);
|
||||||
|
ailConfigurationTable[productFamily] = nullptr;
|
||||||
|
const char *dummyKernelSources[] = {"kernel void _(){}"}; // if detected - should trigger fallback to CTNI
|
||||||
|
size_t knownSourceSize = strlen(dummyKernelSources[0]);
|
||||||
|
|
||||||
|
auto pProgram = Program::create<MockProgram>(
|
||||||
|
pContext,
|
||||||
|
1,
|
||||||
|
dummyKernelSources,
|
||||||
|
&knownSourceSize,
|
||||||
|
retVal);
|
||||||
|
|
||||||
|
ASSERT_NE(nullptr, pProgram);
|
||||||
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||||
|
|
||||||
|
EXPECT_FALSE(pProgram->enforceFallbackToPatchtokens);
|
||||||
|
pProgram->release();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(MinimumProgramFixture, givenEnforceLegacyBinaryFormatFlagSetWhenBuildingProgramThenInternalOptionsShouldContainDisableZebinOption) {
|
||||||
|
const char *kernelSources[] = {"some source code"};
|
||||||
|
size_t knownSourceSize = strlen(kernelSources[0]);
|
||||||
|
|
||||||
|
auto cip = new MockCompilerInterfaceCaptureBuildOptions();
|
||||||
|
auto pDevice = pContext->getDevice(0);
|
||||||
|
pDevice->getExecutionEnvironment()->rootDeviceEnvironments[pDevice->getRootDeviceIndex()]->compilerInterface.reset(cip);
|
||||||
|
|
||||||
|
auto pProgram = Program::create<SucceedingGenBinaryProgram>(
|
||||||
|
pContext,
|
||||||
|
1,
|
||||||
|
kernelSources,
|
||||||
|
&knownSourceSize,
|
||||||
|
retVal);
|
||||||
|
|
||||||
|
ASSERT_NE(nullptr, pProgram);
|
||||||
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||||
|
|
||||||
|
pProgram->enforceFallbackToPatchtokens = true;
|
||||||
|
retVal = pProgram->build(pProgram->getDevices(), "", false);
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
|
||||||
|
EXPECT_TRUE(CompilerOptions::contains(cip->buildInternalOptions, CompilerOptions::disableZebin));
|
||||||
|
pProgram->release();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ProgramFromSourceTest, GivenSpecificParamatersWhenBuildingProgramThenSuccessOrCorrectErrorCodeIsReturned) {
|
TEST_F(ProgramFromSourceTest, GivenSpecificParamatersWhenBuildingProgramThenSuccessOrCorrectErrorCodeIsReturned) {
|
||||||
KernelBinaryHelper kbHelper(binaryFileName, true);
|
KernelBinaryHelper kbHelper(binaryFileName, true);
|
||||||
auto device = pPlatform->getClDevice(0);
|
auto device = pPlatform->getClDevice(0);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018-2022 Intel Corporation
|
* Copyright (C) 2018-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -8,6 +8,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "opencl/test/unit_test/fixtures/cl_device_fixture.h"
|
#include "opencl/test/unit_test/fixtures/cl_device_fixture.h"
|
||||||
#include "opencl/test/unit_test/fixtures/context_fixture.h"
|
#include "opencl/test/unit_test/fixtures/context_fixture.h"
|
||||||
|
#include "opencl/test/unit_test/fixtures/platform_fixture.h"
|
||||||
|
#include "opencl/test/unit_test/mocks/mock_program.h"
|
||||||
|
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
@ -23,3 +25,18 @@ class ProgramTests : public NEO::ClDeviceFixture,
|
||||||
void SetUp() override;
|
void SetUp() override;
|
||||||
void TearDown() override;
|
void TearDown() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MinimumProgramFixture : public NEO::ContextFixture,
|
||||||
|
public NEO::PlatformFixture,
|
||||||
|
public ::testing::Test {
|
||||||
|
|
||||||
|
using NEO::ContextFixture::setUp;
|
||||||
|
using NEO::PlatformFixture::setUp;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void SetUp() override;
|
||||||
|
void TearDown() override;
|
||||||
|
|
||||||
|
cl_int retVal = CL_SUCCESS;
|
||||||
|
uint32_t rootDeviceIndex = std::numeric_limits<uint32_t>::max();
|
||||||
|
};
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Intel Corporation
|
* Copyright (C) 2021-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -20,8 +20,8 @@ bool AILConfiguration::isKernelHashCorrect(const std::string &kernelsSources, ui
|
||||||
return hash == expectedHash;
|
return hash == expectedHash;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AILConfiguration::sourcesContainKernel(const std::string &kernelsSources, std::string_view kernelName) const {
|
bool AILConfiguration::sourcesContain(const std::string &sources, std::string_view contentToFind) const {
|
||||||
return (kernelsSources.find(kernelName) != std::string::npos);
|
return (sources.find(contentToFind) != std::string::npos);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Intel Corporation
|
* Copyright (C) 2021-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -49,11 +49,13 @@ class AILConfiguration {
|
||||||
|
|
||||||
virtual void modifyKernelIfRequired(std::string &kernel) = 0;
|
virtual void modifyKernelIfRequired(std::string &kernel) = 0;
|
||||||
|
|
||||||
|
virtual void forceFallbackToPatchtokensIfRequired(const std::string &kernelSources, bool &requiresFallback) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) = 0;
|
virtual void applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) = 0;
|
||||||
std::string processName;
|
std::string processName;
|
||||||
|
|
||||||
bool sourcesContainKernel(const std::string &kernelSources, std::string_view kernelName) const;
|
bool sourcesContain(const std::string &sources, std::string_view contentToFind) const;
|
||||||
MOCKABLE_VIRTUAL bool isKernelHashCorrect(const std::string &kernelSources, uint64_t expectedHash) const;
|
MOCKABLE_VIRTUAL bool isKernelHashCorrect(const std::string &kernelSources, uint64_t expectedHash) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -70,6 +72,7 @@ class AILConfigurationHw : public AILConfiguration {
|
||||||
void applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) override;
|
void applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) override;
|
||||||
|
|
||||||
void modifyKernelIfRequired(std::string &kernel) override;
|
void modifyKernelIfRequired(std::string &kernel) override;
|
||||||
|
void forceFallbackToPatchtokensIfRequired(const std::string &kernelSources, bool &requiresFallback) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <PRODUCT_FAMILY product>
|
template <PRODUCT_FAMILY product>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2022 Intel Corporation
|
* Copyright (C) 2022-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -15,6 +15,10 @@ template <PRODUCT_FAMILY Product>
|
||||||
void AILConfigurationHw<Product>::modifyKernelIfRequired(std::string &kernel) {
|
void AILConfigurationHw<Product>::modifyKernelIfRequired(std::string &kernel) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <PRODUCT_FAMILY Product>
|
||||||
|
inline void AILConfigurationHw<Product>::forceFallbackToPatchtokensIfRequired(const std::string &kernelSources, bool &requiresFallback) {
|
||||||
|
}
|
||||||
|
|
||||||
template <PRODUCT_FAMILY Product>
|
template <PRODUCT_FAMILY Product>
|
||||||
inline void AILConfigurationHw<Product>::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) {
|
inline void AILConfigurationHw<Product>::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2022 Intel Corporation
|
* Copyright (C) 2022-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -34,5 +34,17 @@ inline void AILConfigurationHw<IGFX_ICELAKE_LP>::applyExt(RuntimeCapabilityTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// To avoid a known oneDNN issue in ZEBin handling, affecting ICL and TGL platforms,
|
||||||
|
// fall back to legacy (patchtoken) format when dummy kernel used by nGen is detected.
|
||||||
|
// Only this specific kernel with that exact source code will be affected.
|
||||||
|
|
||||||
|
template <>
|
||||||
|
inline void AILConfigurationHw<IGFX_ICELAKE_LP>::forceFallbackToPatchtokensIfRequired(const std::string &kernelSources, bool &setFallback) {
|
||||||
|
std::string_view dummyKernelSource{"kernel void _(){}"};
|
||||||
|
if (sourcesContain(kernelSources, dummyKernelSource)) {
|
||||||
|
setFallback = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template class AILConfigurationHw<IGFX_ICELAKE_LP>;
|
template class AILConfigurationHw<IGFX_ICELAKE_LP>;
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Intel Corporation
|
* Copyright (C) 2021-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -15,6 +15,18 @@ static EnableAIL<IGFX_TIGERLAKE_LP> enableAILTGLLP;
|
||||||
|
|
||||||
std::map<std::string_view, std::vector<AILEnumeration>> applicationMapTGLLP = {};
|
std::map<std::string_view, std::vector<AILEnumeration>> applicationMapTGLLP = {};
|
||||||
|
|
||||||
|
// To avoid a known oneDNN issue in ZEBin handling, affecting ICL and TGL platforms,
|
||||||
|
// fall back to legacy (patchtoken) format when dummy kernel used by nGen is detected.
|
||||||
|
// Only this specific kernel with that exact source code will be affected.
|
||||||
|
|
||||||
|
template <>
|
||||||
|
inline void AILConfigurationHw<IGFX_TIGERLAKE_LP>::forceFallbackToPatchtokensIfRequired(const std::string &kernelSources, bool &requiresFallback) {
|
||||||
|
std::string_view dummyKernelSource{"kernel void _(){}"};
|
||||||
|
if (sourcesContain(kernelSources, dummyKernelSource)) {
|
||||||
|
requiresFallback = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template class AILConfigurationHw<IGFX_TIGERLAKE_LP>;
|
template class AILConfigurationHw<IGFX_TIGERLAKE_LP>;
|
||||||
|
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Intel Corporation
|
* Copyright (C) 2021-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "shared/source/ail/ail_configuration.h"
|
#include "shared/source/ail/ail_configuration_base.inl"
|
||||||
#include "shared/source/helpers/hw_info.h"
|
#include "shared/source/helpers/hw_info.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
@ -62,7 +62,7 @@ void AILConfigurationHw<IGFX_DG2>::modifyKernelIfRequired(std::string &kernelsSo
|
||||||
|
|
||||||
if (it != applicationsKernelFixesDG2.end()) {
|
if (it != applicationsKernelFixesDG2.end()) {
|
||||||
|
|
||||||
if (sourcesContainKernel(kernelsSources, it->kernelName) && isKernelHashCorrect(kernelsSources, it->kernelHash)) {
|
if (sourcesContain(kernelsSources, it->kernelName) && isKernelHashCorrect(kernelsSources, it->kernelHash)) {
|
||||||
kernelsSources.insert(it->fixStartPosition, it->fixCode);
|
kernelsSources.insert(it->fixStartPosition, it->fixCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Intel Corporation
|
* Copyright (C) 2021-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -60,6 +60,8 @@ using IsADLS = IsProduct<IGFX_ALDERLAKE_S>;
|
||||||
using IsADLP = IsProduct<IGFX_ALDERLAKE_P>;
|
using IsADLP = IsProduct<IGFX_ALDERLAKE_P>;
|
||||||
using IsRKL = IsProduct<IGFX_ROCKETLAKE>;
|
using IsRKL = IsProduct<IGFX_ROCKETLAKE>;
|
||||||
|
|
||||||
|
using IsICLLPOrTGLLP = IsAnyProducts<IGFX_ICELAKE_LP, IGFX_TIGERLAKE_LP>;
|
||||||
|
|
||||||
using IsXEHP = IsProduct<IGFX_XE_HP_SDV>;
|
using IsXEHP = IsProduct<IGFX_XE_HP_SDV>;
|
||||||
using IsNotXEHP = IsNotWithinProducts<IGFX_XE_HP_SDV, IGFX_XE_HP_SDV>;
|
using IsNotXEHP = IsNotWithinProducts<IGFX_XE_HP_SDV, IGFX_XE_HP_SDV>;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Intel Corporation
|
* Copyright (C) 2021-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -21,7 +21,7 @@ class AILMock : public AILConfigurationHw<productFamily> {
|
||||||
public:
|
public:
|
||||||
using AILConfiguration::isKernelHashCorrect;
|
using AILConfiguration::isKernelHashCorrect;
|
||||||
using AILConfiguration::processName;
|
using AILConfiguration::processName;
|
||||||
using AILConfiguration::sourcesContainKernel;
|
using AILConfiguration::sourcesContain;
|
||||||
};
|
};
|
||||||
|
|
||||||
HWTEST2_F(AILTests, givenInitializedTemplateWhenGetAILConfigurationThenNullptrIsNotReturned, IsSKL) {
|
HWTEST2_F(AILTests, givenInitializedTemplateWhenGetAILConfigurationThenNullptrIsNotReturned, IsSKL) {
|
||||||
|
@ -131,8 +131,8 @@ __kernel void CopyBufferToBufferMiddle(
|
||||||
uint4 loaded = vload4(gid, pSrc);
|
uint4 loaded = vload4(gid, pSrc);
|
||||||
vstore4(loaded, gid, pDst);)";
|
vstore4(loaded, gid, pDst);)";
|
||||||
|
|
||||||
EXPECT_TRUE(ail.sourcesContainKernel(kernelSources, "CopyBufferToBufferMiddle"));
|
EXPECT_TRUE(ail.sourcesContain(kernelSources, "CopyBufferToBufferMiddle"));
|
||||||
EXPECT_FALSE(ail.sourcesContainKernel(kernelSources, "CopyBufferToBufferMiddleStateless"));
|
EXPECT_FALSE(ail.sourcesContain(kernelSources, "CopyBufferToBufferMiddleStateless"));
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST2_F(AILTests, whenCheckingIsKernelHashCorrectThenCorrectResultIsReturned, IsAtLeastGen12lp) {
|
HWTEST2_F(AILTests, whenCheckingIsKernelHashCorrectThenCorrectResultIsReturned, IsAtLeastGen12lp) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2022 Intel Corporation
|
# Copyright (C) 2022-2023 Intel Corporation
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
#
|
#
|
||||||
|
@ -14,6 +14,7 @@ if(TESTS_ICLLP)
|
||||||
${NEO_SHARED_tests_gen11_icllp}
|
${NEO_SHARED_tests_gen11_icllp}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_hw_info_config_icllp.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_hw_info_config_icllp.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_program_media_sampler_icllp.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_program_media_sampler_icllp.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/ail_tests_icllp.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_subdirectories()
|
add_subdirectories()
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Intel Corporation
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "shared/source/ail/ail_configuration.h"
|
||||||
|
#include "shared/test/common/test_macros/hw_test.h"
|
||||||
|
|
||||||
|
namespace NEO {
|
||||||
|
|
||||||
|
using AILTestsIcllp = ::testing::Test;
|
||||||
|
|
||||||
|
HWTEST2_F(AILTestsIcllp, whenKernelSourceIsANGenDummyKernelThenDoEnforcePatchtokensFormat, IsICLLP) {
|
||||||
|
std::string dummyKernelSource{"kernel void _(){}"};
|
||||||
|
bool enforceRebuildToCTNI = false;
|
||||||
|
|
||||||
|
AILConfigurationHw<IGFX_ICELAKE_LP> ail;
|
||||||
|
ail.forceFallbackToPatchtokensIfRequired(dummyKernelSource, enforceRebuildToCTNI);
|
||||||
|
|
||||||
|
EXPECT_TRUE(enforceRebuildToCTNI);
|
||||||
|
}
|
||||||
|
|
||||||
|
HWTEST2_F(AILTestsIcllp, whenKernelSourceIsNotANGenDummyKernelThenDoNotEnforcePatchtokensFormat, IsICLLP) {
|
||||||
|
std::string dummyKernelSource{"kernel void copybuffer(__global int* a, __global int* b){ //some code }"};
|
||||||
|
bool enforceRebuildToCTNI = false;
|
||||||
|
|
||||||
|
AILConfigurationHw<IGFX_ICELAKE_LP> ail;
|
||||||
|
ail.forceFallbackToPatchtokensIfRequired(dummyKernelSource, enforceRebuildToCTNI);
|
||||||
|
|
||||||
|
EXPECT_FALSE(enforceRebuildToCTNI);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace NEO
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2022 Intel Corporation
|
# Copyright (C) 2022-2023 Intel Corporation
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
#
|
#
|
||||||
|
@ -11,6 +11,7 @@ if(TESTS_TGLLP)
|
||||||
${NEO_SHARED_tests_genlp12_tgllp}
|
${NEO_SHARED_tests_genlp12_tgllp}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_hw_helper_tgllp.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_hw_helper_tgllp.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config_tests_tgllp.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config_tests_tgllp.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/ail_tests_tgllp.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_subdirectories()
|
add_subdirectories()
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Intel Corporation
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "shared/source/ail/ail_configuration.h"
|
||||||
|
#include "shared/test/common/test_macros/hw_test.h"
|
||||||
|
|
||||||
|
namespace NEO {
|
||||||
|
|
||||||
|
using AILTestsTgllp = ::testing::Test;
|
||||||
|
|
||||||
|
HWTEST2_F(AILTestsTgllp, whenKernelSourceIsANGenDummyKernelThenDoEnforcePatchtokensFormat, IsTGLLP) {
|
||||||
|
std::string dummyKernelSource{"kernel void _(){}"};
|
||||||
|
bool enforceRebuildToCTNI = false;
|
||||||
|
|
||||||
|
AILConfigurationHw<IGFX_TIGERLAKE_LP> ail;
|
||||||
|
ail.forceFallbackToPatchtokensIfRequired(dummyKernelSource, enforceRebuildToCTNI);
|
||||||
|
|
||||||
|
EXPECT_TRUE(enforceRebuildToCTNI);
|
||||||
|
}
|
||||||
|
|
||||||
|
HWTEST2_F(AILTestsTgllp, whenKernelSourceIsNotANGenDummyKernelThenDoNotEnforcePatchtokensFormat, IsTGLLP) {
|
||||||
|
std::string dummyKernelSource{"kernel void copybuffer(__global int* a, __global int* b){ //some code }"};
|
||||||
|
bool enforceRebuildToCTNI = false;
|
||||||
|
|
||||||
|
AILConfigurationHw<IGFX_TIGERLAKE_LP> ail;
|
||||||
|
ail.forceFallbackToPatchtokensIfRequired(dummyKernelSource, enforceRebuildToCTNI);
|
||||||
|
|
||||||
|
EXPECT_FALSE(enforceRebuildToCTNI);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace NEO
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2022 Intel Corporation
|
* Copyright (C) 2022-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -19,7 +19,7 @@ HWTEST2_F(AILTestsDg2, givenFixesForApplicationsWhenModifyKernelIfRequiredIsCall
|
||||||
class AILMock : public AILConfigurationHw<productFamily> {
|
class AILMock : public AILConfigurationHw<productFamily> {
|
||||||
public:
|
public:
|
||||||
using AILConfiguration::processName;
|
using AILConfiguration::processName;
|
||||||
using AILConfiguration::sourcesContainKernel;
|
using AILConfiguration::sourcesContain;
|
||||||
|
|
||||||
bool isKernelHashCorrect(const std::string &kernelSources, uint64_t expectedHash) const override {
|
bool isKernelHashCorrect(const std::string &kernelSources, uint64_t expectedHash) const override {
|
||||||
return hashCorrect;
|
return hashCorrect;
|
||||||
|
@ -46,7 +46,7 @@ HWTEST2_F(AILTestsDg2, givenFixesForApplicationsWhenModifyKernelIfRequiredIsCall
|
||||||
kernelSources.resize(16480u, 'a');
|
kernelSources.resize(16480u, 'a');
|
||||||
auto copyKernelSources = kernelSources;
|
auto copyKernelSources = kernelSources;
|
||||||
|
|
||||||
EXPECT_FALSE(ail.sourcesContainKernel(kernelSources, "findBlocksWithInteractions"));
|
EXPECT_FALSE(ail.sourcesContain(kernelSources, "findBlocksWithInteractions"));
|
||||||
|
|
||||||
// sources should not change
|
// sources should not change
|
||||||
ail.modifyKernelIfRequired(kernelSources);
|
ail.modifyKernelIfRequired(kernelSources);
|
||||||
|
@ -62,7 +62,7 @@ HWTEST2_F(AILTestsDg2, givenFixesForApplicationsWhenModifyKernelIfRequiredIsCall
|
||||||
kernelSources.resize(16480u, 'a');
|
kernelSources.resize(16480u, 'a');
|
||||||
kernelSources.insert(1024u, "findBlocksWithInteractions");
|
kernelSources.insert(1024u, "findBlocksWithInteractions");
|
||||||
auto copyKernelSources = kernelSources;
|
auto copyKernelSources = kernelSources;
|
||||||
EXPECT_TRUE(ail.sourcesContainKernel(kernelSources, "findBlocksWithInteractions"));
|
EXPECT_TRUE(ail.sourcesContain(kernelSources, "findBlocksWithInteractions"));
|
||||||
|
|
||||||
// sources should change
|
// sources should change
|
||||||
ail.modifyKernelIfRequired(kernelSources);
|
ail.modifyKernelIfRequired(kernelSources);
|
||||||
|
@ -85,7 +85,7 @@ HWTEST2_F(AILTestsDg2, givenFixesForApplicationsWhenModifyKernelIfRequiredIsCall
|
||||||
kernelSources.insert(1024u, "findBlocksWithInteractions");
|
kernelSources.insert(1024u, "findBlocksWithInteractions");
|
||||||
auto copyKernelSources = kernelSources;
|
auto copyKernelSources = kernelSources;
|
||||||
|
|
||||||
EXPECT_TRUE(ail.sourcesContainKernel(kernelSources, "findBlocksWithInteractions"));
|
EXPECT_TRUE(ail.sourcesContain(kernelSources, "findBlocksWithInteractions"));
|
||||||
|
|
||||||
// sources should not change
|
// sources should not change
|
||||||
ail.modifyKernelIfRequired(kernelSources);
|
ail.modifyKernelIfRequired(kernelSources);
|
||||||
|
|
Loading…
Reference in New Issue