@@ -2794,5 +2794,87 @@ TEST_F(SharedAllocMultiDeviceTests, whenAllocatinSharedMemoryWithNonNullDeviceIn
27942794 EXPECT_EQ (res, ZE_RESULT_SUCCESS);
27952795}
27962796
2797+ struct MemAllocMultiSubDeviceTests : public ::testing::Test {
2798+ void SetUp () override {
2799+ NEO::MockCompilerEnableGuard mock (true );
2800+ DebugManager.flags .CreateMultipleSubDevices .set (numSubDevices);
2801+ auto executionEnvironment = new NEO::ExecutionEnvironment;
2802+ auto devices = NEO::DeviceFactory::createDevices (*executionEnvironment);
2803+ driverHandle = std::make_unique<DriverHandleImp>();
2804+ ze_result_t res = driverHandle->initialize (std::move (devices));
2805+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
2806+ prevSvmAllocsManager = driverHandle->svmAllocsManager ;
2807+ currSvmAllocsManager = new SVMAllocsManagerSharedAllocMultiDeviceMock (driverHandle->memoryManager );
2808+ driverHandle->svmAllocsManager = currSvmAllocsManager;
2809+
2810+ context = std::make_unique<ContextMultiDeviceMock>(driverHandle.get ());
2811+ EXPECT_NE (context, nullptr );
2812+
2813+ for (uint32_t i = 0 ; i < numRootDevices; i++) {
2814+ auto device = driverHandle->devices [i];
2815+ context->getDevices ().insert (std::make_pair (device->toHandle (), device));
2816+ auto neoDevice = device->getNEODevice ();
2817+ context->rootDeviceIndices .insert (neoDevice->getRootDeviceIndex ());
2818+ context->deviceBitfields .insert ({neoDevice->getRootDeviceIndex (), neoDevice->getDeviceBitfield ()});
2819+ }
2820+ }
2821+
2822+ void TearDown () override {
2823+ driverHandle->svmAllocsManager = prevSvmAllocsManager;
2824+ delete currSvmAllocsManager;
2825+ }
2826+
2827+ DebugManagerStateRestore restorer;
2828+ NEO::SVMAllocsManager *prevSvmAllocsManager;
2829+ SVMAllocsManagerSharedAllocMultiDeviceMock *currSvmAllocsManager;
2830+ std::unique_ptr<DriverHandleImp> driverHandle;
2831+ std::unique_ptr<ContextMultiDeviceMock> context;
2832+ const uint32_t numSubDevices = 2u ;
2833+ const uint32_t numRootDevices = 1u ;
2834+ };
2835+
2836+ TEST_F (MemAllocMultiSubDeviceTests, whenAllocatingDeviceMemorySubDeviceMemorySizeUsedWhenImplicitScalingDisabled) {
2837+ ze_device_mem_alloc_desc_t deviceDesc = {};
2838+ void *ptr = nullptr ;
2839+ size_t size = driverHandle->devices [0 ]->getNEODevice ()->getDeviceInfo ().globalMemSize ;
2840+ deviceDesc.stype = ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC;
2841+ ze_relaxed_allocation_limits_exp_desc_t relaxedSizeDesc = {};
2842+ relaxedSizeDesc.stype = ZE_STRUCTURE_TYPE_RELAXED_ALLOCATION_LIMITS_EXP_DESC;
2843+ relaxedSizeDesc.flags = ZE_RELAXED_ALLOCATION_LIMITS_EXP_FLAG_MAX_SIZE;
2844+ deviceDesc.pNext = &relaxedSizeDesc;
2845+
2846+ DebugManager.flags .EnableWalkerPartition .set (0 );
2847+
2848+ ze_result_t res = context->allocDeviceMem (driverHandle->devices [0 ]->toHandle (), &deviceDesc, size, 0u , &ptr);
2849+ EXPECT_EQ (res, ZE_RESULT_ERROR_UNSUPPORTED_SIZE);
2850+
2851+ DebugManager.flags .EnableWalkerPartition .set (1 );
2852+
2853+ res = context->allocDeviceMem (driverHandle->devices [0 ]->toHandle (), &deviceDesc, size, 0u , &ptr);
2854+ EXPECT_EQ (res, ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY);
2855+ }
2856+
2857+ TEST_F (MemAllocMultiSubDeviceTests, whenAllocatingSharedMemorySubDeviceMemorySizeUsedWhenImplicitScalingDisabled) {
2858+ ze_device_mem_alloc_desc_t deviceDesc = {};
2859+ ze_host_mem_alloc_desc_t hostDesc = {};
2860+ void *ptr = nullptr ;
2861+ size_t size = driverHandle->devices [0 ]->getNEODevice ()->getDeviceInfo ().globalMemSize ;
2862+ deviceDesc.stype = ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC;
2863+ ze_relaxed_allocation_limits_exp_desc_t relaxedSizeDesc = {};
2864+ relaxedSizeDesc.stype = ZE_STRUCTURE_TYPE_RELAXED_ALLOCATION_LIMITS_EXP_DESC;
2865+ relaxedSizeDesc.flags = ZE_RELAXED_ALLOCATION_LIMITS_EXP_FLAG_MAX_SIZE;
2866+ deviceDesc.pNext = &relaxedSizeDesc;
2867+
2868+ DebugManager.flags .EnableWalkerPartition .set (0 );
2869+
2870+ ze_result_t res = context->allocSharedMem (driverHandle->devices [0 ]->toHandle (), &deviceDesc, &hostDesc, size, 0u , &ptr);
2871+ EXPECT_EQ (res, ZE_RESULT_ERROR_UNSUPPORTED_SIZE);
2872+
2873+ DebugManager.flags .EnableWalkerPartition .set (1 );
2874+
2875+ res = context->allocSharedMem (driverHandle->devices [0 ]->toHandle (), &deviceDesc, &hostDesc, size, 0u , &ptr);
2876+ EXPECT_EQ (res, ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY);
2877+ }
2878+
27972879} // namespace ult
27982880} // namespace L0
0 commit comments