Skip to content

Commit 25022d5

Browse files
iwwusys_zuul
authored andcommitted
Clean up compilation time counter stats
- Update IGC timeStats.def to match vISA's Timer.def - Redefine isDashBoardTimer in timeStats.def to indicate default display - Clean up existing vISAEmit counters in IGC, use vISA counters as is - Break down CodeGen Add Passes counter Change-Id: Id13e264ce2543819e2825d8b5bd9bf9e1807056b
1 parent 5af044b commit 25022d5

File tree

8 files changed

+98
-106
lines changed

8 files changed

+98
-106
lines changed

IGC/AdaptorCommon/customApi.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ namespace IGC
120120
CASE(TIME_STATS_SUM);
121121
CASE(TIME_STATS_PER_SHADER);
122122
CASE(TIME_STATS_COARSE);
123-
CASE(TIME_STATS_DASHBOARD);
124123
CASE(MEM_STATS);
125124
CASE(MEM_STATS_DETAIL);
126125
CASE(SHADER_QUALITY_METRICS);

IGC/AdaptorCommon/customApi.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ namespace IGC
7777
TIME_STATS_SUM, //!< Timing of translation, code generation, finalizer, etc
7878
TIME_STATS_PER_SHADER, //!< Like TIME_STATS_SUM, but one stat measurement per shader (instead of summed up times)
7979
TIME_STATS_COARSE, //!< Only collect/dump coarse level time stats, i.e. skip opt detail timer for now >
80-
TIME_STATS_DASHBOARD, //!< Only collect/dump timers for dashboard. It also run the tests 5 times and dump out the median.
8180
MEM_STATS, //!< Measurements related to allocations and deallocations
8281
MEM_STATS_DETAIL, //!< dump detail memstats
8382
SHADER_QUALITY_METRICS, //!< ISA quality measurements (i.e. count of instructions generated)

IGC/Compiler/CISACodeGen/CISABuilder.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4175,6 +4175,7 @@ namespace IGC
41754175
InitBuildParams(params);
41764176
}
41774177

4178+
COMPILER_TIME_START(m_program->GetContext(), TIME_CG_vISACompile);
41784179
bool enableVISADump = IGC_IS_FLAG_ENABLED(EnableVISASlowpath) || IGC_IS_FLAG_ENABLED(ShaderDumpEnable);
41794180
auto builderMode = m_hasInlineAsm ? vISA_ASM_WRITER : vISA_3D;
41804181
auto builderOpt = (enableVISADump || m_hasInlineAsm) ? CM_CISA_BUILDER_BOTH : CM_CISA_BUILDER_GEN;
@@ -4616,8 +4617,6 @@ namespace IGC
46164617

46174618
void CEncoder::Compile(bool hasSymbolTable)
46184619
{
4619-
COMPILER_TIME_START(m_program->GetContext(), TIME_CG_vISAEmitPass);
4620-
46214620
CodeGenContext* context = m_program->GetContext();
46224621
SProgramOutput* pOutput = m_program->ProgramOutput();
46234622

@@ -4634,10 +4633,6 @@ namespace IGC
46344633
MEM_SNAPSHOT(IGC::SMS_AFTER_CISACreateDestroy_SIMD32);
46354634
}
46364635

4637-
COMPILER_TIME_END(m_program->GetContext(), TIME_CG_vISAEmitPass);
4638-
4639-
COMPILER_TIME_START(m_program->GetContext(), TIME_CG_vISACompile);
4640-
46414636
int vIsaCompile = 0;
46424637
VISAKernel* pMainKernel = nullptr;
46434638

@@ -4752,8 +4747,6 @@ namespace IGC
47524747
return;
47534748
}
47544749

