Files
gem5-ilp-experiments/multiThreading/parse_smt.sh
Carlos Gutierrez cd69096346 initial commit
2025-09-21 01:17:26 -04:00

99 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
set -eu
# Configuration
ROOT="${1:-${PWD}/results}"
OUTPUT_FILE="${2:-}"
# Function to print header
print_header() {
printf "%-6s %8s %12s %12s %12s %12s %12s %12s %s\n" \
"Config" "IPC" "CPI" "L1D MPKI" "L1I MPKI" "L2 MPKI" "Br MPKI" "Cache Util%" "Per-thread Stats"
printf "%-6s %8s %12s %12s %12s %12s %12s %12s %s\n" \
"------" "---" "---" "---------" "---------" "---------" "---------" "---------" "---------------"
}
# Function to analyze a single configuration
analyze_config() {
local D="$1"
local S="$D/stats.txt"
local Cfg=$(basename "$D")
if [ ! -s "$S" ]; then
printf "%-6s %8s %12s %12s %12s %12s %12s %12s %s\n" \
"$Cfg" "-" "-" "-" "-" "-" "-" "-" "-" "RUNNING/EMPTY"
return
fi
awk -v CFG="$Cfg" '
BEGIN {
I=C=Dm=Im=L2m=Bm=Bl=0
L1D_hits=L1D_misses=L1I_hits=L1I_misses=L2_hits=L2_misses=0
delete T
}
/^simInsts/ {I=$2}
/system\.cpu\.numCycles/ {C=$2}
/system\.l1d\.overall_misses::total/ {Dm=$2}
/system\.l1i\.overall_misses::total/ {Im=$2}
/system\.l2\.overall_misses::total/ {L2m=$2}
/branchPred\.mispredictions/ {Bm=$2}
/branchPred\.lookups/ {Bl=$2}
/system\.l1d\.overall_hits::total/ {L1D_hits=$2}
/system\.l1i\.overall_hits::total/ {L1I_hits=$2}
/system\.l2\.overall_hits::total/ {L2_hits=$2}
/commit\.committedInsts::([0-9]+)/ {tid=$1; gsub(/.*::/,"",tid); T[tid]=$2}
END{
# Calculate metrics
ipc=(C>0)? I/C : 0;
cpi=(I>0)? C/I : 0;
dmpki=(I>0)? 1000*Dm/I : 0;
impki=(I>0)? 1000*Im/I : 0;
l2mpki=(I>0)? 1000*L2m/I : 0;
bmpki=(I>0)? 1000*Bm/I : 0;
# Calculate cache utilization
l1d_total=L1D_hits+L1D_misses;
l1d_util=(l1d_total>0)? (L1D_hits/l1d_total)*100 : 0;
# Format per-thread counts
out="";
thread_count=0;
for (t in T) {
if (thread_count>0) out = out " ";
out = out "t" t "=" T[t];
thread_count++;
}
if (thread_count==0) out="single-thread";
printf "%-6s %8.3f %12.2f %12.2f %12.2f %12.2f %12.2f %12.1f %s\n",
CFG, ipc, cpi, dmpki, impki, l2mpki, bmpki, l1d_util, out;
}' "$S"
}
# Main execution
if [ -n "$OUTPUT_FILE" ]; then
exec > "$OUTPUT_FILE"
fi
echo "SMT Performance Analysis Report"
echo "Generated: $(date)"
echo "Results directory: $ROOT"
echo ""
print_header
# Process all configuration directories
for D in "$ROOT"/*; do
[ -d "$D" ] || continue
analyze_config "$D"
done | sort
echo ""
echo "Legend:"
echo " IPC = Instructions Per Cycle"
echo " CPI = Cycles Per Instruction"
echo " MPKI = Misses Per Kilo Instructions"
echo " Cache Util% = L1D Cache Hit Rate"
echo " Per-thread Stats = Instructions committed per thread"