No. 146 / project of 147 on the ladder

Execute-prefetch predicate audit

introduces — shadow predicate attribution for execute-prefetch I-cache repair; audit-only rollback to P144 active policy

harden statelast run2026-05-07
signoff
  • DRCNOT RUN
  • LVSNOT RUN
  • antennaNOT RUN

P146 follows the negative result from P145. It rolls the active execute-prefetch repair policy back to the P144 one-word budget, then shadow-counts several candidate usefulness predicates.

checkresult
Verilator buildPASS
BusyBox userspace buildPASS
Linux image rebuilt with P146 initramfsPASS
BusyBox shell workload reaches P146-FILE-OKPASS
Aux-load queue full dropsPASS
Aux response errors/cancelsPASS
Hardened layoutNOT RUN
metricP144P145P146
post-load cycles219,161,535220,074,276220,667,218
shell window cycles64,192,83365,101,03465,663,039
retired instructions85,905,85586,210,82586,410,376
CPI2.55122.55272.5537
S_FETCH cycles7,601,8967,621,6607,642,687
S_MEM cycles29,215,06329,346,23029,435,054

P146 is a speed FAIL: 1,470,206 cycles slower than P144. Since the active policy is meant to match P144, this is an audit-cost/noise result rather than a candidate speedup.

predicateopportunitiesfillsfirst hitsrepeat hitsfirst+repeat / fill
seq_adjacent66,75420,552000.00%
word_not_last27,251,65726,593,038559,031181,1832.78%
uncompressed_not_last26,351,46425,694,746142,99814,8270.61%
predicted_not_taken25,113,20224,454,891537,689173,9812.91%
quiet_backend27,838,83724,720,301434,920141,7222.33%

The P145 seq_adjacent idea is dead in this run: 20,552 fills, zero later fetch hits. predicted_not_taken is the best single predicate, but 2.91% is still weak. That argues for either a strict composite guard or stopping this execute-prefetch repair thread.

classrepair fillsfirst hitsrepeat hitsfirst+repeat ratio
demand fetch1,025,603484,404332,68879.67%
execute prefetch29,178,276560,266181,2372.54%
load prefetch2,443,160134,96815,5866.16%
writeback prefetch409,477171,10654,02354.98%
aux prefetch110,23037,12924,25755.70%

The good repair sources have not changed: demand, writeback-prefetch, and aux-prefetch still have high payback. Execute-prefetch is still the low-payback bucket.

shell phases label P146 shell workload cycles 220,667,218 cpi 2.55
  1. kernel banner to /init 117,338,463 53.3%
  2. /init to shell banner 1,089,335 0.5%
  3. shell banner to first command 35,947,562 16.3%
  4. echo command 1,649 0%
  5. uname -a 1,987,210 0.9%
  6. ls /bin /usr/share 32,967,878 15%
  7. cat sample file 2,713,230 1.2%
  8. touch/write/cat/rm /tmp file 10,308,899 4.7%
  9. 8x ash loop with file I/O 17,683,493 8%
  10. final marker 680 0%
state breakdown label P146 execute-prefetch predicate audit workload cycles 220,667,218 cpi 2.55
  1. fetch 3.5% 7,642,687
  2. execute 39.2% 86,435,552
  3. mem 13.5% 29,715,088
  4. walker 1.2% 2,697,712
  5. writeback 39.2% 86,410,376
  6. mul/div 3.5% 7,764,087