Correct L0 kernel tests

respect memory copies for patching ISA
remove tests for nullptr kernel ISA

Related-To: NEO-5081, IGC-4707
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2021-12-02 17:44:51 +00:00
committed by Compute-Runtime-Automation
parent 47dbe359bf
commit 3de256b17b
3 changed files with 28 additions and 106 deletions

View File

@@ -330,17 +330,20 @@ TEST_F(KernelImmutableDataIsaCopyTests, whenUserKernelIsCreatedThenIsaIsaCopiedW
uint32_t perHwThreadPrivateMemorySizeRequested = 32u;
bool isInternal = false;
uint32_t previouscopyMemoryToAllocationCalledTimes =
size_t previouscopyMemoryToAllocationCalledTimes =
mockMemoryManager->copyMemoryToAllocationCalledTimes;
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(perHwThreadPrivateMemorySizeRequested);
createModuleFromBinary(perHwThreadPrivateMemorySizeRequested, isInternal, mockKernelImmData.get());
uint32_t copyForGlobalSurface = 1u;
uint32_t copyForIsa = 4u;
uint32_t expectedPreviouscopyMemoryToAllocationCalledTimes = previouscopyMemoryToAllocationCalledTimes +
copyForGlobalSurface + copyForIsa;
size_t copyForGlobalSurface = 1u;
auto copyForIsa = module->getKernelImmutableDataVector().size();
if (module->translationUnit->programInfo.linkerInput && module->translationUnit->programInfo.linkerInput->getTraits().requiresPatchingOfInstructionSegments) {
copyForIsa += module->getKernelImmutableDataVector().size();
}
size_t expectedPreviouscopyMemoryToAllocationCalledTimes = previouscopyMemoryToAllocationCalledTimes +
copyForGlobalSurface + copyForIsa;
EXPECT_EQ(expectedPreviouscopyMemoryToAllocationCalledTimes,
mockMemoryManager->copyMemoryToAllocationCalledTimes);
@@ -353,38 +356,6 @@ TEST_F(KernelImmutableDataIsaCopyTests, whenUserKernelIsCreatedThenIsaIsaCopiedW
mockMemoryManager->copyMemoryToAllocationCalledTimes);
}
TEST_F(KernelImmutableDataIsaCopyTests, whenInternalKernelIsCreatedThenIsaIsCopiedWhenCreateKernelIsCalled) {
MockImmutableMemoryManager *mockMemoryManager =
static_cast<MockImmutableMemoryManager *>(device->getNEODevice()->getMemoryManager());
uint32_t perHwThreadPrivateMemorySizeRequested = 32u;
bool isInternal = true;
uint32_t previouscopyMemoryToAllocationCalledTimes =
mockMemoryManager->copyMemoryToAllocationCalledTimes;
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(perHwThreadPrivateMemorySizeRequested);
createModuleFromBinary(perHwThreadPrivateMemorySizeRequested, isInternal, mockKernelImmData.get());
uint32_t copyForGlobalSurface = 1u;
uint32_t copyForIsa = 0u;
uint32_t expectedPreviouscopyMemoryToAllocationCalledTimes = previouscopyMemoryToAllocationCalledTimes +
copyForGlobalSurface + copyForIsa;
EXPECT_EQ(expectedPreviouscopyMemoryToAllocationCalledTimes,
mockMemoryManager->copyMemoryToAllocationCalledTimes);
std::unique_ptr<ModuleImmutableDataFixture::MockKernel> kernel;
kernel = std::make_unique<ModuleImmutableDataFixture::MockKernel>(module.get());
createKernel(kernel.get());
expectedPreviouscopyMemoryToAllocationCalledTimes = previouscopyMemoryToAllocationCalledTimes + 1u;
EXPECT_EQ(expectedPreviouscopyMemoryToAllocationCalledTimes,
mockMemoryManager->copyMemoryToAllocationCalledTimes);
}
TEST_F(KernelImmutableDataIsaCopyTests, whenImmutableDataIsInitializedForUserKernelThenIsaIsCopied) {
MockImmutableMemoryManager *mockMemoryManager =
static_cast<MockImmutableMemoryManager *>(device->getNEODevice()->getMemoryManager());
@@ -433,35 +404,7 @@ TEST_F(KernelImmutableDataIsaCopyTests, whenImmutableDataIsInitializedForInterna
using KernelImmutableDataWithNullHeapTests = KernelImmutableDataTests;
TEST_F(KernelImmutableDataWithNullHeapTests, whenImmutableDataIsInitializedForUserKernelWithNullKernelHeapThenIsaIsNotCopied) {
MockImmutableMemoryManager *mockMemoryManager =
static_cast<MockImmutableMemoryManager *>(device->getNEODevice()->getMemoryManager());
uint32_t perHwThreadPrivateMemorySizeRequested = 32u;
bool isInternal = false;
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(perHwThreadPrivateMemorySizeRequested);
createModuleFromBinary(perHwThreadPrivateMemorySizeRequested, isInternal, mockKernelImmData.get());
auto previousKernelHeap = mockKernelImmData->kernelInfo->heapInfo.pKernelHeap;
mockKernelImmData->kernelInfo->heapInfo.pKernelHeap = nullptr;
uint32_t previouscopyMemoryToAllocationCalledTimes =
mockMemoryManager->copyMemoryToAllocationCalledTimes;
mockKernelImmData->initialize(mockKernelImmData->mockKernelInfo, device,
device->getNEODevice()->getDeviceInfo().computeUnitsUsedForScratch,
module.get()->translationUnit->globalConstBuffer,
module.get()->translationUnit->globalVarBuffer,
isInternal);
EXPECT_EQ(previouscopyMemoryToAllocationCalledTimes,
mockMemoryManager->copyMemoryToAllocationCalledTimes);
mockKernelImmData->kernelInfo->heapInfo.pKernelHeap = previousKernelHeap;
}
TEST_F(KernelImmutableDataWithNullHeapTests, whenImmutableDataIsInitializedForInternalKernelWithNullKernelHeapThenIsaIsNotCopied) {
TEST_F(KernelImmutableDataTests, givenInternalModuleWhenKernelIsCreatedThenSingleIsaIsCopied) {
MockImmutableMemoryManager *mockMemoryManager =
static_cast<MockImmutableMemoryManager *>(device->getNEODevice()->getMemoryManager());
@@ -469,59 +412,32 @@ TEST_F(KernelImmutableDataWithNullHeapTests, whenImmutableDataIsInitializedForIn
bool isInternal = true;
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(perHwThreadPrivateMemorySizeRequested);
createModuleFromBinary(perHwThreadPrivateMemorySizeRequested, isInternal, mockKernelImmData.get());
mockKernelImmData->getIsaGraphicsAllocation()->setAllocationType(GraphicsAllocation::AllocationType::KERNEL_ISA_INTERNAL);
auto previousKernelHeap = mockKernelImmData->kernelInfo->heapInfo.pKernelHeap;
mockKernelImmData->kernelInfo->heapInfo.pKernelHeap = nullptr;
uint32_t previouscopyMemoryToAllocationCalledTimes =
mockMemoryManager->copyMemoryToAllocationCalledTimes;
mockKernelImmData->initialize(mockKernelImmData->mockKernelInfo, device,
device->getNEODevice()->getDeviceInfo().computeUnitsUsedForScratch,
module.get()->translationUnit->globalConstBuffer,
module.get()->translationUnit->globalVarBuffer,
isInternal);
EXPECT_EQ(previouscopyMemoryToAllocationCalledTimes,
mockMemoryManager->copyMemoryToAllocationCalledTimes);
mockKernelImmData->kernelInfo->heapInfo.pKernelHeap = previousKernelHeap;
}
TEST_F(KernelImmutableDataWithNullHeapTests, whenInternalKernelIsCreatedWithNullKernelHeapThenIsaIsNotCopied) {
MockImmutableMemoryManager *mockMemoryManager =
static_cast<MockImmutableMemoryManager *>(device->getNEODevice()->getMemoryManager());
uint32_t perHwThreadPrivateMemorySizeRequested = 32u;
bool isInternal = true;
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(perHwThreadPrivateMemorySizeRequested);
uint32_t previouscopyMemoryToAllocationCalledTimes =
size_t previouscopyMemoryToAllocationCalledTimes =
mockMemoryManager->copyMemoryToAllocationCalledTimes;
createModuleFromBinary(perHwThreadPrivateMemorySizeRequested, isInternal, mockKernelImmData.get());
uint32_t copyForGlobalSurface = 1u;
uint32_t copyForIsa = 0u;
uint32_t expectedPreviouscopyMemoryToAllocationCalledTimes = previouscopyMemoryToAllocationCalledTimes +
copyForGlobalSurface + copyForIsa;
size_t copyForGlobalSurface = 1u;
size_t copyForPatchingIsa = 0u;
if (module->translationUnit->programInfo.linkerInput && module->translationUnit->programInfo.linkerInput->getTraits().requiresPatchingOfInstructionSegments) {
copyForPatchingIsa += module->getKernelImmutableDataVector().size();
}
size_t expectedPreviouscopyMemoryToAllocationCalledTimes = previouscopyMemoryToAllocationCalledTimes +
copyForGlobalSurface + copyForPatchingIsa;
EXPECT_EQ(expectedPreviouscopyMemoryToAllocationCalledTimes,
mockMemoryManager->copyMemoryToAllocationCalledTimes);
std::unique_ptr<ModuleImmutableDataFixture::MockKernel> kernel;
kernel = std::make_unique<ModuleImmutableDataFixture::MockKernel>(module.get());
auto previousKernelHeap = mockKernelImmData->kernelInfo->heapInfo.pKernelHeap;
mockKernelImmData->kernelInfo->heapInfo.pKernelHeap = nullptr;
expectedPreviouscopyMemoryToAllocationCalledTimes++;
createKernel(kernel.get());
EXPECT_EQ(expectedPreviouscopyMemoryToAllocationCalledTimes,
mockMemoryManager->copyMemoryToAllocationCalledTimes);
mockKernelImmData->kernelInfo->heapInfo.pKernelHeap = previousKernelHeap;
}
TEST_F(KernelImmutableDataTests, givenKernelInitializedWithPrivateMemoryThenContainerHasOneExtraSpaceForAllocation) {

View File

@@ -920,7 +920,11 @@ HWTEST_F(ModuleLinkingTest, whenExternFunctionsAllocationIsPresentThenItsBeingAd
MockGraphicsAllocation alloc;
module.exportedFunctionsSurface = &alloc;
uint8_t data{};
KernelInfo kernelInfo{};
kernelInfo.heapInfo.pKernelHeap = &data;
kernelInfo.heapInfo.KernelHeapSize = sizeof(data);
std::unique_ptr<WhiteBox<::L0::KernelImmutableData>> kernelImmData{new WhiteBox<::L0::KernelImmutableData>(this->device)};
kernelImmData->initialize(&kernelInfo, device, 0, nullptr, nullptr, false);
module.kernelImmDatas.push_back(std::move(kernelImmData));