@@ -623,10 +623,8 @@ bool G4_Kernel::updateKernelToLargerGRF() {
623
623
if (numRegTotal == grfMode.getMaxGRF ())
624
624
return false ;
625
625
626
- numRegTotal = grfMode.getLargerGRF ();
627
-
628
626
// Scale number of GRFs, Acc, SWSB tokens.
629
- setKernelParameters ();
627
+ setKernelParameters (grfMode. getLargerGRF () );
630
628
fg.builder ->rebuildPhyRegPool (getNumRegTotal ());
631
629
return true ;
632
630
}
@@ -638,10 +636,8 @@ bool G4_Kernel::updateKernelToSmallerGRF() {
638
636
if (numRegTotal == grfMode.getMinGRF ())
639
637
return false ;
640
638
641
- numRegTotal = grfMode.getSmallerGRF ();
642
-
643
639
// Scale number of GRFs, Acc, SWSB tokens.
644
- setKernelParameters ();
640
+ setKernelParameters (grfMode. getSmallerGRF () );
645
641
fg.builder ->rebuildPhyRegPool (getNumRegTotal ());
646
642
return true ;
647
643
}
@@ -656,10 +652,8 @@ void G4_Kernel::updateKernelByRegPressure(unsigned regPressure) {
656
652
if (newGRF == numRegTotal)
657
653
return ;
658
654
659
- numRegTotal = newGRF;
660
-
661
655
// Scale number of threads, Acc, SWSB tokens.
662
- setKernelParameters ();
656
+ setKernelParameters (newGRF );
663
657
664
658
// Update physical register pool
665
659
fg.builder ->rebuildPhyRegPool (getNumRegTotal ());
@@ -676,10 +670,9 @@ bool G4_Kernel::updateKernelFromNumGRFAttr() {
676
670
if (numRegTotal == attrNumGRF)
677
671
return true ;
678
672
679
- numRegTotal = attrNumGRF;
680
673
regSharingHeuristics = false ;
681
674
// Scale number of GRFs, Acc, SWSB tokens.
682
- setKernelParameters ();
675
+ setKernelParameters (attrNumGRF );
683
676
fg.builder ->rebuildPhyRegPool (getNumRegTotal ());
684
677
return true ;
685
678
}
@@ -950,7 +943,7 @@ unsigned G4_Kernel::getLargestInputRegister() {
950
943
return regNum;
951
944
}
952
945
953
- void G4_Kernel::setKernelParameters () {
946
+ void G4_Kernel::setKernelParameters (unsigned newGRF ) {
954
947
unsigned overrideGRFNum = 0 , overrideNumThreads = 0 , overrideNumSWSB = 0 ,
955
948
overrideNumAcc = 0 ;
956
949
@@ -961,27 +954,31 @@ void G4_Kernel::setKernelParameters() {
961
954
962
955
//
963
956
// Number of threads/GRF can currently be set by:
964
- // 1.- IGC flag (reg key)
965
- // 2.- Compiler option entered by user for
957
+ // 1.- Per kernel attribute
958
+ // 2.- IGC flag (reg key)
959
+ // 3.- Compiler option entered by user for
966
960
// 2.1 entire module
967
961
// 2.2 kernel function
968
- // 3.- Per kernel attribute
969
962
// 4.- Compiler heuristics
970
963
//
971
- // 1 and 2 are set via vISA option; 3 via kernel attribute .
964
+ // 1 is set via kernel attribute. 2 and 3 via vISA option .
972
965
// If none of them are set, compiler selects the best option (4).
973
966
//
974
967
975
- if (overrideNumThreads > 0 ) {
968
+ if (newGRF > 0 ) {
969
+ // per kernel attribute or GRF change during compilation
970
+ grfMode.setModeByNumGRFs (newGRF);
971
+ overrideGRFNum = 0 ;
972
+ } else if (overrideNumThreads > 0 ) {
973
+ // per kernel/module number of threads
976
974
grfMode.setModeByNumThreads (overrideNumThreads);
977
975
overrideGRFNum = 0 ;
978
976
} else if (overrideGRFNum != grfMode.getDefaultGRF ()) {
977
+ // per kernel/module number of GRFs
979
978
grfMode.setModeByNumGRFs (overrideGRFNum);
980
979
} else {
981
- // GRFMode is set to default mode when kernel is created
982
- // During compilation GRFMode may change by updating numRegTotal
983
- if (numRegTotal > 0 )
984
- grfMode.setModeByNumGRFs (numRegTotal);
980
+ // Use default value
981
+ grfMode.setDefaultGRF ();
985
982
overrideGRFNum = 0 ;
986
983
}
987
984
0 commit comments