⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.prl

📁 一个用在mips体系结构中的操作系统
💻 PRL
📖 第 1 页 / 共 2 页
字号:
}######## Utility subroutines########sub SumAcross {    ($cum, $src, $weight) = @_;    $weight = (defined($weight)) ? $weight : 1;        if ($src) {        $cum->{"derived"} = $cum->{"derived"} || $src->{"derived"};                foreach $field (@fieldname) {            if (($field eq "name") || ($field eq "bucketName")) {                # ignore            } elsif ($field eq "time") {                $cum->{"time"} = $src->{"time"};                            } elsif (($field eq "latmin") || ($field eq "compmin")) {                $cum->{$field} = min($cum->{$field}, $src->{$field});                            } elsif (($field eq "latmax") || ($field eq "compmax")) {                $cum->{$field} = max($cum->{$field}, $src->{$field});                            } elsif (!defined($cum->{$field})) {                if (defined($src->{$field})) {                    $cum->{$field} = $weight * $src->{$field};                } else {                    $cum->{$field} = 0;                }            } else {                $cum->{$field} += $weight * $src->{$field};            }        }    }}sub SumUp {    ($parent, $child, $weight) = @_;    $weight = (defined($weight)) ? $weight : 1;    if ($child) {        $parent->{"derived"} = 1;                 foreach $field (@fieldname) {             if (($field eq "name") || ($field eq "bucketName")                 || ($field eq "n")) {                 #ignore                              } elsif ($field eq "time") {                 $parent->{"time"} = $child->{"time"};                              } elsif (($field eq "lattotal")                      || ($field eq "latmin") || ($field eq "latmax")                      || ($field eq "latcorr")) {                 # ignore                              } elsif (($field eq "compmin") || ($field eq "compmax")                      || ($field eq "compcorr")) {                 $parent->{$field} = 0;                              } elsif ($field eq "derived") {                              } elsif (!defined($parent->{$field})) {                 $parent->{$field} = $child->{$field};             } else {                 $parent->{$field} += $child->{$field};             }         }     }}sub PhaseName {    ($nodename) = @_;    @p = split(/\./, $nodename);    return $p[$#p];}sub min {    ($a, $b) = @_;    if (!defined($a)) {        $b;    } elsif (!defined($b)) {        $a;    } else {        ($a < $b) ? $a : $b;    }}sub max {    ($a, $b) = @_;    if (!defined($a)) {        $b;    } elsif (!defined($b)) {        $a;    } else {        ($a > $b) ? $a : $b;    }}sub PrintBucket {    ($data) = @_;        if (defined($data->{"derived"})) {        printf "%-20s %15d %15.2f %15.2f %15.2f %15.2f %15s %15s %15d\n",        $data->{"name"},        $data->{"n"},        $data->{"lattotal"},        $data->{"latmin"}, $data->{"latmax"},        $data->{"comptotal"},        "n/a", "n/a",        $data->{"dTlb"};            } else {        printf "%-20s %15d %15.2f %15.2f %15.2f %15.2f %15.2f %15.2f %15d\n",        $data->{"name"},        $data->{"n"},        $data->{"lattotal"},        $data->{"latmin"}, $data->{"latmax"},        $data->{"comptotal"},        $data->{"compmin"}, $data->{"compmax"},        $data->{"dTlb"};    }}######## Used to be in simos-lib.prl####$CYCLESAMPLE = 256;$INSTRSAMPLE = 256;@field_time = ('CPU','L1D','L2D','Upg','L1I','L2I');sub ComputeDerivedFields {    my $f = shift;    my $time;    if ($f->{'cycleSample'} > 0) {        $f->{'_cycles'} = $f->{'cycleSample'} * $CYCLESAMPLE;        $f->{'_instr'}  = $f->{'instrSample'} * $INSTRSAMPLE;    } elsif (defined($f->{'instrCount'})) {        # Embra stuff        $f->{'_instr'} = $f->{'instrCount'};        $f->{'dStall'} = $f->{'dL2Stall'} + $f->{'dUpgradeStall'};        $f->{'iStall'} = $f->{'iL2Stall'};        $f->{'_cycles'} = $f->{'instrCount'} +             $f->{'dStall'} + $f->{'iStall'};    }    $f->{'dL1Stall'} = $f->{'dStall'} -         $f->{'dL2Stall'} - $f->{'dUpgradeStall'};    $f->{'iL1Stall'} = $f->{'iStall'} - $f->{'iL2Stall'};        $f->{'memStall'} = $f->{'dStall'} + $f->{'iStall'};    if (defined($f->{'dStallPrefetch'})) {         $f->{'memStall'} += $f->{'dStallPrefetch'};    }        # Handle cold misses etc    if (defined($f->{'read.ice'})) {	$f->{'cold'} = $f->{'read.ice'} + $f->{'read.cold'} +	    $f->{'write.ice'} + $f->{'write.cold'};    }        $time =  $f->{'_cycles'};        # Ensure we don't get any divide by 0 fatal errors    # Check whether this is necessary before committing!    if ($time != 0) {	$f->{'time-CPU'} = 100 * $f->{'_instr'} / $time;	$f->{'time-L1D'} = 100 * $f->{'dL1Stall'} / $time;	$f->{'time-L2D'} = 100 * $f->{'dL2Stall'} / $time;	$f->{'time-Upg'} = 100 * $f->{'dUpgradeStall'} / $time;	$f->{'time-L1I'} = 100 * $f->{'iL1Stall'} / $time;	$f->{'time-L2I'} = 100 * $f->{'iL2Stall'} / $time;	$f->{'seconds'} = $f->{'_cycles'} / $config{'Clock'} / 1000 / 1000;    } else {	# Initialize everything to -1.0 (per Ed's convention)	$f->{'time-CPU'} = $f->{'time-L1D'} =  	    $f->{'time-L2D'} = $f->{'time-Upg'} = 		$f->{'time-L1I'} = $f->{'time-L2I'} = -1.0;	$f->{'seconds'} = 0;    }	    # Now calculate D1/D2/I1/I2 miss rates etc    $instrCount = $f->{'_instr'};    if ($instrCount != 0) {	$f->{'dL1MR'} = 100.0*$f->{'dL1Miss'}/$instrCount;	$f->{'dL2MR'} = 100.0*$f->{'dL2Miss'}/$instrCount;	$f->{'iL1MR'} = 100.0*$f->{'iL1Miss'}/$instrCount;	$f->{'iL2MR'} = 100.0*$f->{'iL2Miss'}/$instrCount;	$f->{'dTlbMR'} = 100.0*$f->{'dTlb'}/$instrCount;	$f->{'iTlbMR'} = 100.0*$f->{'iTlb'}/$instrCount;	# TODO - the upgrade numbers        $f->{'dMCPI'}   = $f->{'dStall'} / $instrCount;        $f->{'iMCPI'}   = $f->{'iStall'} / $instrCount;        $f->{'dL2MCPI'} = $f->{'dL2Stall'} / $instrCount;        $f->{'dL1MCPI'} = $f->{'dL1Stall'} / $instrCount;        $f->{'dUpgMCPI'} = $f->{'dUpgradeStall'} / $instrCount;        if (defined($f->{'dStallPrefetch'})) {            $f->{'dPrefMCPI'} = $f->{'dStallPrefetch'}  / $instrCount;        }            } else {                $f->{'dL1MR'} = $f->{'dL2MR'} = $f->{'iL1MR'} = 	    $f->{'iL2MR'} = $f->{'dMR'} = $f->{'iMR'} = 		$f->{'dTlbMR'} = $f->{'iTlbMR'} = -1.0;        $f->{'dMCPI'} =   $f->{'iMCPI'} =  $f->{'dL2MCPI'} =              $f->{'dL1MCPI'} =   $f->{'dUpgMCPI'} = -1;    }        # Cache miss classification     if (defined($f->{'trueSharing.ice'})) {        $f->{'missclass-true'} =             ($f->{'trueSharing.inv'}+             $f->{'trueSharing.capinv'}+             $f->{'trueSharing.cap'}+             $f->{'trueSharing.cold'});        $f->{'missclass-cold'} =             ($f->{'falseSharing.ice'}+             $f->{'falseSharing.cold'});        $f->{'missclass-repl'} =             ($f->{'falseSharing.cap'});        $f->{'missclass-false'} =              ($f->{'falseSharing.inv'}+             $f->{'falseSharing.capinv'});        $f->{'missclass-other'} =  $f->{'dL2Miss'} -             ($f->{'missclass-true'}+             $f->{'missclass-cold'}+             $f->{'missclass-repl'}+             $f->{'missclass-false'});             if (defined($f->{'prefetchNoMiss'}  )) {             $f->{'missclass-other'} += $f->{'prefetchNoMiss'};        }        foreach $i ('cold','true','false','repl','other') {            if ($f->{'dL2Miss'} > 0 ) {                 $f->{"missrate-$i"} = $f->{"missclass-$i"} *                    $f->{"dL2MR"} /  $f->{"dL2Miss"};            } else {                $f->{"missrate-$i"} = -1;            }                    }                $f->{"stall-true"} =             ($f->{"trueShStall.inv"}+             $f->{"trueShStall.capinv"}+             $f->{"trueShStall.cap"}+             $f->{"trueShStall.cold"});        $f->{"stall-cold"} =             ($f->{"falseShStall.ice"}+             $f->{"falseShStall.cold"});        $f->{"stall-repl"} =             ($f->{"falseShStall.cap"}) ;        $f->{"stall-false"} =             ($f->{"falseShStall.inv"}+             $f->{"falseShStall.capinv"});        #        print STDERR "XXX  $f->{trueShStall.inv}\n";#        print STDERR "XXX

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -