Reading data from memory is slow—about two orders of magnitude slower than the CPU's own compute speed. Prefetching is the technique of having the CPU guess which memory addresses will be accessed next, and pull the data into the cache ahead of time.
Traditional prefetchers rely on address patterns: if reading A is followed by reading A+64, the next access is predicted as A+64. But many data access patterns are irregular—linked-list traversal, graph neighbor access, sparse matrices—so the addresses simply never repeat.
ICP (arXiv:2605.15645, ISCA 2026) takes a different approach: instead of guessing addresses, it observes which instructions produced them. Even though memory addresses do not repeat, the instructions that generate those addresses often do. If you see instruction A produce an address, and instruction B then use that address as an offset to access another address, then the next time instruction A appears, you can predict what instruction B will access.
Results
- 14% faster than the current best prefetcher on SPEC CPU and GAP benchmarks
- Only 2.1KB of storage required—three orders of magnitude smaller than traditional methods
Open question
ICP depends on data dependencies between instructions. If the code is highly dynamic—JIT-compiled or self-modifying code—can these inter-instruction correlations still be captured reliably? The post leaves this unresolved.
---
References
1. Li, M., et al. (2026). *ICP: Exploiting Instruction Correlation for Prefetching Irregular Memory Accesses*. arXiv:2605.15645 [cs.AR]. (ISCA 2026) 2. Bera, R., et al. (2022). *Triangel: Memory Access Driven Prefetching*. ISCA 2022.