📄 flstats.pl
字号:
sub DO_PROCESSOR_STATS { print STAT "Processor Statistics\n\n"; printf(STAT "\n%11s %8s %8s %8s %8s %8s %9s\n", "Busy", 'Pref', "Read", "Write", "Fence", "Synch", "Total"); printf(STAT "-------------------------------------------------------------------\n"); foreach $i (0..$numProcs-1) { $totalSynchronizationTime[$i] = $barWaitTimeArray[$i] + $lockWaitTimeArray[$i] + $spinLockWaitTimeArray[$i] + $pauseWaitTimeArray[$i] + $delayWaitTimeArray[$i] + $getsubWaitTimeArray[$i] + $waitForWaitTimeArray[$i]; $busy = (($executionTimeSinceReset[$i] - ($processorCacheStallTimeArray[$i] + $localReadMissLatencyArray[$i] + $remReadMissLatencyArray[$i] + $localReadMergeLatencyArray[$i] + $remReadMergeLatencyArray[$i] + $localReadConflictLatencyArray[$i] + $remReadConflictLatencyArray[$i] + $writeStallTimeArray[$i] + $syncWaitTimeArray[$i] + $totalSynchronizationTime[$i]))/ $executionTimeSinceReset[$i]) * 100.0; $busy_sum += $busy; printf(STAT "p%x %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %10.0lf\n", $i, $busy, ($processorCacheStallTimeArray[$i]/$executionTimeSinceReset[$i]) * 100.0, (($localReadMissLatencyArray[$i] + $remReadMissLatencyArray[$i] + $localReadMergeLatencyArray[$i] + $remReadMergeLatencyArray[$i] + $localReadConflictLatencyArray[$i] + $remReadConflictLatencyArray[$i])/$executionTimeSinceReset[$i]) * 100.0, ($writeStallTimeArray[$i]/$executionTimeSinceReset[$i]) * 100.0, ($syncWaitTimeArray[$i]/ $executionTimeSinceReset[$i]) * 100.0, ($totalSynchronizationTime[$i]/ $executionTimeSinceReset[$i]) * 100.0, $executionTimeSinceReset[$i]/$latencyFactor); } printf(STAT "\n"); printf(STAT "Avg. Processor Utilization: %4.1lf%%\n", $busy_sum/$numProcs); printf(STAT "\nPer Processor Invalidation Histogram\n\n"); if ($numProcs <= 16) { printf(STAT "%2s %5s %5s %4s %3s %3s %3s %3s %3s %3s %3s %3s %2s %2s %2s %2s %2s %3s\n", P, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, "16+"); } else { printf(STAT "%2s %5s %5d %4d %3d %3d %3d %3d %3d %3d %3d %3d %2d %2d %2d %2d %2d %3d+\n", P, 0, $numProcs/16, 2*$numProcs/16, 3*$numProcs/16, 4*$numProcs/16, 5*$numProcs/16, 6*$numProcs/16, 7*$numProcs/16, 8*$numProcs/16, 9*$numProcs/16, 10*$numProcs/16, 11*$numProcs/16, 12*$numProcs/16, 13*$numProcs/16, 14*$numProcs/16, 15*$numProcs/16, $numProcs); } printf(STAT "-----------------------------------------------------------------------\n"); foreach $i (0..$numProcs-1) { printf(STAT "p%x ", $i); $lastbin = 0; if ($numProcs <= 16) { foreach $j (0..1) { printf(STAT "%5d ", $invalHist{$i, $j}); $totalInvals += $invalHist{$i, $j} * $j; } foreach $j (2..2) { printf(STAT "%4d ", $invalHist{$i, $j}); $totalInvals += $invalHist{$i, $j} * $j; } foreach $j (3..10) { printf(STAT "%3d ", $invalHist{$i, $j}); $totalInvals += $invalHist{$i, $j} * $j; } foreach $j (11..19) { if ($j < 16) { printf(STAT "%2d ", $invalHist{$i, $j}); $totalInvals += $invalHist{$i, $j} * $j; } else { $lastbin += $invalHist{$i, $j}; } } } else { foreach $j (0..1) { $subtotal = 0; $binStart = 4*$j; $binEnd = ($numProcs/16) - 1 + (4*$j); foreach $k ($binStart..$binEnd) { $subtotal += $invalHist{$i, $k}; $totalInvals += $invalHist{$i, $k} * $k; } printf(STAT "%5d ", $subtotal); } foreach $j (2..2) { $subtotal = 0; $binStart = 4*$j; $binEnd = ($numProcs/16) - 1 + (4*$j); foreach $k ($binStart..$binEnd) { $subtotal += $invalHist{$i, $k}; $totalInvals += $invalHist{$i, $k} * $k; } printf(STAT "%4d ", $subtotal); } foreach $j (3..10) { $subtotal = 0; $binStart = 4*$j; $binEnd = ($numProcs/16) - 1 + (4*$j); foreach $k ($binStart..$binEnd) { $subtotal += $invalHist{$i, $k}; $totalInvals += $invalHist{$i, $k} * $k; } printf(STAT "%3d ", $subtotal); } foreach $j (11..19) { $subtotal = 0; $temp = ($numProcs/16) - 1 + (4*$j); $binStart = 4*$j; $binEnd = ($numProcs/16) - 1 + (4*$j); if ($binEnd < $numProcs) { foreach $k ($binStart..$binEnd) { $subtotal += $invalHist{$i, $k}; $totalInvals += $invalHist{$i, $k} * $k; } printf(STAT "%2d ", $subtotal); } else { foreach $k ($binStart..$binEnd) { $lastbin += $invalHist{$i, $k}; $totalInvals += $invalHist{$i, $k} * $k; } } } } printf(STAT "%2d ", $lastbin); printf(STAT "\n"); } printf(STAT "Total Invalidations = %d\n", $totalInvals); printf(STAT "\n%11s %8s %8s %8s %8s %8s %8s\n", "Barriers", "Locks", "Spin", "GetSub", "Delay", "Pause", "WaitFor"); printf(STAT "-----------------------------------------------------------------\n"); foreach $i (0..$numProcs-1) { if ($totalSynchronizationTime[$i] == 0) { next; } printf(STAT "p%x %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n", $i, ($barWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0, ($lockWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0, ($spinLockWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0, ($getsubWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0, ($delayWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0, ($pauseWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0, ($waitForWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0); } printf(STAT "\nHere merges are included in all colums\n"); printf(STAT "%14s %6s\n", "Insts", "CPI"); printf(STAT "--------------------------\n"); foreach $i (0..$numProcs-1) { printf(STAT "p%x %12.0lf %7.2lf\n", $i, $numInstructions[$i], $CPI[$i]); } printf(STAT "\n"); if ($localReadMisses + $remReadMisses + $localReadConflicts + $remReadConflicts != $processor_load_misses) { printf(STAT "WARNING: localReadMisses + remReadMisses != total\n"); printf(STAT "Total misses = %d, local = %d, remote = %d, merges = %d\n", $processor_load_misses, $localReadMisses, $remReadMisses, $localReadMerges + $remReadMerges); } if ($localWriteMisses + $remWriteMisses + $localWriteConflicts + $remWriteConflicts != ($processor_store_misses + $processor_upgrade_misses)) { printf(STAT "WARNING: localWriteMisses + remWriteMisses != total\n"); printf(STAT "Total misses = %d, local = %d, remote = %d, merges = %d\n", $processor_store_misses + $processor_upgrade_misses, $localWriteMisses, $remWriteMisses, $localWriteMerges + $remWriteMerges); } printf(STAT "Total Read Miss Stall Time = %d\n", ($localReadMissLatency + $remReadMissLatency)/$latencyFactor); printf(STAT "Local Read Miss Stall Time = %d\n", $localReadMissLatency/ $latencyFactor); printf(STAT "Remote Read Miss Stall Time = %d\n", $remReadMissLatency/ $latencyFactor); if ($processor_load_misses != 0) { printf(STAT "\nAvg Read Miss Latency = %d\n", ($localReadMissLatency + $remReadMissLatency)/ ($processor_load_misses * $latencyFactor)); } else { printf(STAT "Avg Read Miss Latency = 0\n"); } if ($localReadMisses == 0) { printf(STAT "Avg Local ReadMissLatency = 0\n"); } else { printf(STAT "Avg Local Read Miss Latency = %d\n", $localReadMissLatency/($localReadMisses * $latencyFactor)); } if ($remReadMisses == 0) { printf(STAT "Avg Remote Read Miss Latency = 0\n"); } else { printf(STAT "Avg Remote Read Miss Latency = %d\n", $remReadMissLatency/($remReadMisses * $latencyFactor)); } if ($processor_load_misses != 0) { printf(STAT "%-25s %.2lf\n", "Avg Read Bus ID Wait Time:", $readBusIDWaitTime/($processor_load_misses * $latencyFactor)); } else { printf(STAT "%-25s %.2lf\n", "Avg Read Bus ID Wait Time:", 0.0); } if (($processor_store_misses + $processor_upgrade_misses) > 0) { printf(STAT "%-25s %.2lf\n", "Avg Write Bus ID Wait Time:", $writeBusIDWaitTime/(($processor_store_misses + $processor_upgrade_misses) * $latencyFactor)); } else { printf(STAT "%-25s %.2lf\n", "Avg Write Bus ID Wait Time:", 0); } printf(STAT "Avg SysADBus Occupancy = %4.1lf%%\n", $sysADBusOccupancy_sum/ $numProcs); printf(STAT "Max SysADBus Occupancy = %4.1lf%%\n", $sysADBusOccupancy_max); if ($totalSysADReadRequests != 0) { printf(STAT "\nAvg Read-SysADBus Stall Time = %.2lf\n", $readSysADStallTime/($totalSysADReadRequests * $latencyFactor)); } else { printf(STAT "\nAvg Read-SysADBus Stall Time = %.2lf\n", 0.0); } if ($totalSysADWriteRequests != 0) { printf(STAT "Avg Write-SysADBus Stall Time = %.2lf\n", $writeSysADStallTime/($totalSysADWriteRequests * $latencyFactor)); } else { printf(STAT "Avg Write-SysADBus Stall Time = %.2lf\n", 0.0); } if ($totalSysADReplyRequests != 0) { printf(STAT "\nAvg Reply-SysADBus Stall Time = %.2lf\n", $replySysADStallTime/($totalSysADReplyRequests * $latencyFactor)); } else { printf(STAT "\nAvg Reply-SysADBus Stall Time = %.2lf\n", 0.0); } if ($totalSysADPIRequests != 0) { printf(STAT "Avg PI-SysAD Stall Time = %.2lf\n", $piSysADStallTime/($totalSysADPIRequests * $latencyFactor)); } else { printf(STAT "Avg PI-SysAD Stall Time = %.2lf\n", 0.0); } if ($HISTMODE) { printf(STAT "\nHistogram of Read misses\n"); if ($readHistMax != 0) { foreach $i (0 .. $#localReadHist) { printf(STAT "Bin %3d %9d %-22s\n", $i * 10, $localReadHist[$i] + $remReadHist[$i], "*"x((($localReadHist[$i]+ $remReadHist[$i])/$readHistMax)*30.0)); } } }# printf(STAT "\nHistogram of Remote Read misses\n");# foreach $i (0 .. $#remReadHist) {# printf(STAT "Bin %3d %9d\n", $i * 10, $remReadHist[$i]);# } if ($localReadMerges + $remReadMerges == 0) { printf(STAT "No Read Merges\n"); } else { printf(STAT "Total Read Merge Stall Time = %d\n", ($localReadMergeLatency + $remReadMergeLatency)/$latencyFactor); printf(STAT "Local Read Merge Stall Time = %d\n", $localReadMergeLatency/ $latencyFactor); printf(STAT "Remote Read Merge Stall Time = %d\n", $remReadMergeLatency/ $latencyFactor); printf(STAT "\nAvg Read Merge Latency = %d\n", ($localReadMergeLatency + $remReadMergeLatency)/ (($localReadMerges + $remReadMerges) * $latencyFactor)); if ($localReadMerges == 0) { printf(STAT "Avg Local ReadMergeLatency = 0\n"); } else { printf(STAT "Avg Local Read Merge Latency = %d\n", $localReadMergeLatency/($localReadMerges * $latencyFactor)); } if ($remReadMerges == 0) { printf(STAT "Avg Remote Read Merge Latency = 0\n"); } else { printf(STAT "Avg Remote Read Merge Latency = %d\n", $remReadMergeLatency/($remReadMerges * $latencyFactor)); } if ($HISTMODE) { printf(STAT "\nHistogram of Read merges\n"); foreach $i (0 .. $#localReadMergeHist) { printf(STAT "Bin %3d %9d %-22s\n", $i * 10, $localReadMergeHist[$i] + $remReadMergeHist[$i], "*"x((($localReadMergeHist[$i]+ $remReadMergeHist[$i])/$readMergeHistMax)*30.0)); } } } if ($localReadConflicts + $remReadConflicts == 0) { printf(STAT "\nNo Read Conflicts\n"); } else { printf(STAT "Total Read Conflict Stall Time = %d\n", ($localReadConflictLatency + $remReadConflictLatency)/$latencyFactor); printf(STAT "Local Read Conflict Stall Time = %d\n", $localReadConflictLatency/$latencyFactor); printf(STAT "Remote Read Conflict Stall Time = %d\n", $remReadConflictLatency/$latencyFactor); printf(STAT "\nAvg Read Conflict Latency = %d\n", ($localReadConflictLatency + $remReadConflictLatency)/ (($localReadConflicts + $remReadConflicts) * $latencyFactor)); if ($localReadConflicts == 0) { printf(STAT "Avg Local ReadConflictLatency = 0\n"); } else { printf(STAT "Avg Local Read Conflict Latency = %d\n", $localReadConflictLatency/($localReadConflicts * $latencyFactor)); } if ($remReadConflicts == 0) { printf(STAT "Avg Remote Read Conflict Latency = 0\n"); } else { printf(STAT "Avg Remote Read Conflict Latency = %d\n", $remReadConflictLatency/($remReadConflicts * $latencyFactor)); } if ($HISTMODE) { printf(STAT "\nHistogram of Read conflicts\n"); foreach $i (0 .. $#localReadConflictHist) { printf(STAT "Bin %3d %9d %-22s\n", $i * 10, $localReadConflictHist[$i] + $remReadConflictHist[$i], "*"x((($localReadConflictHist[$i]+ $remReadConflictHist[$i])/$readConflictHistMax)*30.0)); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -