Abort if SLM size larger than local mem size

Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
This commit is contained in:
Jaime Arteaga
2021-07-30 02:42:08 +00:00
committed by Compute-Runtime-Automation
parent 6f75d67406
commit 4192fc7d86
2 changed files with 26 additions and 2 deletions

View File

@ -163,6 +163,7 @@ void WorkSizeInfo::setMinWorkGroupSize(const HardwareInfo *hwInfo) {
minWorkGroupSize = numThreadsPerSubSlice * simdSize / maxBarriersPerHSlice;
}
if (slmTotalSize > 0) {
UNRECOVERABLE_IF(localMemSize < slmTotalSize);
minWorkGroupSize = std::max(maxWorkGroupSize / ((localMemSize / slmTotalSize)), minWorkGroupSize);
}

View File

@ -16,8 +16,17 @@
using namespace NEO;
TEST(localWorkSizeTest, given3DimWorkGroupAndSimdEqual8AndBarriersWhenComputeCalledThenLocalGroupComputedCorrectly) {
//wsInfo maxWorkGroupSize, hasBariers, simdSize, slmTotalSize, hardwareInfo, numThreadsPerSubSlice, localMemorySize, imgUsed, yTiledSurface
WorkSizeInfo wsInfo(256, 1u, 8, 0u, defaultHwInfo.get(), 32u, 0u, false, false);
WorkSizeInfo wsInfo(256, // maxWorkGroupSize
1u, // hasBariers
8, // simdSize
0u, // slmTotalSize
defaultHwInfo.get(), // hardwareInfo
32u, // numThreadsPerSubSlice
0u, // localMemorySize
false, // imgUsed
false // yTiledSurface
);
uint32_t workDim = 3;
size_t workGroup[3] = {10000, 10000, 10000};
size_t workGroupSize[3];
@ -36,6 +45,20 @@ TEST(localWorkSizeTest, given3DimWorkGroupAndSimdEqual8AndBarriersWhenComputeCal
EXPECT_EQ(workGroupSize[2], 1u);
}
TEST(localWorkSizeTest, givenSmallerLocalMemSizeThanSlmTotalSizeThenExceptionIsThrown) {
EXPECT_THROW(WorkSizeInfo wsInfo(256, // maxWorkGroupSize
1u, // hasBariers
8, // simdSize
128u, // slmTotalSize
defaultHwInfo.get(), // hardwareInfo
32u, // numThreadsPerSubSlice
64u, // localMemorySize
false, // imgUsed
false // yTiledSurface
),
std::exception);
}
TEST(localWorkSizeTest, given2DimWorkGroupAndSimdEqual8AndNoBarriersWhenComputeCalledThenLocalGroupComputedCorrectly) {
DebugManagerStateRestore dbgRestore;
DebugManager.flags.EnableComputeWorkSizeSquared.set(true);