Skip to content

Commit 56b167f

Browse files
fix: setGroupSize caching to not hide error
When setting kernel group size with incorrect values, error would not be returned if method called with same arguments a second time. Signed-off-by: Dominik Dabek <[email protected]>
1 parent 8ada5db commit 56b167f

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

level_zero/core/source/kernel/kernel_imp.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,15 +301,12 @@ ze_result_t KernelImp::setGroupSize(uint32_t groupSizeX, uint32_t groupSizeY,
301301
return ZE_RESULT_ERROR_INVALID_GROUP_SIZE_DIMENSION;
302302
}
303303

304-
this->groupSize[0] = groupSizeX;
305-
this->groupSize[1] = groupSizeY;
306-
this->groupSize[2] = groupSizeZ;
307304
for (uint32_t i = 0u; i < 3u; i++) {
308305
if (kernelDescriptor.kernelAttributes.requiredWorkgroupSize[i] != 0 &&
309-
kernelDescriptor.kernelAttributes.requiredWorkgroupSize[i] != this->groupSize[i]) {
306+
kernelDescriptor.kernelAttributes.requiredWorkgroupSize[i] != groupSize[i]) {
310307
NEO::printDebugString(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr,
311308
"Invalid group size {%d, %d, %d} specified, requiredWorkGroupSize = {%d, %d, %d}\n",
312-
this->groupSize[0], this->groupSize[1], this->groupSize[2],
309+
groupSize[0], groupSize[1], groupSize[2],
313310
kernelDescriptor.kernelAttributes.requiredWorkgroupSize[0],
314311
kernelDescriptor.kernelAttributes.requiredWorkgroupSize[1],
315312
kernelDescriptor.kernelAttributes.requiredWorkgroupSize[2]);
@@ -355,6 +352,9 @@ ze_result_t KernelImp::setGroupSize(uint32_t groupSizeX, uint32_t groupSizeY,
355352

356353
this->perThreadDataSize = perThreadDataSizeForWholeThreadGroup / numThreadsPerThreadGroup;
357354
}
355+
this->groupSize[0] = groupSizeX;
356+
this->groupSize[1] = groupSizeY;
357+
this->groupSize[2] = groupSizeZ;
358358
return ZE_RESULT_SUCCESS;
359359
}
360360

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

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,18 @@ TEST_F(KernelImpSetGroupSizeTest, givenIncorrectGroupSizeDimensionWhenSettingGro
341341
}
342342
mockKernel.module = &mockModule;
343343

344-
uint32_t groupSize[3] = {1, 1, 1};
344+
uint32_t groupSize[3] = {2, 2, 2};
345345
auto ret = mockKernel.setGroupSize(groupSize[0], groupSize[1], groupSize[2]);
346+
EXPECT_EQ(ZE_RESULT_SUCCESS, ret);
347+
348+
groupSize[0] = 1;
349+
groupSize[1] = 1;
350+
groupSize[2] = 1;
351+
ret = mockKernel.setGroupSize(groupSize[0], groupSize[1], groupSize[2]);
352+
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_GROUP_SIZE_DIMENSION, ret);
353+
354+
// check that caching does not hide error
355+
ret = mockKernel.setGroupSize(groupSize[0], groupSize[1], groupSize[2]);
346356
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_GROUP_SIZE_DIMENSION, ret);
347357
}
348358

@@ -647,6 +657,28 @@ TEST_F(KernelImmutableDataTests, givenKernelInitializedWithNoPrivateMemoryThenPr
647657
EXPECT_EQ(nullptr, kernel->privateMemoryGraphicsAllocation);
648658
}
649659

660+
TEST_F(KernelImmutableDataTests, givenKernelInitializedWithRequiredGroupSizeThenGroupSizeIsSetByDefault) {
661+
uint32_t perHwThreadPrivateMemorySizeRequested = 0u;
662+
bool isInternal = false;
663+
664+
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(perHwThreadPrivateMemorySizeRequested);
665+
mockKernelImmData->mockKernelDescriptor->kernelAttributes.requiredWorkgroupSize[0] = 2u;
666+
mockKernelImmData->mockKernelDescriptor->kernelAttributes.requiredWorkgroupSize[1] = 3u;
667+
mockKernelImmData->mockKernelDescriptor->kernelAttributes.requiredWorkgroupSize[2] = 4u;
668+
669+
createModuleFromMockBinary(perHwThreadPrivateMemorySizeRequested, isInternal, mockKernelImmData.get());
670+
671+
std::unique_ptr<ModuleImmutableDataFixture::MockKernel> kernel;
672+
kernel = std::make_unique<ModuleImmutableDataFixture::MockKernel>(module.get());
673+
674+
createKernel(kernel.get());
675+
676+
auto groupSize = kernel->getGroupSize();
677+
EXPECT_EQ(groupSize[0], 2u);
678+
EXPECT_EQ(groupSize[1], 3u);
679+
EXPECT_EQ(groupSize[2], 4u);
680+
}
681+
650682
TEST_F(KernelImmutableDataTests, givenKernelInitializedWithPrivateMemoryThenPrivateMemoryIsCreated) {
651683
uint32_t perHwThreadPrivateMemorySizeRequested = 32u;
652684
bool isInternal = false;

0 commit comments

Comments
 (0)