Skip to content

Commit bd27da7

Browse files
iwwusys_zuul
authored andcommitted
Implement SIMD compile info for OCL shaders
Change-Id: Ia61060afb49c7e4df6325f2643f747ca73f56509
1 parent 4969db6 commit bd27da7

File tree

7 files changed

+39
-9
lines changed

7 files changed

+39
-9
lines changed

IGC/AdaptorOCL/OCL/KernelAnnotations.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ struct ExecutionEnivronment
324324
DWORD WorkgroupWalkOrder[3] = {};
325325
bool HasGlobalAtomics = false;
326326
bool UseBindlessMode = false;
327+
uint64_t SIMDInfo = 0;
327328
};
328329

329330
struct KernelTypeProgramBinaryInfo

IGC/AdaptorOCL/OCL/Patch/patch_parser.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -911,6 +911,9 @@ void DebugPatchList(
911911
ICBE_DPF_STR(output, GFXDBG_HARDWARE,
912912
"\tUseBindlessMode = %d\n",
913913
pPatchItem->UseBindlessMode);
914+
ICBE_DPF_STR(output, GFXDBG_HARDWARE,
915+
"\tSIMDInfo = %lld\n",
916+
pPatchItem->SIMDInfo);
914917
}
915918
break;
916919

IGC/AdaptorOCL/OCL/sp/sp_g8.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2036,6 +2036,7 @@ RETVAL CGen8OpenCLStateProcessor::CreatePatchList(
20362036

20372037

20382038
patch.UseBindlessMode = annotations.m_executionEnivronment.UseBindlessMode;
2039+
patch.SIMDInfo = annotations.m_executionEnivronment.SIMDInfo;
20392040

20402041
retValue = AddPatchItem(
20412042
patch,

IGC/AdaptorOCL/ocl_igc_shared/executable_format/patch_list.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Abstract: Contains common patch structure definitions
3333

3434
namespace iOpenCL
3535
{
36-
const uint32_t CURRENT_ICBE_VERSION = 1067;
36+
const uint32_t CURRENT_ICBE_VERSION = 1068;
3737
const uint32_t MAGIC_CL = 0x494E5443; // 'I', 'N', 'T', 'C'
3838
const uint32_t INVALID_INDEX = 0xFFFFFFFF;
3939

IGC/AdaptorOCL/ocl_igc_shared/executable_format/patch_shared.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,11 @@ struct SPatchExecutionEnvironment :
214214
uint32_t reserved3;
215215
uint32_t StatelessWritesCount;
216216
uint32_t UseBindlessMode;
217+
uint64_t SIMDInfo;
217218
};
218219

219220
// Update CURRENT_ICBE_VERSION when modifying the patch list
220-
static_assert(sizeof(SPatchExecutionEnvironment) == (112 + sizeof(SPatchItemHeader)), "The size of SPatchExecutionEnvironment is not what is expected");
221+
static_assert(sizeof(SPatchExecutionEnvironment) == (120 + sizeof(SPatchItemHeader)), "The size of SPatchExecutionEnvironment is not what is expected");
221222

222223
/*****************************************************************************\
223224
STRUCT: SPatchString

IGC/Compiler/CISACodeGen/OpenCLKernelCodeGen.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2054,7 +2054,7 @@ namespace IGC
20542054
}
20552055
}
20562056

2057-
static bool SetKernelProgram(COpenCLKernel* shader, DWORD simdMode)
2057+
static bool SetKernelProgram(OpenCLProgramContext* ctx, COpenCLKernel* shader, DWORD simdMode)
20582058
{
20592059
if (shader && shader->ProgramOutput()->m_programSize > 0)
20602060
{
@@ -2065,16 +2065,20 @@ namespace IGC
20652065
//shader->m_kernelInfo.m_executionEnivronment.PerThreadSpillFillSize =
20662066
// shader->ProgramOutput()->m_scratchSpaceUsedBySpills;
20672067
shader->m_kernelInfo.m_kernelProgram.simd32 = *shader->ProgramOutput();
2068+
ctx->SetSIMDInfo(SIMD_SELECTED, SIMDMode::SIMD32, ShaderDispatchMode::NOT_APPLICABLE);
20682069
}
20692070
else if (simdMode == 16)
20702071
{
20712072
shader->m_kernelInfo.m_kernelProgram.simd16 = *shader->ProgramOutput();
2073+
ctx->SetSIMDInfo(SIMD_SELECTED, SIMDMode::SIMD16, ShaderDispatchMode::NOT_APPLICABLE);
20722074
}
20732075
else if (simdMode == 8)
20742076
{
20752077
shader->m_kernelInfo.m_kernelProgram.simd8 = *shader->ProgramOutput();
2078+
ctx->SetSIMDInfo(SIMD_SELECTED, SIMDMode::SIMD8, ShaderDispatchMode::NOT_APPLICABLE);
20762079
}
20772080
shader->m_kernelInfo.m_executionEnivronment.CompiledSIMDSize = simdMode;
2081+
shader->m_kernelInfo.m_executionEnivronment.SIMDInfo = ctx->GetSIMDInfo();
20782082
return true;
20792083
}
20802084
return false;
@@ -2145,21 +2149,21 @@ namespace IGC
21452149
if (ctx->m_DriverInfo.sendMultipleSIMDModes() && (ctx->getModuleMetaData()->csInfo.forcedSIMDSize == 0))
21462150
{
21472151
//Gather the kernel binary for each compiled kernel
2148-
if (SetKernelProgram(simd32Shader, 32))
2152+
if (SetKernelProgram(ctx, simd32Shader, 32))
21492153
GatherDataForDriver(ctx, simd32Shader, pKernel, pFunc, pMdUtils);
2150-
if (SetKernelProgram(simd16Shader, 16))
2154+
if (SetKernelProgram(ctx, simd16Shader, 16))
21512155
GatherDataForDriver(ctx, simd16Shader, pKernel, pFunc, pMdUtils);
2152-
if (SetKernelProgram(simd8Shader, 8))
2156+
if (SetKernelProgram(ctx, simd8Shader, 8))
21532157
GatherDataForDriver(ctx, simd8Shader, pKernel, pFunc, pMdUtils);
21542158
}
21552159
else
21562160
{
21572161
//Gather the kernel binary only for 1 SIMD mode of the kernel
2158-
if (SetKernelProgram(simd32Shader, 32))
2162+
if (SetKernelProgram(ctx, simd32Shader, 32))
21592163
GatherDataForDriver(ctx, simd32Shader, pKernel, pFunc, pMdUtils);
2160-
else if (SetKernelProgram(simd16Shader, 16))
2164+
else if (SetKernelProgram(ctx, simd16Shader, 16))
21612165
GatherDataForDriver(ctx, simd16Shader, pKernel, pFunc, pMdUtils);
2162-
else if (SetKernelProgram(simd8Shader, 8))
2166+
else if (SetKernelProgram(ctx, simd8Shader, 8))
21632167
GatherDataForDriver(ctx, simd8Shader, pKernel, pFunc, pMdUtils);
21642168
}
21652169
}
@@ -2195,6 +2199,12 @@ namespace IGC
21952199
if (!CompileSIMDSizeInCommon())
21962200
return false;
21972201

2202+
if (!m_Context->m_retryManager.IsFirstTry())
2203+
{
2204+
m_Context->ClearSIMDInfo(simdMode, ShaderDispatchMode::NOT_APPLICABLE);
2205+
m_Context->SetSIMDInfo(SIMD_RETRY, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
2206+
}
2207+
21982208

21992209

22002210
//If forced SIMD Mode (by driver or regkey), then:
@@ -2275,11 +2285,14 @@ namespace IGC
22752285
{
22762286
if (simdMode == SIMDMode::SIMD32)
22772287
{
2288+
pCtx->SetSIMDInfo(SIMD_SKIP_HW, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
22782289
return SIMDStatus::SIMD_FUNC_FAIL;
22792290
}
22802291
}
22812292
else if (simdMode != SIMDMode::SIMD8)
22822293
{
2294+
pCtx->SetSIMDInfo(SIMD_SKIP_HW, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
2295+
22832296
// default simd8
22842297
return SIMDStatus::SIMD_FUNC_FAIL;
22852298
}
@@ -2307,19 +2320,22 @@ namespace IGC
23072320
case 8:
23082321
if (simdMode == SIMDMode::SIMD16 || simdMode == SIMDMode::SIMD32)
23092322
{
2323+
pCtx->SetSIMDInfo(SIMD_SKIP_THGRPSIZE, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23102324
return SIMDStatus::SIMD_FUNC_FAIL;
23112325
}
23122326
break;
23132327
case 16:
23142328
if (simdMode == SIMDMode::SIMD8 || simdMode == SIMDMode::SIMD32)
23152329
{
2330+
pCtx->SetSIMDInfo(SIMD_SKIP_THGRPSIZE, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23162331
return SIMDStatus::SIMD_FUNC_FAIL;
23172332
}
23182333
EP.m_canAbortOnSpill = false;
23192334
break;
23202335
case 32:
23212336
if (simdMode == SIMDMode::SIMD8 || simdMode == SIMDMode::SIMD16)
23222337
{
2338+
pCtx->SetSIMDInfo(SIMD_SKIP_THGRPSIZE, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23232339
return SIMDStatus::SIMD_FUNC_FAIL;
23242340
}
23252341
EP.m_canAbortOnSpill = false;
@@ -2355,6 +2371,7 @@ namespace IGC
23552371
if (simdMode == SIMDMode::SIMD32 ||
23562372
(groupSize <= 8 && simdMode != SIMDMode::SIMD8))
23572373
{
2374+
pCtx->SetSIMDInfo(SIMD_SKIP_THGRPSIZE, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23582375
return SIMDStatus::SIMD_FUNC_FAIL;
23592376
}
23602377
}
@@ -2373,6 +2390,7 @@ namespace IGC
23732390
Simd32ProfitabilityAnalysis& PA = EP.getAnalysis<Simd32ProfitabilityAnalysis>();
23742391
if (!PA.isSimd16Profitable())
23752392
{
2393+
pCtx->SetSIMDInfo(SIMD_SKIP_PERF, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23762394
return SIMDStatus::SIMD_PERF_FAIL;
23772395
}
23782396
}
@@ -2389,6 +2407,7 @@ namespace IGC
23892407
Simd32ProfitabilityAnalysis& PA = EP.getAnalysis<Simd32ProfitabilityAnalysis>();
23902408
if (!PA.isSimd32Profitable())
23912409
{
2410+
pCtx->SetSIMDInfo(SIMD_SKIP_HW, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23922411
return SIMDStatus::SIMD_PERF_FAIL;
23932412
}
23942413
}

IGC/Compiler/CISACodeGen/ShaderCodeGen.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,10 +1136,15 @@ void CodeGen(OpenCLProgramContext* ctx, CShaderProgram::KernelShaderMap& kernels
11361136
{
11371137
AddCodeGenPasses(*ctx, kernels, Passes, SIMDMode::SIMD16, false);
11381138
AddCodeGenPasses(*ctx, kernels, Passes, SIMDMode::SIMD32, (ctx->getModuleMetaData()->csInfo.forcedSIMDSize != 32));
1139+
1140+
ctx->SetSIMDInfo(SIMD_SKIP_HW, SIMDMode::SIMD8, ShaderDispatchMode::NOT_APPLICABLE);
11391141
}
11401142
else
11411143
{
11421144
AddCodeGenPasses(*ctx, kernels, Passes, SIMDMode::SIMD32, false);
1145+
1146+
ctx->SetSIMDInfo(SIMD_SKIP_HW, SIMDMode::SIMD8, ShaderDispatchMode::NOT_APPLICABLE);
1147+
ctx->SetSIMDInfo(SIMD_SKIP_HW, SIMDMode::SIMD16, ShaderDispatchMode::NOT_APPLICABLE);
11431148
}
11441149
}
11451150
else

0 commit comments

Comments
 (0)