Refactor getMemoryAccessProperties()
Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
This commit is contained in:
parent
604f2c625e
commit
5038cf6cfc
|
@ -374,12 +374,23 @@ ze_result_t DeviceImp::getMemoryAccessProperties(ze_device_memory_access_propert
|
|||
auto &hwInfoConfig = *NEO::HwInfoConfig::get(hwInfo.platform.eProductFamily);
|
||||
pMemAccessProperties->hostAllocCapabilities =
|
||||
static_cast<ze_memory_access_cap_flags_t>(hwInfoConfig.getHostMemCapabilities(&hwInfo));
|
||||
|
||||
pMemAccessProperties->deviceAllocCapabilities =
|
||||
ZE_MEMORY_ACCESS_CAP_FLAG_RW | ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC;
|
||||
static_cast<ze_memory_access_cap_flags_t>(hwInfoConfig.getDeviceMemCapabilities());
|
||||
|
||||
pMemAccessProperties->sharedSingleDeviceAllocCapabilities =
|
||||
ZE_MEMORY_ACCESS_CAP_FLAG_RW | ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC;
|
||||
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = 0;
|
||||
pMemAccessProperties->sharedSystemAllocCapabilities = 0;
|
||||
static_cast<ze_memory_access_cap_flags_t>(hwInfoConfig.getSingleDeviceSharedMemCapabilities());
|
||||
|
||||
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = {};
|
||||
if (this->getNEODevice()->getHardwareInfo().capabilityTable.p2pAccessSupported) {
|
||||
pMemAccessProperties->sharedCrossDeviceAllocCapabilities |= ZE_MEMORY_ACCESS_CAP_FLAG_RW | 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;
|
||||
}
|
||||
}
|
||||
|
||||
pMemAccessProperties->sharedSystemAllocCapabilities =
|
||||
static_cast<ze_memory_access_cap_flags_t>(hwInfoConfig.getSharedSystemMemCapabilities(&hwInfo));
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -1755,6 +1755,28 @@ TEST_F(MultipleDevicesTest, givenTwoRootDevicesFromSameFamilyThenCanAccessPeerSu
|
|||
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||
}
|
||||
|
||||
using DeviceTests = Test<DeviceFixture>;
|
||||
|
||||
TEST_F(DeviceTests, WhenGettingMemoryAccessPropertiesThenSuccessIsReturned) {
|
||||
ze_device_memory_access_properties_t properties;
|
||||
auto result = device->getMemoryAccessProperties(&properties);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
auto &hwInfo = device->getHwInfo();
|
||||
auto &hwInfoConfig = *NEO::HwInfoConfig::get(hwInfo.platform.eProductFamily);
|
||||
auto expectedHostAllocCapabilities = static_cast<ze_memory_access_cap_flags_t>(hwInfoConfig.getHostMemCapabilities(&hwInfo));
|
||||
EXPECT_EQ(expectedHostAllocCapabilities, properties.hostAllocCapabilities);
|
||||
|
||||
auto expectedDeviceAllocCapabilities = static_cast<ze_memory_access_cap_flags_t>(hwInfoConfig.getDeviceMemCapabilities());
|
||||
EXPECT_EQ(expectedDeviceAllocCapabilities, properties.deviceAllocCapabilities);
|
||||
|
||||
auto expectedSharedSingleDeviceAllocCapabilities = static_cast<ze_memory_access_cap_flags_t>(hwInfoConfig.getSingleDeviceSharedMemCapabilities());
|
||||
EXPECT_EQ(expectedSharedSingleDeviceAllocCapabilities, properties.sharedSingleDeviceAllocCapabilities);
|
||||
|
||||
auto expectedSharedSystemAllocCapabilities = static_cast<ze_memory_access_cap_flags_t>(hwInfoConfig.getSharedSystemMemCapabilities(&hwInfo));
|
||||
EXPECT_EQ(expectedSharedSystemAllocCapabilities, properties.sharedSystemAllocCapabilities);
|
||||
}
|
||||
|
||||
template <bool p2pAccessDevice0, bool p2pAtomicAccessDevice0, bool p2pAccessDevice1, bool p2pAtomicAccessDevice1>
|
||||
struct MultipleDevicesP2PFixture : public ::testing::Test {
|
||||
void SetUp() override {
|
||||
|
@ -1806,6 +1828,42 @@ struct MultipleDevicesP2PFixture : public ::testing::Test {
|
|||
const uint32_t numSubDevices = 2u;
|
||||
};
|
||||
|
||||
using MemoryAccessPropertieP2PAccess0Atomic0 = MultipleDevicesP2PFixture<0, 0, 0, 0>;
|
||||
TEST_F(MemoryAccessPropertieP2PAccess0Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoAccessSupportThenNoSupportIsReturned) {
|
||||
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 = {};
|
||||
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
||||
}
|
||||
|
||||
using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0, 0, 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 | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT;
|
||||
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
||||
}
|
||||
|
||||
using MemoryAccessPropertieP2PAccess1Atomic1 = MultipleDevicesP2PFixture<1, 1, 0, 0>;
|
||||
TEST_F(MemoryAccessPropertieP2PAccess1Atomic1, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndAtomicAccessSupportThenSupportIsReturned) {
|
||||
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_FLAG_CONCURRENT |
|
||||
ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC;
|
||||
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
|
||||
}
|
||||
|
||||
using MultipleDevicesP2PDevice0Access0Atomic0Device1Access0Atomic0Test = MultipleDevicesP2PFixture<0, 0, 0, 0>;
|
||||
TEST_F(MultipleDevicesP2PDevice0Access0Atomic0Device1Access0Atomic0Test, WhenCallingGetP2PPropertiesWithBothDevicesHavingNoAccessSupportThenNoSupportIsReturned) {
|
||||
L0::Device *device0 = driverHandle->devices[0];
|
||||
|
|
Loading…
Reference in New Issue