Skip to content

Commit e7a6a35

Browse files
feature: get kernel max group size
Implementing support for ze_kernel_max_group_size_ext_properties_t Resolves: NEO-9617 Signed-off-by: John Falkowski <[email protected]> Source: cebedb5
1 parent 8a6ae05 commit e7a6a35

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

level_zero/core/source/kernel/kernel_imp.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,9 @@ ze_result_t KernelImp::getProperties(ze_kernel_properties_t *pKernelProperties)
916916
if (gfxCoreHelper.isFusedEuDispatchEnabled(this->module->getDevice()->getHwInfo(), kernelDescriptor.kernelAttributes.flags.requiresDisabledEUFusion)) {
917917
preferredGroupSizeProperties->preferredMultiple *= 2;
918918
}
919+
} else if (extendedProperties->stype == ZE_STRUCTURE_TYPE_KERNEL_MAX_GROUP_SIZE_EXT_PROPERTIES) {
920+
ze_kernel_max_group_size_properties_ext_t *properties = reinterpret_cast<ze_kernel_max_group_size_properties_ext_t *>(extendedProperties);
921+
properties->maxGroupSize = maxKernelWorkGroupSize;
919922
} else if (extendedProperties->stype == ZEX_STRUCTURE_KERNEL_REGISTER_FILE_SIZE_EXP) {
920923
zex_kernel_register_file_size_exp_t *properties = reinterpret_cast<zex_kernel_register_file_size_exp_t *>(extendedProperties);
921924
properties->registerFileSize = kernelDescriptor.kernelAttributes.numGrfRequired;

level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,6 +1651,53 @@ HWTEST2_F(KernelMaxNumSubgroupsTests, givenLargeGrfAndSimdSmallerThan32WhenCalcu
16511651
EXPECT_EQ(static_cast<uint32_t>(this->module->getDevice()->getNEODevice()->getDeviceInfo().maxWorkGroupSize) / maxSubgroupSize, maxNumSubgroups * 2);
16521652
}
16531653

1654+
HWTEST2_F(KernelMaxNumSubgroupsTests, givenLargeGrfAndSimdSmallerThan32WhenPassingKernelMaxGroupSizePropertiesStructToGetPropertiesThenHalfDeviceMaxGroupSizeIsReturned, IsWithinXeGfxFamily) {
1655+
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u);
1656+
1657+
auto kernelDescriptor = mockKernelImmData->kernelDescriptor;
1658+
kernelDescriptor->kernelAttributes.simdSize = 16;
1659+
kernelDescriptor->kernelAttributes.numGrfRequired = GrfConfig::largeGrfNumber;
1660+
1661+
createModuleFromMockBinary(0u, false, mockKernelImmData.get());
1662+
1663+
auto mockKernel = std::make_unique<MockKernel>(this->module.get());
1664+
1665+
ze_kernel_desc_t kernelDesc{ZE_STRUCTURE_TYPE_KERNEL_DESC};
1666+
mockKernel->initialize(&kernelDesc);
1667+
1668+
ze_kernel_properties_t kernelProperties = {};
1669+
kernelProperties.stype = ZE_STRUCTURE_TYPE_KERNEL_PROPERTIES;
1670+
ze_kernel_max_group_size_properties_ext_t maxGroupSizeProperties = {};
1671+
maxGroupSizeProperties.stype = ZE_STRUCTURE_TYPE_KERNEL_MAX_GROUP_SIZE_EXT_PROPERTIES;
1672+
1673+
kernelProperties.pNext = &maxGroupSizeProperties;
1674+
1675+
ze_result_t res = mockKernel->getProperties(&kernelProperties);
1676+
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
1677+
EXPECT_EQ(static_cast<uint32_t>(this->module->getDevice()->getNEODevice()->getDeviceInfo().maxWorkGroupSize), maxGroupSizeProperties.maxGroupSize * 2);
1678+
}
1679+
1680+
TEST_F(KernelPropertiesTests, whenPassingKernelMaxGroupSizePropertiesStructToGetPropertiesThenMaxGroupSizeIsReturned) {
1681+
auto &kernelDescriptor = const_cast<KernelDescriptor &>(kernel->getKernelDescriptor());
1682+
kernelDescriptor.kernelAttributes.numGrfRequired = GrfConfig::defaultGrfNumber;
1683+
kernelDescriptor.kernelAttributes.simdSize = 16;
1684+
1685+
ze_kernel_properties_t kernelProperties = {};
1686+
kernelProperties.stype = ZE_STRUCTURE_TYPE_KERNEL_PROPERTIES;
1687+
1688+
ze_kernel_max_group_size_properties_ext_t maxGroupSizeProperties = {};
1689+
maxGroupSizeProperties.stype = ZE_STRUCTURE_TYPE_KERNEL_MAX_GROUP_SIZE_EXT_PROPERTIES;
1690+
1691+
kernelProperties.pNext = &maxGroupSizeProperties;
1692+
1693+
ze_result_t res = kernel->getProperties(&kernelProperties);
1694+
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
1695+
1696+
auto &gfxCoreHelper = module->getDevice()->getGfxCoreHelper();
1697+
uint32_t maxKernelWorkGroupSize = gfxCoreHelper.adjustMaxWorkGroupSize(kernelDescriptor.kernelAttributes.numGrfRequired, kernelDescriptor.kernelAttributes.simdSize, false, static_cast<uint32_t>(this->module->getMaxGroupSize(kernelDescriptor)));
1698+
EXPECT_EQ(maxKernelWorkGroupSize, maxGroupSizeProperties.maxGroupSize);
1699+
}
1700+
16541701
TEST_F(KernelPropertiesTests, whenPassingPreferredGroupSizeStructToGetPropertiesThenPreferredMultipleIsReturned) {
16551702
ze_kernel_properties_t kernelProperties = {};
16561703
kernelProperties.stype = ZE_STRUCTURE_TYPE_KERNEL_PROPERTIES;

0 commit comments

Comments
 (0)