mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-08 05:56:36 +08:00
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:
committed by
Compute-Runtime-Automation
parent
58481f8397
commit
be924edf3d
@@ -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));
|
static_cast<ze_memory_access_cap_flags_t>(productHelper.getSingleDeviceSharedMemCapabilities(isKmdMigrationAvailable));
|
||||||
|
|
||||||
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = {};
|
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = {};
|
||||||
if (this->getNEODevice()->getHardwareInfo().capabilityTable.p2pAccessSupported) {
|
if (isKmdMigrationAvailable &&
|
||||||
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = ZE_MEMORY_ACCESS_CAP_FLAG_RW;
|
memoryManager->hasPageFaultsEnabled(*this->getNEODevice()) &&
|
||||||
|
NEO::debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.get() == 1) {
|
||||||
if (isKmdMigrationAvailable &&
|
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = ZE_MEMORY_ACCESS_CAP_FLAG_RW |
|
||||||
memoryManager->hasPageFaultsEnabled(*this->getNEODevice()) &&
|
ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT |
|
||||||
NEO::debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.get() == 1) {
|
ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC |
|
||||||
pMemAccessProperties->sharedCrossDeviceAllocCapabilities |= ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT;
|
ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC;
|
||||||
if (this->getNEODevice()->getHardwareInfo().capabilityTable.p2pAtomicAccessSupported) {
|
|
||||||
pMemAccessProperties->sharedCrossDeviceAllocCapabilities |= ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pMemAccessProperties->sharedSystemAllocCapabilities =
|
pMemAccessProperties->sharedSystemAllocCapabilities =
|
||||||
|
|||||||
@@ -2914,8 +2914,12 @@ struct MultipleDevicesP2PFixture : public ::testing::Test {
|
|||||||
const uint32_t numSubDevices = 2u;
|
const uint32_t numSubDevices = 2u;
|
||||||
};
|
};
|
||||||
|
|
||||||
using MemoryAccessPropertieP2PAccess0Atomic0 = MultipleDevicesP2PFixture<0, 0>;
|
using MemoryAccessPropertiesSharedCrossDeviceCapsTest = Test<DeviceFixture>;
|
||||||
TEST_F(MemoryAccessPropertieP2PAccess0Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoAccessSupportThenNoSupportIsReturned) {
|
TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest,
|
||||||
|
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingKmdMigrationsSupportAndCrossP2PSharedAccessKeyNotSetThenNoSupportIsReturned) {
|
||||||
|
DebugManagerStateRestore restorer;
|
||||||
|
debugManager.flags.EnableRecoverablePageFaults.set(1);
|
||||||
|
debugManager.flags.UseKmdMigration.set(1);
|
||||||
L0::Device *device = driverHandle->devices[0];
|
L0::Device *device = driverHandle->devices[0];
|
||||||
ze_device_memory_access_properties_t properties;
|
ze_device_memory_access_properties_t properties;
|
||||||
auto result = device->getMemoryAccessProperties(&properties);
|
auto result = device->getMemoryAccessProperties(&properties);
|
||||||
@@ -2925,72 +2929,25 @@ TEST_F(MemoryAccessPropertieP2PAccess0Atomic0, WhenCallingGetMemoryAccessPropert
|
|||||||
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>;
|
TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest,
|
||||||
TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAccessSupportThenSupportIsReturned) {
|
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoKmdMigrationsSupportAndEnableCrossP2PSharedAccessKeyThenNoSupportIsReturned) {
|
||||||
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) {
|
|
||||||
DebugManagerStateRestore restorer;
|
DebugManagerStateRestore restorer;
|
||||||
debugManager.flags.EnableRecoverablePageFaults.set(1);
|
debugManager.flags.EnableRecoverablePageFaults.set(1);
|
||||||
debugManager.flags.UseKmdMigration.set(0);
|
debugManager.flags.UseKmdMigration.set(0);
|
||||||
|
debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.set(1);
|
||||||
|
|
||||||
L0::Device *device = driverHandle->devices[0];
|
L0::Device *device = driverHandle->devices[0];
|
||||||
ze_device_memory_access_properties_t properties;
|
ze_device_memory_access_properties_t properties;
|
||||||
auto result = device->getMemoryAccessProperties(&properties);
|
auto result = device->getMemoryAccessProperties(&properties);
|
||||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
|
||||||
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities =
|
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = {};
|
||||||
ZE_MEMORY_ACCESS_CAP_FLAG_RW;
|
|
||||||
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
||||||
}
|
}
|
||||||
|
TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest,
|
||||||
using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>;
|
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoRecoverablePageFaultSupportAndEnableCrossP2PSharedAccessKeyThenNoSupportIsReturned) {
|
||||||
TEST_F(MemoryAccessPropertieP2PAccess1Atomic0,
|
|
||||||
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndConcurrentAccessSupportThenBasicSupportIsReturned) {
|
|
||||||
DebugManagerStateRestore restorer;
|
DebugManagerStateRestore restorer;
|
||||||
debugManager.flags.EnableRecoverablePageFaults.set(1);
|
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,
|
|
||||||
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndConcurrentAccessSupportAndEnableCrossP2PSharedAccessKeyThenSupportIsReturned) {
|
|
||||||
DebugManagerStateRestore restorer;
|
|
||||||
debugManager.flags.EnableRecoverablePageFaults.set(1);
|
|
||||||
debugManager.flags.UseKmdMigration.set(1);
|
debugManager.flags.UseKmdMigration.set(1);
|
||||||
debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.set(1);
|
debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.set(1);
|
||||||
|
|
||||||
@@ -2999,29 +2956,12 @@ TEST_F(MemoryAccessPropertieP2PAccess1Atomic0,
|
|||||||
auto result = device->getMemoryAccessProperties(&properties);
|
auto result = device->getMemoryAccessProperties(&properties);
|
||||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
|
||||||
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities =
|
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = {};
|
||||||
ZE_MEMORY_ACCESS_CAP_FLAG_RW | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT;
|
|
||||||
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
using MemoryAccessPropertieP2PAccess1Atomic1 = MultipleDevicesP2PFixture<1, 1>;
|
TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest,
|
||||||
TEST_F(MemoryAccessPropertieP2PAccess1Atomic1,
|
WhenCallingGetMemoryAccessPropertiesWithDevicesHavingKmdMigrationsAndRecoverablePageFaultSupportAndEnableCrossP2PSharedAccessKeyThenSupportIsReturned) {
|
||||||
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) {
|
|
||||||
DebugManagerStateRestore restorer;
|
DebugManagerStateRestore restorer;
|
||||||
debugManager.flags.EnableRecoverablePageFaults.set(1);
|
debugManager.flags.EnableRecoverablePageFaults.set(1);
|
||||||
debugManager.flags.UseKmdMigration.set(1);
|
debugManager.flags.UseKmdMigration.set(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user