mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 01:04:57 +08:00
fix: Do not align svm gpu greater than its svm cpu
Resolves: HSD-18042781233 Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
7e540d5ad5
commit
3e2acefac1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2023 Intel Corporation
|
||||
* Copyright (C) 2021-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -42,11 +42,20 @@ void AlignmentSelector::addCandidateAlignment(size_t alignment, bool applyForSma
|
||||
}
|
||||
|
||||
AlignmentSelector::CandidateAlignment AlignmentSelector::selectAlignment(size_t size) const {
|
||||
constexpr size_t noAlignmentLimit = std::numeric_limits<size_t>::max();
|
||||
return this->selectAlignment(size, noAlignmentLimit);
|
||||
}
|
||||
|
||||
AlignmentSelector::CandidateAlignment AlignmentSelector::selectAlignment(size_t size, size_t maximumPossibleAlignment) const {
|
||||
for (const CandidateAlignment &candidateAlignment : this->candidateAlignments) {
|
||||
if (!candidateAlignment.applyForSmallerSize && size < candidateAlignment.alignment) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (candidateAlignment.alignment > maximumPossibleAlignment) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const size_t alignedSize = alignUp(size, candidateAlignment.alignment);
|
||||
const size_t wastedMemory = alignedSize - size;
|
||||
const size_t maxWastedMemory = static_cast<size_t>(alignedSize * candidateAlignment.maxMemoryWastage);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2022 Intel Corporation
|
||||
* Copyright (C) 2021-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -32,6 +32,7 @@ class AlignmentSelector {
|
||||
void addCandidateAlignment(size_t alignment, bool applyForSmallerSize, float maxMemoryWastage, HeapIndex heap);
|
||||
|
||||
CandidateAlignment selectAlignment(size_t size) const;
|
||||
CandidateAlignment selectAlignment(size_t size, size_t maximumPossibleAlignment) const;
|
||||
auto &peekCandidateAlignments() const { return candidateAlignments; }
|
||||
|
||||
private:
|
||||
|
||||
@@ -1433,7 +1433,7 @@ GraphicsAllocation *WddmMemoryManager::allocateGraphicsMemoryInDevicePool(const
|
||||
alignment = MemoryConstants::pageSize64k;
|
||||
sizeAligned = allocationData.imgInfo->size;
|
||||
} else {
|
||||
alignment = (allocationData.type == AllocationType::svmGpu && allocationData.allocationMethod == NEO::GfxMemoryAllocationMethod::allocateByKmd) ? allocationData.alignment : alignmentSelector.selectAlignment(allocationData.size).alignment;
|
||||
alignment = alignmentSelector.selectAlignment(allocationData.size, allocationData.type == AllocationType::svmGpu ? allocationData.alignment : std::numeric_limits<size_t>::max()).alignment;
|
||||
sizeAligned = alignUp(allocationData.size, alignment);
|
||||
|
||||
if (debugManager.flags.ExperimentalAlignLocalMemorySizeTo2MB.get()) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2023 Intel Corporation
|
||||
* Copyright (C) 2019-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -52,6 +52,15 @@ TEST(AlignmentSelectorTests, givenApplyForSmallerSizeEnabledAndAllocationIsTooSm
|
||||
EXPECT_EQ(128u, selector.selectAlignment(127).alignment);
|
||||
}
|
||||
|
||||
TEST(AlignmentSelectorTests, givenMaximimumPossibleAlignmentWhenSelectAlignmentThenDoNotSelectGreaterThanLimit) {
|
||||
AlignmentSelector selector{};
|
||||
selector.addCandidateAlignment(1024, false, AlignmentSelector::anyWastage);
|
||||
selector.addCandidateAlignment(2048, false, AlignmentSelector::anyWastage);
|
||||
|
||||
EXPECT_EQ(2048u, selector.selectAlignment(90000, std::numeric_limits<size_t>::max()).alignment);
|
||||
EXPECT_EQ(1024u, selector.selectAlignment(90000, 1024u).alignment);
|
||||
}
|
||||
|
||||
TEST(AlignmentSelectorTests, givenMultipleMatchingCandidateAlignmentsWhenSelectingAlignmentThenSelectTheBiggest) {
|
||||
AlignmentSelector selector{};
|
||||
selector.addCandidateAlignment(1024, false, AlignmentSelector::anyWastage);
|
||||
|
||||
@@ -2033,6 +2033,7 @@ TEST_F(WddmMemoryManagerSimpleTest, givenShareableAllocationWhenAllocateGraphics
|
||||
properties.size = MemoryConstants::pageSize;
|
||||
properties.flags.allocateMemory = true;
|
||||
properties.flags.shareable = true;
|
||||
properties.alignment = MemoryConstants::pageSize64k;
|
||||
|
||||
auto allocation = memoryManager->allocateGraphicsMemoryInPreferredPool(properties, nullptr);
|
||||
EXPECT_NE(nullptr, allocation);
|
||||
|
||||
Reference in New Issue
Block a user