4755-
COMPILER_TIME_START(m_program->GetContext(), TIME_CG_vISAEmitPass);
4756-
47574750
if (m_program->m_dispatchSize == SIMDMode::SIMD8)
47584751
{
47594752
MEM_SNAPSHOT(IGC::SMS_AFTER_vISACompile_SIMD8);
@@ -4911,8 +4904,6 @@ namespace IGC
49114904
pOutput->m_scratchSpaceUsedByGtpin = jitInfo->numBytesScratchGtpin;
49124905

49134906
pOutput->m_offsetToSkipPerThreadDataLoad = jitInfo->offsetToSkipPerThreadDataLoad;
4914-
4915-
COMPILER_TIME_END(m_program->GetContext(), TIME_CG_vISAEmitPass);
49164907
}
49174908

49184909
void CEncoder::DestroyVISABuilder()

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -393,9 +393,6 @@ bool EmitPass::runOnFunction(llvm::Function& F)
393393
}
394394
}
395395

396-
COMPILER_TIME_START(m_currShader->GetContext(), TIME_CG_vISAEmitPass);
397-
COMPILER_TIME_START(m_currShader->GetContext(), TIME_vISAEmitInit);
398-
399396
m_DL = &F.getParent()->getDataLayout();
400397
m_pattern = &getAnalysis<CodeGenPatternMatch>();
401398
m_deSSA = &getAnalysis<DeSSA>();
@@ -551,9 +548,6 @@ bool EmitPass::runOnFunction(llvm::Function& F)
551548
// We only invoke EndEncodingMark() to update last VISA id.
552549
IF_DEBUG_INFO_IF(m_pDebugEmitter, m_pDebugEmitter->EndEncodingMark();)
553550

554-
COMPILER_TIME_END(m_currShader->GetContext(), TIME_vISAEmitInit);
555-
COMPILER_TIME_START(m_currShader->GetContext(), TIME_vISAEmitLoop);
556-
557551
phiMovToBB.clear();
558552
unsigned int lineNo = 0;
559553
bool disableSlicing =
@@ -718,9 +712,6 @@ bool EmitPass::runOnFunction(llvm::Function& F)
718712
delete llvmtoVISADump;
719713
}
720714

721-
COMPILER_TIME_END(m_currShader->GetContext(), TIME_vISAEmitLoop);
722-
COMPILER_TIME_START(m_currShader->GetContext(), TIME_vISAEmitPayloadInputs);
723-
724715
if (!m_FGA || m_FGA->isGroupHead(&F))
725716
{
726717
// Cache the arguments list into a vector for faster access
@@ -731,10 +722,6 @@ bool EmitPass::runOnFunction(llvm::Function& F)
731722
m_currShader->AllocatePayload();
732723
}
733724

734-
COMPILER_TIME_END(m_currShader->GetContext(), TIME_vISAEmitPayloadInputs);
735-
736-
COMPILER_TIME_END(m_currShader->GetContext(), TIME_CG_vISAEmitPass);
737-
738725
IF_DEBUG_INFO_IF(m_currShader->diData, m_currShader->diData->markOutput(F, m_currShader);)
739726
IF_DEBUG_INFO_IF(m_currShader->diData, m_currShader->diData->addVISAModule(&F, m_pDebugEmitter->GetVISAModule());)
740727

IGC/Compiler/CISACodeGen/ShaderCodeGen.cpp

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,8 @@ namespace IGC
220220

221221
inline void AddAnalysisPasses(CodeGenContext& ctx, IGCPassManager& mpm)
222222
{
223+
COMPILER_TIME_START(&ctx, TIME_CG_Add_Analysis_Passes);
224+
223225
bool isOptDisabled = ctx.getModuleMetaData()->compOpt.OptDisable;
224226
TODO("remove the following once all IGC passes are registered to PassRegistery in their constructor")
225227
initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
@@ -300,6 +302,7 @@ namespace IGC
300302

301303
mpm.add(createTimeStatsCounterPass(&ctx, TIME_CG_Analysis, STATS_COUNTER_END));
302304

305+
COMPILER_TIME_END(&ctx, TIME_CG_Add_Analysis_Passes);
303306
}
304307

305308
static void UpdateInstTypeHint(CodeGenContext& ctx)
@@ -323,6 +326,7 @@ namespace IGC
323326

