Add initial placement hints for USM in OpenCL

Related-To: NEO-5059
Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
Maciej Dziuban
2020-11-26 17:52:21 +00:00
committed by Compute-Runtime-Automation
parent e0ec9875c3
commit 94be510c18
6 changed files with 22 additions and 12 deletions

View File

@@ -28,12 +28,12 @@ struct MemoryFlags {
uint32_t forceHostMemory : 1;
uint32_t shareable : 1;
uint32_t resource48Bit : 1;
uint32_t usmInitialPlacementCpu : 1;
uint32_t usmInitialPlacementGpu : 1;
};
struct MemoryAllocFlags {
uint32_t allocWriteCombined : 1;
uint32_t usmInitialPlacementCpu : 1;
uint32_t usmInitialPlacementGpu : 1;
};
} // namespace NEO

View File

@@ -15,7 +15,7 @@
namespace NEO {
void PageFaultManager::insertAllocation(void *ptr, size_t size, SVMAllocsManager *unifiedMemoryManager, void *cmdQ, const MemoryProperties &memoryProperties) {
const bool initialPlacementCpu = !memoryProperties.flags.usmInitialPlacementGpu;
const bool initialPlacementCpu = !memoryProperties.allocFlags.usmInitialPlacementGpu;
const auto domain = initialPlacementCpu ? AllocationDomain::Cpu : AllocationDomain::None;
std::unique_lock<SpinLock> lock{mtx};

View File

@@ -232,7 +232,7 @@ TEST_F(PageFaultManagerTest, givenInitialPlacementCpuWhenVerifyingPagefaultThenF
void *alloc = reinterpret_cast<void *>(0x1);
MemoryProperties memoryProperties{};
memoryProperties.flags.usmInitialPlacementCpu = 1;
memoryProperties.allocFlags.usmInitialPlacementCpu = 1;
pageFaultManager->insertAllocation(alloc, 10, reinterpret_cast<SVMAllocsManager *>(unifiedMemoryManager), nullptr, memoryProperties);
EXPECT_EQ(pageFaultManager->transferToCpuCalled, 0);
EXPECT_EQ(pageFaultManager->memoryData.size(), 1u);
@@ -252,7 +252,7 @@ TEST_F(PageFaultManagerTest, givenInitialPlacementGpuWhenVerifyingPagefaultThenF
void *alloc = reinterpret_cast<void *>(0x1);
MemoryProperties memoryProperties{};
memoryProperties.flags.usmInitialPlacementGpu = 1;
memoryProperties.allocFlags.usmInitialPlacementGpu = 1;
pageFaultManager->insertAllocation(alloc, 10, reinterpret_cast<SVMAllocsManager *>(unifiedMemoryManager), nullptr, memoryProperties);
EXPECT_EQ(pageFaultManager->transferToCpuCalled, 0);
EXPECT_EQ(pageFaultManager->memoryData.size(), 1u);
@@ -277,7 +277,7 @@ TEST_F(PageFaultManagerTest, givenInitialPlacementCpuWhenMovingToGpuDomainThenFi
void *alloc = reinterpret_cast<void *>(0x1);
MemoryProperties memoryProperties{};
memoryProperties.flags.usmInitialPlacementCpu = 1;
memoryProperties.allocFlags.usmInitialPlacementCpu = 1;
pageFaultManager->insertAllocation(alloc, 10, reinterpret_cast<SVMAllocsManager *>(unifiedMemoryManager), cmdQ, memoryProperties);
EXPECT_EQ(pageFaultManager->transferToCpuCalled, 0);
EXPECT_EQ(pageFaultManager->memoryData.size(), 1u);
@@ -301,7 +301,7 @@ TEST_F(PageFaultManagerTest, givenInitialPlacementGpuWhenMovingToGpuDomainThenFi
void *alloc = reinterpret_cast<void *>(0x1);
MemoryProperties memoryProperties{};
memoryProperties.flags.usmInitialPlacementGpu = 1;
memoryProperties.allocFlags.usmInitialPlacementGpu = 1;
pageFaultManager->insertAllocation(alloc, 10, reinterpret_cast<SVMAllocsManager *>(unifiedMemoryManager), cmdQ, memoryProperties);
EXPECT_EQ(pageFaultManager->transferToCpuCalled, 0);
EXPECT_EQ(pageFaultManager->memoryData.size(), 1u);
@@ -324,7 +324,7 @@ TEST_F(PageFaultManagerTest, givenAllocationMovedToGpuDomainWhenVerifyingPagefau
void *alloc = reinterpret_cast<void *>(0x1);
MemoryProperties memoryProperties{};
memoryProperties.flags.usmInitialPlacementGpu = 1;
memoryProperties.allocFlags.usmInitialPlacementGpu = 1;
pageFaultManager->insertAllocation(alloc, 10, reinterpret_cast<SVMAllocsManager *>(unifiedMemoryManager), cmdQ, memoryProperties);
EXPECT_EQ(pageFaultManager->transferToCpuCalled, 0);
EXPECT_EQ(pageFaultManager->memoryData.size(), 1u);