summaryrefslogtreecommitdiff
path: root/docs/2026_REBASE/slides.js
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-05 15:38:06 -0700
committerCliff Click <cliffc@acm.org>2026-10-05 15:38:06 -0700
commit81b654d76444d747fdf1d053760e507b50f26e18 (patch)
tree594fa806fc31d848f172d0413de0e431fde6e22a /docs/2026_REBASE/slides.js
parent3b8ad2977ef3911aed7c681037e4640dca59749b (diff)
downloadSimple-81b654d76444d747fdf1d053760e507b50f26e18.tar.gz
Simple-81b654d76444d747fdf1d053760e507b50f26e18.zip
Small peep to drop simple store-updates out of loops
Diffstat (limited to 'docs/2026_REBASE/slides.js')
-rw-r--r--docs/2026_REBASE/slides.js6
1 files changed, 3 insertions, 3 deletions
diff --git a/docs/2026_REBASE/slides.js b/docs/2026_REBASE/slides.js
index de888f13..9ed9729e 100644
--- a/docs/2026_REBASE/slides.js
+++ b/docs/2026_REBASE/slides.js
@@ -116,7 +116,7 @@
id:'memory',label:'9–17b · Values, memory, scheduling',section:'Chapters 9–17b',minutes:5,steps:2,demo:'aliases',
body:state=>'<h2>Memory is dataflow, too.</h2><div class="demo-layout"><div>'+source(state.demo||'aliases',true)+'<div class="demo-tabs"><button data-demo="aliases">Short alias example</button><button data-demo="memory">Array + object loops</button></div></div><div class="demo-right"><p class="thesis">Partition memory into<br>equivalence classes.</p>'+memoryPartition(state)+states(state.demo==='memory'?[
'<div class="formula">data[i]<small>Array element memory is another slice.</small></div>',
- '<div class="formula">t.sum / t.visits<small>Separate field classes carry separate dependencies.</small></div>',
+ '<div class="formula">t.sum / t.visits<small>Carry values around the loop; store the final totals once.</small></div>',
'<div class="formula">4*arg + 10<small>Runtime result; the graph still contains loops.</small></div>'
]:[
'<div class="formula">p.x → Pair.x<small>All Pair.x fields share one equivalence class.</small></div>',
@@ -127,9 +127,9 @@
'<b>0:00–0:45:</b> Briefly show Domains and Memory types, then return to Examples. Use the partition picture: Pair.x, Pair.y, and the rest are disjoint equivalence classes whose union is whole memory. The classes group locations across all instances, not one class per object.',
'<b>0:45–1:15:</b> Run <code>make -C chapter17b view</code>. Paste Short alias example. Show that p.y changes while p.x does not, and the result becomes zero.',
'<b>1:15–3:15:</b> Trace the Loads and Store through their field equivalence classes. Same-class accesses may alias; different classes cannot. MemMerge recombines the slices without emitting an instruction. Explain why writing p.y does not clobber p.x. Read-only access would not make a Load independent of memory.',
- '<b>3:15–4:30:</b> Switch back to this slide, select Array + object loops, Copy code, then compile it in the same viewer. Jump Last, fold/unfold the loops, and inspect loop-carried memory and the sum and visits aliases.',
+ '<b>3:15–4:30:</b> Switch back to this slide, select Array + object loops, Copy code, then compile it in the same viewer. Jump Last: array writes still carry memory around the first loop. The second loop carries sum and visits as scalar Phis; their stores move after the loop and their memory Phis disappear.',
'<b>4:30–5:00:</b> GCM uses these dependencies to choose legal placements; it does not guess ordering from source order. Return to slides.'
- ],'<p>The graph viewer captures parsing/optimization/type checking, not GCM execution. The large graph has 54 nodes at its final checkpoint; do not step through all 319 frames.</p><p><b>Research context:</b> Diwan, McKinley, and Moss, <i>Type-Based Alias Analysis</i>, PLDI 1998, sections 3.5–3.6 (p. 113). A runtime upper bound left at most an average 2.5% more heap loads eliminable beyond their analysis on eight Modula-3 benchmarks. This is a load-elimination bound, not a speedup percentage. More static opportunities did not translate into corresponding runtime gains. This supports choosing useful, inexpensive alias distinctions; it does not establish that this exact equivalence-class scheme is optimal for Java. The study is a close match to the recalled oracle experiment, not an identified IBM/Java paper.</p>')
+ ],'<p>The graph viewer captures parsing/optimization/type checking, not GCM execution. The large graph has 52 nodes at its final checkpoint; do not step through all 333 frames.</p><p><b>Research context:</b> Diwan, McKinley, and Moss, <i>Type-Based Alias Analysis</i>, PLDI 1998, sections 3.5–3.6 (p. 113). A runtime upper bound left at most an average 2.5% more heap loads eliminable beyond their analysis on eight Modula-3 benchmarks. This is a load-elimination bound, not a speedup percentage. More static opportunities did not translate into corresponding runtime gains. This supports choosing useful, inexpensive alias distinctions; it does not establish that this exact equivalence-class scheme is optimal for Java. The study is a close match to the recalled oracle experiment, not an identified IBM/Java paper.</p>')
},
{
id:'inline',label:'18 · Functions and Calls',section:'Chapter 18',minutes:5,steps:2,demo:'inline',