324327
inline void AddLegalizationPasses(CodeGenContext& ctx, IGCPassManager& mpm)
325328
{
329+
COMPILER_TIME_START(&ctx, TIME_CG_Add_Legalization_Passes);
326330

327331
mpm.add(createTimeStatsCounterPass(&ctx, TIME_CG_Legalization, STATS_COUNTER_START));
328332

@@ -671,12 +675,16 @@ namespace IGC
671675
mpm.add(new WAFMinFMax());
672676

673677
mpm.add(createTimeStatsCounterPass(&ctx, TIME_CG_Legalization, STATS_COUNTER_END));
678+
679+
COMPILER_TIME_END(&ctx, TIME_CG_Add_Legalization_Passes);
674680
}
675681

676682
inline void AddCodeGenPasses(CodeGenContext& ctx, CShaderProgram::KernelShaderMap& shaders, IGCPassManager& Passes, SIMDMode simdMode, bool canAbortOnSpill, ShaderDispatchMode shaderMode = ShaderDispatchMode::NOT_APPLICABLE, PSSignature* pSignature = nullptr)
677683
{
678-
// Generate CISA
679-
Passes.add(new EmitPass(shaders, simdMode, canAbortOnSpill, shaderMode, pSignature));
684+
// Generate CISA
685+
COMPILER_TIME_START(&ctx, TIME_CG_Add_CodeGen_Passes);
686+
Passes.add(new EmitPass(shaders, simdMode, canAbortOnSpill, shaderMode, pSignature));
687+
COMPILER_TIME_END(&ctx, TIME_CG_Add_CodeGen_Passes);
680688
}
681689

682690
template<typename ContextType>
@@ -686,6 +694,7 @@ namespace IGC
686694
void CodeGen(DomainShaderContext* ctx, CShaderProgram::KernelShaderMap& shaders)
687695
{
688696
COMPILER_TIME_START(ctx, TIME_CodeGen);
697+
COMPILER_TIME_START(ctx, TIME_CG_Add_Passes);
689698

690699
IGCPassManager Passes(ctx, "CG");
691700

@@ -700,6 +709,8 @@ namespace IGC
700709
AddCodeGenPasses(*ctx, shaders, Passes, SIMDMode::SIMD8, false, ShaderDispatchMode::DUAL_PATCH);
701710
}
702711

712+
COMPILER_TIME_END(ctx, TIME_CG_Add_Passes);
713+
703714
Passes.run(*(ctx->getModule()));
704715
DumpLLVMIR(ctx, "codegen");
705716

@@ -722,8 +733,8 @@ namespace IGC
722733
void PSCodeGen(PixelShaderContext* ctx, CShaderProgram::KernelShaderMap& shaders, PSSignature* pSignature = nullptr)
723734
{
724735
COMPILER_TIME_START(ctx, TIME_CodeGen);
725-
726736
COMPILER_TIME_START(ctx, TIME_CG_Add_Passes);
737+
727738
IGCPassManager PassMgr(ctx, "CG");
728739
const PixelShaderInfo& psInfo = ctx->getModuleMetaData()->psInfo;
729740

@@ -797,9 +808,8 @@ namespace IGC
797808
}
798809
}
799810

800-
COMPILER_TIME_END(ctx, TIME_CG_Add_Passes);
801-
802811
PassMgr.add(new DebugInfoPass(shaders));
812+
COMPILER_TIME_END(ctx, TIME_CG_Add_Passes);
803813

804814
PassMgr.run(*(ctx->getModule()));
805815

@@ -812,6 +822,7 @@ namespace IGC
812822
void CodeGen(ComputeShaderContext* ctx, CShaderProgram::KernelShaderMap& shaders)
813823
{
814824
COMPILER_TIME_START(ctx, TIME_CodeGen);
825+
COMPILER_TIME_START(ctx, TIME_CG_Add_Passes);
815826

816827
bool setEarlyExit16Stat = false;
817828

@@ -925,6 +936,9 @@ namespace IGC
925936
assert(false && "Unexpected SIMD mode");
926937
}
927938
}
939+
940+
COMPILER_TIME_END(ctx, TIME_CG_Add_Passes);
941+
928942
PassMgr.run(*(ctx->getModule()));
929943

