fix: correct exposing shared cross device alloc capabilities

support depends on kmd capabilities and debug key

Related-To: NEO-14938
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2025-06-16 13:33:38 +00:00
committed by Compute-Runtime-Automation
parent 58481f8397
commit be924edf3d
2 changed files with 23 additions and 87 deletions

View File

@@ -837,17 +837,13 @@ ze_result_t DeviceImp::getMemoryAccessProperties(ze_device_memory_access_propert
static_cast<ze_memory_access_cap_flags_t>(productHelper.getSingleDeviceSharedMemCapabilities(isKmdMigrationAvailable));
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = {};
if (this->getNEODevice()->getHardwareInfo().capabilityTable.p2pAccessSupported) {
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = ZE_MEMORY_ACCESS_CAP_FLAG_RW;
if (isKmdMigrationAvailable &&
memoryManager->hasPageFaultsEnabled(*this->getNEODevice()) &&
NEO::debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.get() == 1) {
pMemAccessProperties->sharedCrossDeviceAllocCapabilities |= ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT;
if (this->getNEODevice()->getHardwareInfo().capabilityTable.p2pAtomicAccessSupported) {
pMemAccessProperties->sharedCrossDeviceAllocCapabilities |= ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC;
}
}
if (isKmdMigrationAvailable &&
memoryManager->hasPageFaultsEnabled(*this->getNEODevice()) &&
NEO::debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.get() == 1) {
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = ZE_MEMORY_ACCESS_CAP_FLAG_RW |
ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT |
ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC |
ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC;
}
pMemAccessProperties->sharedSystemAllocCapabilities =

View File

@@ -2914,8 +2914,12 @@ struct MultipleDevicesP2PFixture : public ::testing::Test {
const uint32_t numSubDevices = 2u;
};
using MemoryAccessPropertieP2PAccess0Atomic0 = MultipleDevicesP2PFixture<0, 0>;
TEST_F(MemoryAccessPropertieP2PAccess0Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoAccessSupportThenNoSupportIsReturned) {
using MemoryAccessPropertiesSharedCrossDeviceCapsTest = Test<DeviceFixture>;
TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest,
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingKmdMigrationsSupportAndCrossP2PSharedAccessKeyNotSetThenNoSupportIsReturned) {
DebugManagerStateRestore restorer;
debugManager.flags.EnableRecoverablePageFaults.set(1);
debugManager.flags.UseKmdMigration.set(1);
L0::Device *device = driverHandle->devices[0];
ze_device_memory_access_properties_t properties;
auto result = device->getMemoryAccessProperties(&properties);
@@ -2925,72 +2929,25 @@ TEST_F(MemoryAccessPropertieP2PAccess0Atomic0, WhenCallingGetMemoryAccessPropert
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
}
using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>;
TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAccessSupportThenSupportIsReturned) {
L0::Device *device = driverHandle->devices[0];
ze_device_memory_access_properties_t properties;
auto result = device->getMemoryAccessProperties(&properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities =
ZE_MEMORY_ACCESS_CAP_FLAG_RW;
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
}
using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>;
TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PWithoutRecoverablePageFaultsThenSupportIsReturned) {
DebugManagerStateRestore restorer;
debugManager.flags.EnableRecoverablePageFaults.set(0);
debugManager.flags.UseKmdMigration.set(1);
L0::Device *device = driverHandle->devices[0];
ze_device_memory_access_properties_t properties;
auto result = device->getMemoryAccessProperties(&properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities =
ZE_MEMORY_ACCESS_CAP_FLAG_RW;
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
}
using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>;
TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PWithoutKmdMigrationThenSupportIsReturned) {
TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest,
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoKmdMigrationsSupportAndEnableCrossP2PSharedAccessKeyThenNoSupportIsReturned) {
DebugManagerStateRestore restorer;
debugManager.flags.EnableRecoverablePageFaults.set(1);
debugManager.flags.UseKmdMigration.set(0);
debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.set(1);
L0::Device *device = driverHandle->devices[0];
ze_device_memory_access_properties_t properties;
auto result = device->getMemoryAccessProperties(&properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities =
ZE_MEMORY_ACCESS_CAP_FLAG_RW;
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = {};
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
}
using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>;
TEST_F(MemoryAccessPropertieP2PAccess1Atomic0,
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndConcurrentAccessSupportThenBasicSupportIsReturned) {
TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest,
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoRecoverablePageFaultSupportAndEnableCrossP2PSharedAccessKeyThenNoSupportIsReturned) {
DebugManagerStateRestore restorer;
debugManager.flags.EnableRecoverablePageFaults.set(1);
debugManager.flags.UseKmdMigration.set(1);
L0::Device *device = driverHandle->devices[0];
ze_device_memory_access_properties_t properties;
auto result = device->getMemoryAccessProperties(&properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities =
ZE_MEMORY_ACCESS_CAP_FLAG_RW;
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
}
using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>;
TEST_F(MemoryAccessPropertieP2PAccess1Atomic0,
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndConcurrentAccessSupportAndEnableCrossP2PSharedAccessKeyThenSupportIsReturned) {
DebugManagerStateRestore restorer;
debugManager.flags.EnableRecoverablePageFaults.set(1);
debugManager.flags.EnableRecoverablePageFaults.set(0);
debugManager.flags.UseKmdMigration.set(1);
debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.set(1);
@@ -2999,29 +2956,12 @@ TEST_F(MemoryAccessPropertieP2PAccess1Atomic0,
auto result = device->getMemoryAccessProperties(&properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities =
ZE_MEMORY_ACCESS_CAP_FLAG_RW | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT;
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = {};
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
}
using MemoryAccessPropertieP2PAccess1Atomic1 = MultipleDevicesP2PFixture<1, 1>;
TEST_F(MemoryAccessPropertieP2PAccess1Atomic1,
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndAtomicAccessSupportThenBasicSupportIsReturned) {
DebugManagerStateRestore restorer;
debugManager.flags.EnableRecoverablePageFaults.set(1);
debugManager.flags.UseKmdMigration.set(1);
L0::Device *device = driverHandle->devices[0];
ze_device_memory_access_properties_t properties;
auto result = device->getMemoryAccessProperties(&properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = ZE_MEMORY_ACCESS_CAP_FLAG_RW;
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
}
TEST_F(MemoryAccessPropertieP2PAccess1Atomic1,
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndAtomicAccessSupportAndEnableCrossP2PSharedAccessKeyThenSupportIsReturned) {
TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest,
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingKmdMigrationsAndRecoverablePageFaultSupportAndEnableCrossP2PSharedAccessKeyThenSupportIsReturned) {
DebugManagerStateRestore restorer;
debugManager.flags.EnableRecoverablePageFaults.set(1);
debugManager.flags.UseKmdMigration.set(1);