Skip to content

Commit 10319e9

Browse files
fftzengsys_zuul
authored andcommitted
All CS retry with simd mode forced by driver
Change-Id: I4757c74973ee1a99ce4c9232de9f24d516105a1d
1 parent f1f6a1e commit 10319e9

File tree

5 files changed

+41
-28
lines changed

5 files changed

+41
-28
lines changed

IGC/Compiler/CISACodeGen/ComputeShaderCodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ namespace IGC
220220
ComputeShaderContext* pctx =
221221
static_cast<ComputeShaderContext*>(GetContext());
222222
RetryManager& retryMgr = GetContext()->m_retryManager;
223-
bool isLastTry = retryMgr.IsLastTry(pctx);
223+
bool isLastTry = retryMgr.IsLastTry();
224224

225225
float spillThreshold = pctx->GetSpillThreshold();
226226

IGC/Compiler/CISACodeGen/OpenCLKernelCodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1906,7 +1906,7 @@ namespace IGC
19061906

19071907
if (pOutput->m_scratchSpaceUsedBySpills == 0 ||
19081908
noRetry ||
1909-
ctx->m_retryManager.IsLastTry(ctx) ||
1909+
ctx->m_retryManager.IsLastTry() ||
19101910
fullDebugInfo)
19111911
{
19121912
// Save the shader program to the state processor to be handled later

IGC/Compiler/CISACodeGen/ShaderCodeGen.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -795,11 +795,11 @@ namespace IGC
795795
if (IsStage1BestPerf(ctx->m_CgFlag, ctx->m_StagingCtx))
796796
{
797797
// don't retry SIMD16 for ForcePSBestSIMD
798-
if( SimdEarlyCheck( ctx ) && ( !ctx->m_retryManager.IsLastTry( ctx ) ) )
798+
if( SimdEarlyCheck( ctx ) && ( !ctx->m_retryManager.IsLastTry() ) )
799799
{
800800
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD16, true, ShaderDispatchMode::NOT_APPLICABLE, pSignature);
801801
}
802-
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD8, !ctx->m_retryManager.IsLastTry(ctx), ShaderDispatchMode::NOT_APPLICABLE, pSignature);
802+
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD8, !ctx->m_retryManager.IsLastTry(), ShaderDispatchMode::NOT_APPLICABLE, pSignature);
803803
useRegKeySimd = true;
804804
}
805805
else if (IsStage1FastCompile(ctx->m_CgFlag, ctx->m_StagingCtx))
@@ -849,7 +849,7 @@ namespace IGC
849849

850850
// for versioned loop, in general SIMD16 with spill has better perf
851851
bool earlyExit16 = psInfo.hasVersionedLoop ? false : earlyExit;
852-
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD8, !ctx->m_retryManager.IsLastTry(ctx), ShaderDispatchMode::NOT_APPLICABLE, pSignature);
852+
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD8, !ctx->m_retryManager.IsLastTry(), ShaderDispatchMode::NOT_APPLICABLE, pSignature);
853853

854854
if (enableSimd32 || IGC_GET_FLAG_VALUE(SkipTREarlyExitCheck))
855855
{
@@ -947,7 +947,7 @@ namespace IGC
947947
if (ctx->m_enableSubroutine || !cgSimd16)
948948
{
949949
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD8,
950-
!ctx->m_retryManager.IsLastTry(ctx));
950+
!ctx->m_retryManager.IsLastTry());
951951
setEarlyExit16Stat = true;
952952
}
953953
else
@@ -962,15 +962,15 @@ namespace IGC
962962
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD32, true);
963963

964964
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD8,
965-
!ctx->m_retryManager.IsLastTry(ctx));
965+
!ctx->m_retryManager.IsLastTry());
966966
}
967967
break;
968968
}
969969

970970
case SIMDMode::SIMD16:
971971
{
972972
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD16,
973-
!ctx->m_retryManager.IsLastTry(ctx));
973+
!ctx->m_retryManager.IsLastTry());
974974
if (!ctx->m_enableSubroutine && maxSimdMode == SIMDMode::SIMD32)
975975
{
976976
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD32, true);
@@ -981,7 +981,7 @@ namespace IGC
981981
case SIMDMode::SIMD32:
982982
{
983983
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD32,
984-
!ctx->m_retryManager.IsLastTry(ctx));
984+
!ctx->m_retryManager.IsLastTry());
985985
break;
986986
}
987987