930944
if (setEarlyExit16Stat)
@@ -939,17 +953,20 @@ namespace IGC
939953
void CodeGen(ContextType* ctx, CShaderProgram::KernelShaderMap& shaders)
940954
{
941955
COMPILER_TIME_START(ctx, TIME_CodeGen);
956+
COMPILER_TIME_START(ctx, TIME_CG_Add_Passes);
942957

943-
IGCPassManager PassMgr(ctx, "CG");
958+
IGCPassManager PassMgr(ctx, "CG");
944959

945-
AddLegalizationPasses(*ctx, PassMgr);
960+
AddLegalizationPasses(*ctx, PassMgr);
946961

947-
AddAnalysisPasses(*ctx, PassMgr);
962+
AddAnalysisPasses(*ctx, PassMgr);
948963

949-
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD8, false);
964+
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD8, false);
950965

951-
PassMgr.run(*(ctx->getModule()));
952-
DumpLLVMIR(ctx, "codegen");
966+
COMPILER_TIME_END(ctx, TIME_CG_Add_Passes);
967+
968+
PassMgr.run(*(ctx->getModule()));
969+
DumpLLVMIR(ctx, "codegen");
953970

954971
COMPILER_TIME_END(ctx, TIME_CodeGen);
955972
MEM_SNAPSHOT(IGC::SMS_AFTER_CODEGEN);
@@ -960,6 +977,7 @@ namespace IGC
960977
void CodeGen(OpenCLProgramContext* ctx, CShaderProgram::KernelShaderMap& kernels)
961978
{
962979
COMPILER_TIME_START(ctx, TIME_CodeGen);
980+
COMPILER_TIME_START(ctx, TIME_CG_Add_Passes);
963981

964982
IGCPassManager Passes(ctx, "CG");
965983

@@ -1003,6 +1021,7 @@ namespace IGC
10031021
}
10041022
}
10051023
Passes.add(new DebugInfoPass(kernels));
1024+
COMPILER_TIME_END(ctx, TIME_CG_Add_Passes);
10061025

10071026
Passes.run(*(ctx->getModule()));
10081027
COMPILER_TIME_END(ctx, TIME_CodeGen);

IGC/common/Stats.cpp

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
4949
extern "C" int64_t getTimerTicks(unsigned int idx);
5050
extern "C" double getTimerCounts(unsigned int idx);
5151
extern "C" void getTimerNames(char* timerName, unsigned int idx);
52+
extern "C" unsigned int getTimerHits(unsigned int idx);
5253
extern "C" unsigned int getTotalTimers();
5354
#endif
5455

@@ -512,15 +513,12 @@ default: assert(0 && "unreachable"); break;
512513

513514
bool isDashboardTimer( COMPILE_TIME_INTERVALS cti )
514515
{
515-
if( IGC::Debug::GetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_DASHBOARD ) )
516+
switch (cti)
516517
{
517-
switch (cti)
518-
{
519-
#define DEFINE_TIME_STAT( enumName, stringName, parentEnum, isVISA, isUnacc, isCoarseTimer, isDashBoardTimer ) case enumName: return isDashBoardTimer;
520-
#include "timeStats.def"
521-
#undef DEFINE_TIME_STAT
522-
default: assert( 0 && "unreachable" ); break;
523-
}
518+
#define DEFINE_TIME_STAT( enumName, stringName, parentEnum, isVISA, isUnacc, isCoarseTimer, isDashBoardTimer ) case enumName: return isDashBoardTimer;
519+
#include "timeStats.def"
520+
#undef DEFINE_TIME_STAT
521+
default: assert( 0 && "unreachable" ); break;
524522
}
525523

526524
return true;
@@ -564,10 +562,11 @@ TimeStats::TimeStats()
564562

