Improve timing reports and register poly mul inputs
This commit is contained in:
82
run_tb.sh
82
run_tb.sh
@@ -120,6 +120,84 @@ execute_tcl() {
|
||||
# each <spec> = "snapshot:K:CASE". Launches all specs in parallel, waits,
|
||||
# then prints an ordered summary and returns nonzero if any job failed.
|
||||
PAR_BASE="${TMPDIR:-/tmp}/run_tb_par_$$"
|
||||
|
||||
print_timing_summary() {
|
||||
local logs=("$@")
|
||||
local found=0 log
|
||||
|
||||
for log in "${logs[@]}"; do
|
||||
if [ -f "$log" ] && grep -q '^TIME ' "$log"; then
|
||||
found=1
|
||||
fi
|
||||
done
|
||||
[ "$found" -eq 0 ] && return 0
|
||||
|
||||
echo ""
|
||||
echo "Timing summary (clk=20MHz, period=50ns)"
|
||||
printf " %-7s %-3s %-5s %10s %12s %12s %s\n" "OP" "K" "CASE" "cycles" "time_us" "time_ms" "log"
|
||||
for log in "${logs[@]}"; do
|
||||
[ -f "$log" ] || continue
|
||||
awk -v logfile="$log" '
|
||||
/^TIME / {
|
||||
k = ""; c = ""; op = ""; cycles = ""; runtime = "";
|
||||
for (i = 1; i <= NF; i++) {
|
||||
split($i, a, "=");
|
||||
if (a[1] == "K") k = a[2];
|
||||
else if (a[1] == "CASE") c = a[2];
|
||||
else if (a[1] == "OP") op = a[2];
|
||||
else if (a[1] == "cycles") cycles = a[2];
|
||||
else if (a[1] == "runtime") runtime = a[2];
|
||||
}
|
||||
if (runtime != "") {
|
||||
printf " %-7s %-3s %-5s %10d %12.3f %12.3f %s\n",
|
||||
op, k, c, cycles, runtime / 1000.0, runtime / 1000000.0, logfile;
|
||||
}
|
||||
}
|
||||
' "$log"
|
||||
done
|
||||
|
||||
local found_state=0
|
||||
for log in "${logs[@]}"; do
|
||||
if [ -f "$log" ] && grep -q '^ STATE ' "$log"; then
|
||||
found_state=1
|
||||
fi
|
||||
done
|
||||
[ "$found_state" -eq 0 ] && return 0
|
||||
|
||||
echo ""
|
||||
echo "State timing breakdown (clk=20MHz, period=50ns)"
|
||||
printf " %-7s %-3s %-5s %-12s %10s %12s\n" "OP" "K" "CASE" "STATE" "cycles" "time_us"
|
||||
for log in "${logs[@]}"; do
|
||||
[ -f "$log" ] || continue
|
||||
awk '
|
||||
/^TIME_BREAKDOWN / {
|
||||
k = ""; c = ""; op = "";
|
||||
for (i = 1; i <= NF; i++) {
|
||||
split($i, a, "=");
|
||||
if (a[1] == "K") k = a[2];
|
||||
else if (a[1] == "CASE") c = a[2];
|
||||
else if (a[1] == "OP") op = a[2];
|
||||
}
|
||||
next;
|
||||
}
|
||||
/^ STATE / {
|
||||
state = $2;
|
||||
cycles = "";
|
||||
time_ns = "";
|
||||
for (i = 1; i <= NF; i++) {
|
||||
split($i, a, "=");
|
||||
if (a[1] == "cycles") cycles = a[2];
|
||||
else if (a[1] == "time_ns") time_ns = a[2];
|
||||
}
|
||||
if (time_ns != "") {
|
||||
printf " %-7s %-3s %-5s %-12s %10d %12.3f\n",
|
||||
op, k, c, state, cycles, time_ns / 1000.0;
|
||||
}
|
||||
}
|
||||
' "$log"
|
||||
done
|
||||
}
|
||||
|
||||
run_xsim_jobs() {
|
||||
local mtag="$1" pgrep="$2" pmatch="$3"; shift 3
|
||||
local specs=("$@")
|
||||
@@ -146,12 +224,13 @@ run_xsim_jobs() {
|
||||
wait
|
||||
|
||||
# ordered summary + per-job log copy to /tmp/run_tb_<mtag>_k*_c*.log
|
||||
local fail=0 pf nf log
|
||||
local fail=0 pf nf log timing_logs=()
|
||||
for s in "${specs[@]}"; do
|
||||
IFS=: read -r snap k c <<< "$s"
|
||||
wd="$PAR_BASE/${mtag}_k${k}_c${c}"
|
||||
log="/tmp/run_tb_${mtag}_k${k}_c${c}.log"
|
||||
cp -f "$wd/run.out" "$log" 2>/dev/null
|
||||
timing_logs+=("$log")
|
||||
pf=$(grep -oE "$pgrep" "$log" | tail -1)
|
||||
nf=$(grep -c 'cannot be opened' "$log")
|
||||
echo " K=$k CASE=$c -> ${pf:-NORESULT} (file-not-found=$nf, log: $log)"
|
||||
@@ -162,6 +241,7 @@ run_xsim_jobs() {
|
||||
{ [ "$pf" = "$pmatch" ] && [ "$nf" -eq 0 ]; } || fail=1
|
||||
fi
|
||||
done
|
||||
print_timing_summary "${timing_logs[@]}"
|
||||
rm -rf "$PAR_BASE"
|
||||
return $fail
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user