mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-22 01:48:50 +08:00
Fix alignment to be based on starting address
Related-To: LOCI-2342 Signed-off-by: Young Jin Yoon <young.jin.yoon@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
a481c28e55
commit
a1036ecc75
@@ -76,7 +76,8 @@ class HeapAllocator {
|
|||||||
pLeftBound += sizeToAllocate;
|
pLeftBound += sizeToAllocate;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const uint64_t misalignment = pRightBound - alignDown(pRightBound, alignment);
|
const uint64_t pStart = pRightBound - sizeToAllocate;
|
||||||
|
const uint64_t misalignment = pStart - alignDown(pStart, alignment);
|
||||||
if (pLeftBound + sizeToAllocate + misalignment <= pRightBound) {
|
if (pLeftBound + sizeToAllocate + misalignment <= pRightBound) {
|
||||||
if (misalignment) {
|
if (misalignment) {
|
||||||
pRightBound -= misalignment;
|
pRightBound -= misalignment;
|
||||||
|
|||||||
@@ -1074,6 +1074,32 @@ TEST(HeapAllocatorTest, givenAlignedBoundWhenAllocatingMemoryWithCustomAlignment
|
|||||||
EXPECT_EQ(heapSize - 2 * ptrSize, heapAllocator.getavailableSize());
|
EXPECT_EQ(heapSize - 2 * ptrSize, heapAllocator.getavailableSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(HeapAllocatorTest, givenAlignedBoundWhenAllocatingMemoryWithCustomAlignmentBiggerThanPtrSizeFromRightThenReturnAllocations) {
|
||||||
|
const uint64_t heapBase = 0x100000llu;
|
||||||
|
const size_t heapSize = 1024u * 4096u;
|
||||||
|
HeapAllocatorUnderTest heapAllocator(heapBase, heapSize, allocationAlignment, sizeThreshold);
|
||||||
|
|
||||||
|
size_t customAlignment = 8 * MemoryConstants::pageSize;
|
||||||
|
size_t ptrSize = 8 * MemoryConstants::pageSize;
|
||||||
|
uint64_t ptr = heapAllocator.allocateWithCustomAlignment(ptrSize, customAlignment);
|
||||||
|
EXPECT_EQ(heapBase + heapSize - ptrSize, heapAllocator.getRightBound());
|
||||||
|
EXPECT_EQ(heapBase, heapAllocator.getLeftBound());
|
||||||
|
EXPECT_EQ(8 * MemoryConstants::pageSize, ptrSize);
|
||||||
|
EXPECT_EQ(heapBase + heapSize - ptrSize, ptr);
|
||||||
|
EXPECT_EQ(0u, heapAllocator.getFreedChunksBig().size());
|
||||||
|
EXPECT_EQ(heapSize - ptrSize, heapAllocator.getavailableSize());
|
||||||
|
|
||||||
|
ptrSize = 8 * MemoryConstants::pageSize;
|
||||||
|
customAlignment = 32 * MemoryConstants::pageSize;
|
||||||
|
ptr = heapAllocator.allocateWithCustomAlignment(ptrSize, customAlignment);
|
||||||
|
EXPECT_EQ(heapBase + heapSize - customAlignment, heapAllocator.getRightBound());
|
||||||
|
EXPECT_EQ(heapBase, heapAllocator.getLeftBound());
|
||||||
|
EXPECT_EQ(8 * MemoryConstants::pageSize, ptrSize);
|
||||||
|
EXPECT_EQ(heapBase + heapSize - customAlignment, ptr);
|
||||||
|
EXPECT_EQ(0u, heapAllocator.getFreedChunksBig().size());
|
||||||
|
EXPECT_EQ(heapSize - 2 * ptrSize, heapAllocator.getavailableSize());
|
||||||
|
}
|
||||||
|
|
||||||
TEST(HeapAllocatorTest, givenUnalignedBoundWhenAllocatingWithCustomAlignmentFromLeftThenAlignBoundBeforeAllocation) {
|
TEST(HeapAllocatorTest, givenUnalignedBoundWhenAllocatingWithCustomAlignmentFromLeftThenAlignBoundBeforeAllocation) {
|
||||||
const uint64_t heapBase = 0x100000llu;
|
const uint64_t heapBase = 0x100000llu;
|
||||||
const size_t heapSize = 1024u * 4096u;
|
const size_t heapSize = 1024u * 4096u;
|
||||||
|
|||||||
Reference in New Issue
Block a user