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

📄 mipsy_stats.pl

📁 一个用在mips体系结构中的操作系统
💻 PL
📖 第 1 页 / 共 2 页
字号:
#&DO_MEMORY_STATS();exit(0);################################################################## Procedures that manipulate and print the scanned in numbers#################################################################sub numerically { $a <=> $b;}sub div {    my $x = shift;    my $y = shift;    if ($y == 0) {        return 0.0;    } else {        return $x/$y;    }}sub PRINT_DIVIDER {    printf("\n********************************************************\n");}sub DO_HEADER_INFO {    printf("****************************\n");    printf("* MIPSY SIMULATION RESULTS *\n");    printf("****************************\n");    printf("Simulation Call:    %s\n", $invocation);    printf("Simulation Host:    %s\n", $hostName);    printf("Simulation Date:    %s\n\n", $date);    $simulationTime = $endTime - $startTime;    printf("Simulation Time:    %d Hours %d Minutes %d Seconds\n",           $simulationTime/3600, ($simulationTime/60)%60,            $simulationTime % 60);    printf("Average KIPs:       %.2lf\n",           &div($instCount,$simulationTime) / 1000);}sub DO_SUMMARY_STATS {    printf("Total Instructions: %8.0lf\n", $instCount);    printf("(Floating Point):   %8.0lf\n", $fpInstCount);    printf("(Bdoor Insts):      %8.0lf\n\n", $bdoorInstCount);    printf("Total Cycles:       %.0lf\n", $cycleCount);    for ($cpu = 0; $cpu <= $numCpus; $cpu++) {        printf("\nCPU %d\n*******\n", $cpu);        printf("Total Instructions:   %8.0lf (%.2lf%%)\n", $instCount[$cpu],               100.0 * &div($instCount[$cpu], $instCount));        printf("Halted Cycles:        %8.0lf (%.2lf%%)\n", $haltedTime[$cpu],               100.0 * &div($haltedTime[$cpu], $cycleCount));                $totalStall[$cpu] = $cacheStall[$cpu] + $libcWait[$cpu];        printf("Total Stall Cycles:   %8.0lf (%.2lf%%)\n", $totalStall[$cpu],               100.0 * &div($cacheStall[$cpu], $cycleCount));        printf("  (Libc Wait):    %12.0lf (%.2lf%%)\n", $libcWait[$cpu],                100.0 * &div($libcWait[$cpu], $totalStall[$cpu]));    }}sub DO_PCACHE_STATS {    printf("\n1st Level Instruction Cache\n");    printf("***************************\n");    printf("Size = %s\t Line Size = %d\n", $icacheSize, $icacheLine);    if ($icacheAssoc == 1) {        printf("Direct-Mapped\n\n");    } else {        printf("%d-way set associative\n\n", $icacheAssoc);    }    printf("%-25s %9s %12s\n", Operation, Count, Percentage);     printf("------------------------------------------------\n");    printf("%-25s %9d %11.2f%%\n", Refs, $totalIRefs, 100.0);    for ($cpu = 0; $cpu <= $numCpus; $cpu++) {        printf("  CPU %d %27.0lf %11.2lf%%\n", $cpu, $iRefs[$cpu],                100.0 * &div($iRefs[$cpu], $totalIRefs));    }    printf("%-25s %9d %11.2f%%\n", Misses, $totalIMisses,            100.0 * &div($totalIMisses,$totalIRefs));    for ($cpu = 0; $cpu <= $numCpus; $cpu++) {        printf("  CPU %d %27.0lf %11.2lf%%\n", $cpu, $iMisses[$cpu],                100.0 * &div($iMisses[$cpu], $iRefs[$cpu]));    }        printf("\n1st Level Data Cache\n");    printf("*********************\n");    printf("Size = %s\tLine Size = %d\n", $dcacheSize, $dcacheLine);    if ($dcacheAssoc == 1) {        printf("Direct-Mapped\n\n");    } else {        printf("%d-way set associative\n\n", $dcacheAssoc);    }        printf("%-25s %9s %12s\n", Operation, Count, Percentage);     printf("------------------------------------------------\n");    $totalDRefs = $totalDReads + $totalDWrites;    printf("%-25s %9d %11.2f%%\n", Refs, $totalDRefs, 100.0);    printf("%-25s %9d %11.2f%%\n", Reads, $totalDReads,            100.0* &div($totalDReads,$totalDRefs));    printf("%-25s %9d %11.2f%%\n", Writes, $totalDWrites,            100.0* &div($totalDWrites,$totalDRefs));    printf("%-25s %9d %11.2f%%\n", ReadMisses, $totalDReadMisses,            100.0* &div($totalDReadMisses,$totalDReads));    for ($cpu = 0; $cpu <= $numCpus; $cpu++) {        printf("  CPU %d %27.0lf %11.2lf%%\n", $cpu, $dReadMisses[$cpu],                100.0 * &div($dReadMisses[$cpu], $dReads[$cpu]));    }    printf("%-25s %9d %11.2f%%\n", WriteMisses, $totalDWriteMisses,            100.0* &div($totalDWriteMisses,$totalDWrites));    for ($cpu = 0; $cpu <= $numCpus; $cpu++) {        printf("  CPU %d %27.0lf %11.2lf%%\n", $cpu, $dWriteMisses[$cpu],                100.0 * &div($dWriteMisses[$cpu], $dWrites[$cpu]));    }    printf("%-25s %9d %11.2f%%\n", Upgrades, $totalUpgrades, 100);    }sub DO_SCACHE_STATS {    printf("\n2nd Level Unified Cache\n");    printf("************************\n");    printf("Size = %s\tLine Size = %d\n", $scacheSize, $scacheLine);    if ($scacheAssoc == 1) {        printf("Direct-Mapped\n\n");    } else {        printf("%d-way set associative\n\n", $scacheAssoc);    }        printf("%-25s %9s %12s\n", Operation, Count, Percentage);     printf("------------------------------------------------\n");    $totalSIGets   = $totalSIGets - $totalSIGetMHTRetries;    $totalSDGets   = $totalSDGets - $totalDGetRetries         - $totalSDGetMHTRetries;    # WATCH OUT FOR THIS!    # some things start as a getx for the l2 and then they     # need an upgrade. If the upgrade has an MHT conflict    # then future retries count as SDUGetXMHTRetries.    $totalSDGetXs  = $totalSDGetXs - $totalDGetXRetries         - $totalSDGetXMHTRetries - $totalSDUGetXMHTRetries;    $totalSRefs    = $totalSIGets + $totalSDGets + $totalSDGetXs;    $totalL1Misses = $totalDReadMisses + $totalDWriteMisses + $totalIMisses;    if ($totalSRefs != $totalL1Misses) {        printf("  WARNING: L1 Misses = %d\t L2 Refs = %d\n",               $totalL1Misses, $totalSRefs);    }    printf("%-25s %9d %11.2f%%\n", Refs, $totalSRefs, 100.0);    if ($totalSIGets != $totalIMisses) {        printf("   WARNING: L1 I Misses = %d\t L2 I Refs = %d\n",               $totalIMisses, $totalSIGets);    }        printf("%-25s %9d %11.2f%%\n", IGets, $totalSIGets,            100.0 * &div($totalSIGets,$totalSRefs));    if ($totalSDGets != $totalDReadMisses) {        printf("   WARNING: L1 D Misses = %d\t L2 DGets = %d\n",               $totalDReadMisses, $totalSDGets);    }    printf("%-25s %9d %11.2f%%\n", DGets, $totalSDGets,            100.0 * &div($totalSDGets,$totalSRefs));    if ($totalSDGetXs != $totalDWriteMisses) {        printf("   WARNING: L1 D Write Misses = %d\t L2 DGetXs = %d\n",               $totalDWriteMisses, $totalSDGetXs);    }    printf("%-25s %9d %11.2f%%\n", DGetXs, $totalSDGetXs,            100.0 * &div($totalSDGetXs,$totalSRefs));    printf("%-25s %9d %11.2f%%\n", IGetMisses, $totalSIGetMisses,            100.0 * &div($totalSIGetMisses,$totalSIGets));    for ($cpu = 0; $cpu <= $numCpus; $cpu++) {        printf("  CPU %d %27.0lf %11.2lf%%\n", $cpu, $sIGetMisses[$cpu],                100.0 * &div($sIGetMisses[$cpu], $sIGets[$cpu]));    }    printf("%-25s %9d %11.2f%%\n", DGetMisses, $totalSDGetMisses,           100.0 * &div($totalSDGetMisses,$totalSDGets));    for ($cpu = 0; $cpu <= $numCpus; $cpu++) {        printf("  CPU %d %27.0lf %11.2lf%%\n", $cpu, $sDGetMisses[$cpu],                100.0 * &div($sDGetMisses[$cpu], $sDGets[$cpu]));    }        printf("%-25s %9d %11.2f%%\n", DGetXMisses, $totalSDGetXMisses,            100.0 * &div($totalSDGetXMisses,$totalSDGetXs));    for ($cpu = 0; $cpu <= $numCpus; $cpu++) {        printf("  CPU %d %27.0lf %11.2lf%%\n", $cpu, $sDGetXMisses[$cpu],                100.0 * &div($sDGetXMisses[$cpu], $sDGetXs[$cpu]));    }    printf("\n%-25s %9d %11.2f%%\n", "Upgrade Refs", $totalSUpgradeRefs, 100);    printf("%-25s %9d %11.2f%%\n", "Upgrade Misses", $totalSUpgradeMisses,            100.0 * &div($totalSUpgradeMisses,$totalSUpgradeRefs));    printf("\n%-25s %9d\n", "IGet NAKed Retries", $totalIGetRetries);    printf("%-25s %9d\n", "DGet NAKed Retries", $totalDGetRetries);    printf("%-25s %9d\n", "DGetX NAKed Retries", $totalDGetXRetries);    printf("%-25s %9d\n", "IGet MHT Retries", $totalSIGetMHTRetries);    printf("%-25s %9d\n", "DGet MHT Retries", $totalSDGetMHTRetries);    printf("%-25s %9d\n", "DGetX MHT Retries", $totalSDGetXMHTRetries);    printf("%-25s %9d\n", "DUGetX MHT Retries", $totalSDUGetXMHTRetries);}sub DO_PREFETCH_STATS {    printf("Prefetch Stats\n");    printf("**************\n\n");    $totalPrefs = $prefetches + $prefetchXs;    printf("%-25s %9s %12s\n", Operation, Count, Percentage);     printf("------------------------------------------------\n");    printf("%-25s %9d %9.1lf", "Total Prefetches", $totalPrefs, 100.0);    printf("\n%-25s %9d %9.1lf", "Prefetch", $prefetches,            100.0 * &div($prefetches,$totalPrefs));    printf("\n%-25s %9d %9.1lf", "Prefetch TLB Miss", $prefetchTLBMisses,            100.0*&div($prefetchTLBMisses,$prefetches));    printf("\n%-25s %9d %9.1lf", "Prefetch L1-Hits", $prefetchL1Hits,            100.0*&div($prefetchL1Hits,$prefetches));    printf("\n%-25s %9d %9.1lf", "Prefetch L2-Hits", $prefetchL2Hits,           100.0*&div($prefetchL2Hits,$prefetches));    printf("\n%-25s %9d %9.1lf", "Prefetch Merges", $prefetchMerges,           100.0*&div($prefetchMerges,$prefetches));    printf("\n%-25s %9d %9.1lf", "Prefetch Upgrades", $prefetchUpgrades,           100.0*&div($prefetchUpgrades,$prefetches));    printf("\n%-25s %9d %9.1lf", "Prefetch Stalls", $prefetchStalls,           100.0*&div($prefetchStalls,$prefetches));    printf("\n\n%-25s %9d %9.1lf", "Prefetch Exclusive", $prefetchXs,            100.0*&div($prefetchXs,$totalPrefs));    printf("\n%-25s %9d %9.1lf", "PrefetchX TLB Miss",            100.0*$prefetchXTLBMisses, &div($prefetchXTLBMisses,$prefetchXs));    printf("\n%-25s %9d %9.1lf", "PrefetchX L1-Hits", $prefetchXL1Hits,            100.0*&div($prefetchXL1Hits,$prefetchXs));    printf("\n%-25s %9d %9.1lf", "PrefetchX L2-Hits", $prefetchXL2Hits,           100.0*&div($prefetchXL2Hits,$prefetchXs));    printf("\n%-25s %9d %9.1lf", "PrefetchX Merges", $prefetchXMerges,           100.0*&div($prefetchXMerges,$prefetchXs));    printf("\n%-25s %9d %9.1lf", "PrefetchX Upgrades", $prefetchXUpgrades,           100.0*&div($prefetchXUpgrades,$prefetches));    printf("\n%-25s %9d %9.1lf", "PrefetchX Stalls", $prefetchXStalls,           100.0*&div($prefetchXStalls,$prefetches));}sub DO_MEMORY_STATS {    printf("Memory Stats\n");    printf("============\n");    printf("Memory System = $memSys\n");    printf("Sync Op Stall Time %9.2f\n", $syncOpStallTime);    if ($memSys eq "Uma") {        printf("Bonus -> used uma\n");    }#    print("Mem%d: Gets %d/%d Getx %d/%d Upgrades %d/%d wback %d rhints %d\n",}sub DO_SYNC_STATS {    printf("Sync Stats\n");    printf("==========\n\n");    printf("%-25s %9s %12s\n", Operation, Count, "Avg. Cycles");     printf("------------------------------------------------\n");    if ($locks != $statsLocks) {        printf("   Warning: lock counts (%d) don't match stats count (%d)\n",               $locks, $statsLocks);    }    if ($locks != $unlocks) {        printf("   Warning: lock counts (%d) don't match unlocks (%d)\n",               $locks, $unlocks);    }    if ($locks != 0) {        printf("%-25s %9d %12.2f\n", "Locks", $locks, $statsLockTime/$locks);    } else {        printf("%-25s %9d %12.2f\n", "Locks", $locks, 0);    }    for ($cpu=0; $cpu <= $numCpus; $cpu++) {        printf(" CPU %d\n", $cpu);        if ($locks[$cpu] != 0) {            printf("   Grabs   %24d %12.2f\n", $locks[$cpu],                    $statsLockTime[$cpu]/$locks[$cpu]);        } else {            printf("   Grabs   %24d %12.2f\n", $locks[$cpu], 0);        }        printf("   Retries %24d\n", $retries[$cpu]);    }    if ($barriers != $statsBarriers) {        printf("   Warning: barr counts (%d) don't match stats count (%d)\n",               $Locks, $statsBarriers);    }    if ($barriers != 0) {        printf("\n%-25s %9d %12.2f\n", "Barriers", $barriers,                $statsBarrTime/$barriers);    } else {        printf("\n%-25s %9d \n", "Barriers", $barriers, 0);     }    for ($cpu=0; $cpu <= $numCpus; $cpu++) {        printf(" CPU %d\n", $cpu);        if ($barriers[$cpu] != 0) {            printf("  Barriers %23d %12.2f\n", $barriers[$cpu],                   $statsBarrTime[$cpu]/$barriers[$cpu]);        }    }}

⌨️ 快捷键说明

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