feature: Add Support for Making Memory Resident on P2P capable devices

Related-To: LOCI-4583

- Provide support for allowing a user to make memory resident on a peer
to peer connected device.

Signed-off-by: Spruit, Neil R <neil.r.spruit@intel.com>
This commit is contained in:
Spruit, Neil R
2023-08-02 01:45:07 +00:00
committed by Compute-Runtime-Automation
parent ffac216ab2
commit 51670abc29
2 changed files with 70 additions and 1 deletions

View File

@@ -195,6 +195,66 @@ TEST_F(MultiDeviceContextTests,
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
}
TEST_F(MultiDeviceContextTests,
GivenDeviceMemoryWhenMakeResidentCalledOnPeerDeviceThenSuccessReturned) {
ze_context_handle_t hContext;
ze_context_desc_t desc = {ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr, 0};
ze_result_t res = driverHandle->createContext(&desc, 0u, nullptr, &hContext);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
driverHandle->devices[0]->getNEODevice()->getExecutionEnvironment()->rootDeviceEnvironments[0]->memoryOperationsInterface =
std::make_unique<NEO::MockMemoryOperations>();
driverHandle->devices[1]->getNEODevice()->getExecutionEnvironment()->rootDeviceEnvironments[1]->memoryOperationsInterface =
std::make_unique<NEO::MockMemoryOperations>();
ContextImp *contextImp = static_cast<ContextImp *>(L0::Context::fromHandle(hContext));
const size_t size = 4096;
void *ptr = nullptr;
ze_device_mem_alloc_desc_t deviceDesc = {};
res = context->allocDeviceMem(driverHandle->devices[0],
&deviceDesc,
size,
0,
&ptr);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
res = contextImp->makeMemoryResident(driverHandle->devices[1], ptr, size);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
res = contextImp->freeMem(ptr);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
res = contextImp->destroy();
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
}
TEST_F(MultiDeviceContextTests,
GivenInvalidDeviceMemoryWhenMakeResidentCalledOnPeerDeviceThenSuccessReturned) {
ze_context_handle_t hContext;
ze_context_desc_t desc = {ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr, 0};
ze_result_t res = driverHandle->createContext(&desc, 0u, nullptr, &hContext);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
driverHandle->devices[0]->getNEODevice()->getExecutionEnvironment()->rootDeviceEnvironments[0]->memoryOperationsInterface =
std::make_unique<NEO::MockMemoryOperations>();
driverHandle->devices[1]->getNEODevice()->getExecutionEnvironment()->rootDeviceEnvironments[1]->memoryOperationsInterface =
std::make_unique<NEO::MockMemoryOperations>();
ContextImp *contextImp = static_cast<ContextImp *>(L0::Context::fromHandle(hContext));
const size_t size = 4096;
void *ptr = reinterpret_cast<void *>(0x1234);
res = contextImp->makeMemoryResident(driverHandle->devices[1], ptr, size);
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, res);
res = contextImp->destroy();
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
}
TEST_F(MultiDeviceContextTests,
whenMappingReservedMemoryOnPhysicalMemoryOnMultiDeviceThenSuccessReturned) {
ze_context_handle_t hContext;