Add support for ze_kernel_preferred_group_size_properties_t

Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
This commit is contained in:
Jaime Arteaga
2021-06-25 08:39:56 +00:00
committed by Compute-Runtime-Automation
parent 2b0f8cbdce
commit ef07bbd041
2 changed files with 55 additions and 0 deletions

View File

@@ -682,6 +682,23 @@ ze_result_t KernelImp::getProperties(ze_kernel_properties_t *pKernelProperties)
uint32_t maxKernelWorkGroupSize = static_cast<uint32_t>(this->module->getDevice()->getNEODevice()->getDeviceInfo().maxWorkGroupSize);
pKernelProperties->maxNumSubgroups = maxKernelWorkGroupSize / kernelDescriptor.kernelAttributes.simdSize;
void *pNext = pKernelProperties->pNext;
while (pNext) {
ze_base_desc_t *extendedProperties = reinterpret_cast<ze_base_desc_t *>(pKernelProperties->pNext);
if (extendedProperties->stype == ZE_STRUCTURE_TYPE_KERNEL_PREFERRED_GROUP_SIZE_PROPERTIES) {
ze_kernel_preferred_group_size_properties_t *preferredGroupSizeProperties =
reinterpret_cast<ze_kernel_preferred_group_size_properties_t *>(extendedProperties);
preferredGroupSizeProperties->preferredMultiple = this->kernelImmData->getKernelInfo()->getMaxSimdSize();
auto &hwHelper = NEO::HwHelper::get(this->module->getDevice()->getHwInfo().platform.eRenderCoreFamily);
if (hwHelper.isFusedEuDispatchEnabled(this->module->getDevice()->getHwInfo())) {
preferredGroupSizeProperties->preferredMultiple *= 2;
}
}
pNext = const_cast<void *>(extendedProperties->pNext);
}
return ZE_RESULT_SUCCESS;
}

View File

@@ -757,6 +757,44 @@ HWTEST_F(KernelPropertiesTests, givenValidKernelThenPropertiesAreRetrieved) {
sizeof(kernelProperties.uuid.mid)));
}
HWTEST_F(KernelPropertiesTests, whenPassingPreferredGroupSizeStructToGetPropertiesThenPreferredMultipleIsReturned) {
ze_kernel_properties_t kernelProperties = {};
kernelProperties.stype = ZE_STRUCTURE_TYPE_KERNEL_PROPERTIES;
ze_kernel_preferred_group_size_properties_t preferredGroupProperties = {};
preferredGroupProperties.stype = ZE_STRUCTURE_TYPE_KERNEL_PREFERRED_GROUP_SIZE_PROPERTIES;
kernelProperties.pNext = &preferredGroupProperties;
ze_result_t res = kernel->getProperties(&kernelProperties);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
auto &hwHelper = NEO::HwHelper::get(module->getDevice()->getHwInfo().platform.eRenderCoreFamily);
if (hwHelper.isFusedEuDispatchEnabled(module->getDevice()->getHwInfo())) {
EXPECT_EQ(preferredGroupProperties.preferredMultiple, static_cast<uint32_t>(kernel->getImmutableData()->getKernelInfo()->getMaxSimdSize()) * 2);
} else {
EXPECT_EQ(preferredGroupProperties.preferredMultiple, static_cast<uint32_t>(kernel->getImmutableData()->getKernelInfo()->getMaxSimdSize()));
}
}
HWTEST_F(KernelPropertiesTests, whenPassingPreferredGroupSizeStructWithWrongStypeSuccessIsReturnedAndNoFieldsInPreferredGroupSizeStructAreSet) {
ze_kernel_properties_t kernelProperties = {};
kernelProperties.stype = ZE_STRUCTURE_TYPE_KERNEL_PROPERTIES;
ze_kernel_preferred_group_size_properties_t preferredGroupProperties = {};
preferredGroupProperties.stype = ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMPORT_WIN32;
kernelProperties.pNext = &preferredGroupProperties;
uint32_t dummyPreferredMultiple = 101;
preferredGroupProperties.preferredMultiple = dummyPreferredMultiple;
ze_result_t res = kernel->getProperties(&kernelProperties);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
EXPECT_EQ(preferredGroupProperties.preferredMultiple, dummyPreferredMultiple);
}
HWTEST_F(KernelPropertiesTests, givenValidKernelThenProfilePropertiesAreRetrieved) {
zet_profile_properties_t kernelProfileProperties = {};