141 lines
3.9 KiB
Bash
141 lines
3.9 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Phase 75-3: C5+C6 Interaction Test (4-point matrix A/B)
|
||
|
|
|
||
|
|
echo "==========================================="
|
||
|
|
echo "Phase 75-3: C5+C6 Interaction Matrix Test"
|
||
|
|
echo "==========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Single build (both C5 and C6 code present, enabled via ENV)
|
||
|
|
echo "Building single binary (C5 + C6 code included)..."
|
||
|
|
HAKMEM_TINY_C5_INLINE_SLOTS=1 HAKMEM_TINY_C6_INLINE_SLOTS=1 \
|
||
|
|
make clean && make -j bench_random_mixed_hakmem > /tmp/phase75_3_build.log 2>&1
|
||
|
|
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo "Build FAILED"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo "Build: OK"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 4-point matrix test
|
||
|
|
declare -A results
|
||
|
|
|
||
|
|
for point in A B C D; do
|
||
|
|
case $point in
|
||
|
|
A) c5=0; c6=0; desc="Baseline (C5=0, C6=0)" ;;
|
||
|
|
B) c5=1; c6=0; desc="C5 Solo (C5=1, C6=0)" ;;
|
||
|
|
C) c5=0; c6=1; desc="C6 Solo (C5=0, C6=1)" ;;
|
||
|
|
D) c5=1; c6=1; desc="C5+C6 (C5=1, C6=1)" ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
echo "==========================================="
|
||
|
|
echo "Point $point: $desc"
|
||
|
|
echo "==========================================="
|
||
|
|
|
||
|
|
> /tmp/phase75_3_point_${point}.log
|
||
|
|
|
||
|
|
for i in {1..10}; do
|
||
|
|
HAKMEM_WARM_POOL_SIZE=16 \
|
||
|
|
HAKMEM_TINY_C5_INLINE_SLOTS=$c5 \
|
||
|
|
HAKMEM_TINY_C6_INLINE_SLOTS=$c6 \
|
||
|
|
./bench_random_mixed_hakmem 20000000 400 1 2>&1 | tee -a /tmp/phase75_3_point_${point}.log
|
||
|
|
done
|
||
|
|
|
||
|
|
# Extract average for this point
|
||
|
|
avg=$(grep "Throughput" /tmp/phase75_3_point_${point}.log | \
|
||
|
|
awk '{print $3}' | sed 's/ops\/s//' | \
|
||
|
|
awk '{s+=$1; n++} END {if(n>0) printf "%.2f", s/n/1000000}')
|
||
|
|
|
||
|
|
results[$point]=$avg
|
||
|
|
echo "Point $point average: $avg M ops/s"
|
||
|
|
echo ""
|
||
|
|
done
|
||
|
|
|
||
|
|
# Analysis
|
||
|
|
echo "==========================================="
|
||
|
|
echo "ANALYSIS: 4-Point Matrix Results"
|
||
|
|
echo "==========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
A=${results[A]}
|
||
|
|
B=${results[B]}
|
||
|
|
C=${results[C]}
|
||
|
|
D=${results[D]}
|
||
|
|
|
||
|
|
echo "A (baseline, C5=0, C6=0): $A M ops/s"
|
||
|
|
echo "B (C5=1, C6=0): $B M ops/s"
|
||
|
|
echo "C (C5=0, C6=1): $C M ops/s"
|
||
|
|
echo "D (C5=1, C6=1): $D M ops/s"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Individual deltas
|
||
|
|
B_vs_A=$(awk "BEGIN {printf \"%.2f\", (($B - $A) / $A) * 100}")
|
||
|
|
C_vs_A=$(awk "BEGIN {printf \"%.2f\", (($C - $A) / $A) * 100}")
|
||
|
|
D_vs_A=$(awk "BEGIN {printf \"%.2f\", (($D - $A) / $A) * 100}")
|
||
|
|
|
||
|
|
echo "Individual deltas vs A:"
|
||
|
|
echo " B vs A: +${B_vs_A}%"
|
||
|
|
echo " C vs A: +${C_vs_A}%"
|
||
|
|
echo " D vs A: +${D_vs_A}% (MAIN TARGET)"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Expected additive vs actual
|
||
|
|
expected=$(awk "BEGIN {printf \"%.2f\", $B + $C - $A}")
|
||
|
|
actual=$D
|
||
|
|
additivity=$(awk "BEGIN {printf \"%.2f\", (($expected - $actual) / $expected) * 100}")
|
||
|
|
|
||
|
|
echo "Additivity analysis:"
|
||
|
|
echo " Expected (B+C-A): $expected M ops/s"
|
||
|
|
echo " Actual (D): $actual M ops/s"
|
||
|
|
echo " Sub-additivity: ${additivity}% (diminishing returns)"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Final decision
|
||
|
|
echo "==========================================="
|
||
|
|
echo "DECISION GATE (D vs A)"
|
||
|
|
echo "==========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
if (( $(echo "$D_vs_A >= 3.0" | bc -l) )); then
|
||
|
|
decision="GO (昇格)"
|
||
|
|
action="Promote C5+C6 to core/bench_profile.h preset default"
|
||
|
|
elif (( $(echo "$D_vs_A >= 1.0" | bc -l) )); then
|
||
|
|
decision="NEUTRAL (freeze維持)"
|
||
|
|
action="Keep C5+C6 default OFF, evaluate in Phase 76"
|
||
|
|
else
|
||
|
|
decision="NO-GO (C5撤退)"
|
||
|
|
action="Revert C5 implementation, keep C6 only"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "Result: $decision"
|
||
|
|
echo "D vs A: +${D_vs_A}%"
|
||
|
|
echo "Action: $action"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Save decision to artifact
|
||
|
|
cat > /tmp/phase75_3_decision.txt <<DECISION
|
||
|
|
Phase 75-3 Decision Artifact
|
||
|
|
|
||
|
|
Point A (baseline): $A M ops/s
|
||
|
|
Point B (C5 solo): $B M ops/s
|
||
|
|
Point C (C6 solo): $C M ops/s
|
||
|
|
Point D (C5+C6): $D M ops/s
|
||
|
|
|
||
|
|
D vs A: +${D_vs_A}%
|
||
|
|
Decision: $decision
|
||
|
|
|
||
|
|
Expected additive: $expected M ops/s
|
||
|
|
Actual D: $actual M ops/s
|
||
|
|
Sub-additivity: ${additivity}%
|
||
|
|
DECISION
|
||
|
|
|
||
|
|
echo "Decision saved to: /tmp/phase75_3_decision.txt"
|
||
|
|
echo ""
|
||
|
|
echo "Logs:"
|
||
|
|
echo " - Build: /tmp/phase75_3_build.log"
|
||
|
|
for point in A B C D; do
|
||
|
|
echo " - Point $point: /tmp/phase75_3_point_${point}.log"
|
||
|
|
done
|
||
|
|
echo "==========================================="
|