565563
void TimeStats::recordVISATimers()
566564
{
567-
// getTotalTimers() +1 because there is a unaccounted counter
565+
// getTotalTimers() +1 because there is a unaccounted counter
568566
for (unsigned int i = 0; i < getTotalTimers(); ++i)
569567
{
570-
m_elapsedTime[TIME_VISA_Total+i] += getTimerTicks(i);
568+
m_elapsedTime[TIME_VISA_TOTAL+i] += getTimerTicks(i);
569+
m_hitCount[TIME_VISA_TOTAL + i] = getTimerHits(i);
571570
}
572571
}
573572

@@ -626,25 +625,14 @@ void TimeStats::printSumTime() const
626625
TimeStats pp = postProcess();
627626

628627
bool dumpCoarse = IGC::Debug::GetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_COARSE );
629-
bool dumpDashBoard = IGC::Debug::GetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_DASHBOARD );
630-
631-
if( !dumpCoarse && !dumpDashBoard )
632-
{
633-
pp.printSumTimeCSV("c:\\Intel\\timeStatSum.csv");
634-
}
635628

636-
if( dumpCoarse )
629+
if ( dumpCoarse )
637630
{
638-
IGC::Debug::SetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_DASHBOARD, false );
639631
pp.printSumTimeCSV("c:\\Intel\\timeStatCoarseSum.csv");
640-
IGC::Debug::SetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_DASHBOARD, dumpDashBoard );
641632
}
642-
643-
if( dumpDashBoard )
633+
else
644634
{
645-
IGC::Debug::SetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_COARSE, false );
646-
pp.printSumTimeCSV("c:\\Intel\\timeStatDashboardSum.csv");
647-
IGC::Debug::SetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_COARSE, dumpCoarse );
635+
pp.printSumTimeCSV("c:\\Intel\\timeStatSum.csv");
648636
}
649637

650638
pp.printSumTimeTable( llvm::dbgs() );
@@ -657,7 +645,7 @@ bool TimeStats::skipTimer( int i ) const
657645
{
658646
return true;
659647
}
660-
if( IGC::Debug::GetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_DASHBOARD ) && !isDashboardTimer( interval ) )
648+
if( !isDashboardTimer( interval ) )
661649
{
662650
return true;
663651
}
@@ -707,8 +695,7 @@ void TimeStats::printSumTimeCSV(const char* outputFile) const
707695
}
708696
fprintf(fileName, "\n");
709697

710-
if( !IGC::Debug::GetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_COARSE ) &&
711-
!IGC::Debug::GetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_DASHBOARD ) )
698+
if( !IGC::Debug::GetDebugFlag(IGC::Debug::DebugFlag::TIME_STATS_COARSE ) )
712699
{
713700
// print secs
714701
fprintf(fileName, "seconds,," );
@@ -809,9 +796,7 @@ void TimeStats::printSumTimeTable( llvm::raw_ostream & OS ) const
809796
FS.PadToColumn(ticksCol) << str((int)intervalTicks, colWidth);
810797
FS.PadToColumn(secsCol) << str((int)intervalTicks / (double)frequency, colWidth, 4);
811798
FS.PadToColumn(percCol) << str((int)intervalTicks / (double)getCompileTime(TIME_TOTAL) * 100.0, colWidth, 2);
812-
FS.PadToColumn(hitCol) << ((isVISATimer(interval) || isUnaccounted(interval))
813-
? ""
814-
: str((int)m_hitCount[i], colWidth));
799+
FS.PadToColumn(percCol) << str((int)m_hitCount[i], colWidth);
815800
FS << "\n";
816801
}
817802
}
@@ -879,6 +864,10 @@ TimeStats TimeStats::postProcess() const
879864
const COMPILE_TIME_INTERVALS interval = static_cast<COMPILE_TIME_INTERVALS>(i);
880865
const COMPILE_TIME_INTERVALS parent = parentInterval( interval );
881866

867+
if (m_elapsedTime[interval] == 0) {
868+
continue;
869+
}
870+
882871
if ( isUnaccounted(interval) == false )
883872
{
884873
childSum[ parent ] += m_elapsedTime[ interval ];

0 commit comments

Comments
 (0)