mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-24 21:18:24 +08:00
Don't copy memory to allocation if allocation has no storage
Change-Id: I3238bec02e5c1ec5877537318bb563e3d0f3799d Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
74f1896c03
commit
c0325b5d19
@@ -708,16 +708,18 @@ void Kernel::substituteKernelHeap(void *newKernelHeap, size_t newKernelHeapSize)
|
|||||||
SKernelBinaryHeaderCommon *pHeader = const_cast<SKernelBinaryHeaderCommon *>(pKernelInfo->heapInfo.pKernelHeader);
|
SKernelBinaryHeaderCommon *pHeader = const_cast<SKernelBinaryHeaderCommon *>(pKernelInfo->heapInfo.pKernelHeader);
|
||||||
pHeader->KernelHeapSize = static_cast<uint32_t>(newKernelHeapSize);
|
pHeader->KernelHeapSize = static_cast<uint32_t>(newKernelHeapSize);
|
||||||
pKernelInfo->isKernelHeapSubstituted = true;
|
pKernelInfo->isKernelHeapSubstituted = true;
|
||||||
|
auto memoryManager = device.getMemoryManager();
|
||||||
|
|
||||||
auto currentAllocationSize = pKernelInfo->kernelAllocation->getUnderlyingBufferSize();
|
auto currentAllocationSize = pKernelInfo->kernelAllocation->getUnderlyingBufferSize();
|
||||||
|
bool status = false;
|
||||||
if (currentAllocationSize >= newKernelHeapSize) {
|
if (currentAllocationSize >= newKernelHeapSize) {
|
||||||
memcpy_s(pKernelInfo->kernelAllocation->getUnderlyingBuffer(), newKernelHeapSize, newKernelHeap, newKernelHeapSize);
|
status = memoryManager->copyMemoryToAllocation(pKernelInfo->kernelAllocation, newKernelHeap, static_cast<uint32_t>(newKernelHeapSize));
|
||||||
} else {
|
} else {
|
||||||
auto memoryManager = device.getMemoryManager();
|
|
||||||
memoryManager->checkGpuUsageAndDestroyGraphicsAllocations(pKernelInfo->kernelAllocation);
|
memoryManager->checkGpuUsageAndDestroyGraphicsAllocations(pKernelInfo->kernelAllocation);
|
||||||
pKernelInfo->kernelAllocation = nullptr;
|
pKernelInfo->kernelAllocation = nullptr;
|
||||||
pKernelInfo->createKernelAllocation(memoryManager);
|
status = pKernelInfo->createKernelAllocation(memoryManager);
|
||||||
}
|
}
|
||||||
|
UNRECOVERABLE_IF(!status);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Kernel::isKernelHeapSubstituted() const {
|
bool Kernel::isKernelHeapSubstituted() const {
|
||||||
|
|||||||
@@ -406,7 +406,7 @@ HeapIndex MemoryManager::selectHeap(const GraphicsAllocation *allocation, const
|
|||||||
return HeapIndex::HEAP_LIMITED;
|
return HeapIndex::HEAP_LIMITED;
|
||||||
}
|
}
|
||||||
bool MemoryManager::copyMemoryToAllocation(GraphicsAllocation *graphicsAllocation, const void *memoryToCopy, uint32_t sizeToCopy) const {
|
bool MemoryManager::copyMemoryToAllocation(GraphicsAllocation *graphicsAllocation, const void *memoryToCopy, uint32_t sizeToCopy) const {
|
||||||
if (!graphicsAllocation || !memoryToCopy || sizeToCopy == 0u) {
|
if (!graphicsAllocation->getUnderlyingBuffer()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
memcpy_s(graphicsAllocation->getUnderlyingBuffer(), graphicsAllocation->getUnderlyingBufferSize(), memoryToCopy, sizeToCopy);
|
memcpy_s(graphicsAllocation->getUnderlyingBuffer(), graphicsAllocation->getUnderlyingBufferSize(), memoryToCopy, sizeToCopy);
|
||||||
|
|||||||
@@ -488,6 +488,9 @@ bool KernelInfo::createKernelAllocation(MemoryManager *memoryManager) {
|
|||||||
UNRECOVERABLE_IF(kernelAllocation);
|
UNRECOVERABLE_IF(kernelAllocation);
|
||||||
auto kernelIsaSize = heapInfo.pKernelHeader->KernelHeapSize;
|
auto kernelIsaSize = heapInfo.pKernelHeader->KernelHeapSize;
|
||||||
kernelAllocation = memoryManager->allocateGraphicsMemoryWithProperties({kernelIsaSize, GraphicsAllocation::AllocationType::KERNEL_ISA});
|
kernelAllocation = memoryManager->allocateGraphicsMemoryWithProperties({kernelIsaSize, GraphicsAllocation::AllocationType::KERNEL_ISA});
|
||||||
|
if (!kernelAllocation) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return memoryManager->copyMemoryToAllocation(kernelAllocation, heapInfo.pKernelHeap, kernelIsaSize);
|
return memoryManager->copyMemoryToAllocation(kernelAllocation, heapInfo.pKernelHeap, kernelIsaSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1723,16 +1723,12 @@ TEST_F(MemoryAllocatorTest, whenCommandStreamerIsNotRegisteredThenReturnNullEngi
|
|||||||
auto engineControl = memoryManager->getRegisteredEngineForCsr(dummyCsr);
|
auto engineControl = memoryManager->getRegisteredEngineForCsr(dummyCsr);
|
||||||
EXPECT_EQ(nullptr, engineControl);
|
EXPECT_EQ(nullptr, engineControl);
|
||||||
}
|
}
|
||||||
TEST(MemoryManagerCopyMemoryTest, givenNullPointerOrZeroSizeWhenCopyMemoryToAllocationThenReturnFalse) {
|
TEST(MemoryManagerCopyMemoryTest, givenAllocationWithNoStorageWhenCopyMemoryToAllocationThenReturnFalse) {
|
||||||
ExecutionEnvironment executionEnvironment;
|
ExecutionEnvironment executionEnvironment;
|
||||||
MockMemoryManager memoryManager(false, false, executionEnvironment);
|
MockMemoryManager memoryManager(false, false, executionEnvironment);
|
||||||
constexpr uint8_t allocationSize = 10;
|
|
||||||
uint8_t allocationStorage[allocationSize];
|
|
||||||
MockGraphicsAllocation allocation{allocationStorage, allocationSize};
|
|
||||||
uint8_t memory = 1;
|
uint8_t memory = 1;
|
||||||
EXPECT_FALSE(memoryManager.copyMemoryToAllocation(nullptr, &memory, sizeof(memory)));
|
MockGraphicsAllocation invalidAllocation{nullptr, 0u};
|
||||||
EXPECT_FALSE(memoryManager.copyMemoryToAllocation(&allocation, nullptr, sizeof(memory)));
|
EXPECT_FALSE(memoryManager.copyMemoryToAllocation(&invalidAllocation, &memory, sizeof(memory)));
|
||||||
EXPECT_FALSE(memoryManager.copyMemoryToAllocation(&allocation, &memory, 0u));
|
|
||||||
}
|
}
|
||||||
TEST(MemoryManagerCopyMemoryTest, givenValidAllocationAndMemoryWhenCopyMemoryToAllocationThenDataIsCopied) {
|
TEST(MemoryManagerCopyMemoryTest, givenValidAllocationAndMemoryWhenCopyMemoryToAllocationThenDataIsCopied) {
|
||||||
ExecutionEnvironment executionEnvironment;
|
ExecutionEnvironment executionEnvironment;
|
||||||
|
|||||||
Reference in New Issue
Block a user