IGC/Compiler/CodeGenContext.cpp

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,10 @@ namespace IGC
9393
bool RetryManager::IsFirstTry() {
9494
return (stateId == firstStateId);
9595
}
96-
bool RetryManager::IsLastTry(CodeGenContext* cgCtx) {
96+
bool RetryManager::IsLastTry() {
9797
return (!enabled ||
9898
IGC_IS_FLAG_ENABLED(DisableRecompilation) ||
9999
lastSpillSize < IGC_GET_FLAG_VALUE(AllowedSpillRegCount) ||
100-
(cgCtx->getModuleMetaData()->csInfo.forcedSIMDSize != 0) ||
101100
(stateId < getStateCnt() && RetryTable[stateId].nextState >= getStateCnt()));
102101
}
103102
unsigned RetryManager::GetRetryId() const { return stateId; }
@@ -181,20 +180,31 @@ namespace IGC
181180

182181
CShader* RetryManager::PickCSEntryForcedFromDriver(SIMDMode& simdMode, unsigned char forcedSIMDModeFromDriver)
183182
{
184-
switch (forcedSIMDModeFromDriver)
183+
if (forcedSIMDModeFromDriver == 8)
185184
{
186-
case 8: simdMode = SIMDMode::SIMD8;
187-
simdMode = SIMDMode::SIMD8;
188-
return m_simdEntries[0];
189-
case 16:simdMode = SIMDMode::SIMD16;
190-
simdMode = SIMDMode::SIMD16;
191-
return m_simdEntries[1];
192-
case 32:simdMode = SIMDMode::SIMD32;
193-
simdMode = SIMDMode::SIMD32;
194-
return m_simdEntries[2];
195-
default: simdMode = SIMDMode::UNKNOWN;
196-
return nullptr;
185+
if ((m_simdEntries[0] && m_simdEntries[0]->m_spillSize == 0) || IsLastTry())
186+
{
187+
simdMode = SIMDMode::SIMD8;
188+
return m_simdEntries[0];
189+
}
197190
}
191+
else if (forcedSIMDModeFromDriver == 16)
192+
{
193+
if ((m_simdEntries[1] && m_simdEntries[1]->m_spillSize == 0) || IsLastTry())
194+
{
195+
simdMode = SIMDMode::SIMD16;
196+
return m_simdEntries[1];
197+
}
198+
}
199+
else if (forcedSIMDModeFromDriver == 32)
200+
{
201+
if ((m_simdEntries[2] && m_simdEntries[2]->m_spillSize == 0) || IsLastTry())
202+
{
203+
simdMode = SIMDMode::SIMD32;
204+
return m_simdEntries[2];
205+
}
206+
}
207+
return nullptr;
198208
}
199209

200210
CShader* RetryManager::PickCSEntryByRegKey(SIMDMode& simdMode)
@@ -349,12 +359,15 @@ namespace IGC
349359

350360
bool RetryManager::PickupCS(ComputeShaderContext* cgCtx)
351361
{
352-
SIMDMode simdMode;
362+
SIMDMode simdMode = SIMDMode::UNKNOWN;
353363
CComputeShader* shader = nullptr;
354364
SComputeShaderKernelProgram* pKernelProgram = &cgCtx->programOutput;
355365

356-
shader = static_cast<CComputeShader*>(
357-
PickCSEntryForcedFromDriver(simdMode, cgCtx->getModuleMetaData()->csInfo.forcedSIMDSize));
366+
if (cgCtx->getModuleMetaData()->csInfo.forcedSIMDSize != 0)
367+
{
368+
shader = static_cast<CComputeShader*>(
369+
PickCSEntryForcedFromDriver(simdMode, cgCtx->getModuleMetaData()->csInfo.forcedSIMDSize));
370+
}
358371
if (!shader)
359372
{
360373
shader = static_cast<CComputeShader*>(
@@ -365,7 +378,7 @@ namespace IGC
365378
shader = static_cast<CComputeShader*>(
366379
PickCSEntryEarly(simdMode, cgCtx));
367380
}
368-
if (!shader && IsLastTry(cgCtx))
381+
if (!shader && IsLastTry())
369382
{
370383
shader = static_cast<CComputeShader*>(
371384
PickCSEntryFinally(simdMode));

IGC/Compiler/CodeGenPublic.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ namespace IGC
627627
bool AllowSimd32Slicing();
628628
bool AllowLargeURBWrite();
629629
bool IsFirstTry();
630-
bool IsLastTry(CodeGenContext* cgCtx);
630+
bool IsLastTry();
631631
unsigned GetRetryId() const;
632632

633633
void Enable();

0 commit comments

Comments
 (0)