#!/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 <