WIP: UIC talk

master
Oliver Kennedy 2024-04-10 17:46:47 -04:00
parent 451d226376
commit 8c878d7097
Signed by: okennedy
GPG Key ID: 3E5F9B3ABD3FDB60
2 changed files with 219 additions and 15 deletions

View File

@ -216,19 +216,235 @@ end
</section>
<section>
<h3>Workflow-style execution</h3>
<h3>Overview: Workflow-Style Notebooks</h3>
<ol>
<li>Microkernel Notebooks</li>
<li>Static Analysis</li>
<li>Microkernel Notebooks</li>
<li>Approximate Dependencies</li>
<li>Inter-Kernel Interop <span style="color: grey;">[Work In Progress]</span></li>
</ol>
</section>
<!------------------------- Static Analysis -------------------------->
<section>
<h3>Obtaining Cell Dependencies</h3>
<ul>
<li class="fragment" data-fragment-index="1">What could the cell read/write? <span class="fragment" data-fragment-index="5">[Static]</span></li>
<li class="fragment" data-fragment-index="2"><span class="fragment strike" data-fragment-index="4">What will the cell read/write?</span></li>
<li class="fragment" data-fragment-index="3">What did the cell read/write? <span class="fragment" data-fragment-index="5">[Dynamic]</span></li>
</ul>
</section>
<section>
<h3>Dynamic Dependencies</h3>
<%=
notebook() do
nbcell("if z:\n y = x + 2", idx: 2)
end
%>
<pre class="fragment">
0 LOAD_GLOBAL 0 (z)
2 POP_JUMP_IF_FALSE 12
4 LOAD_GLOBAL 1 (x)
6 LOAD_CONST 1 (2)
8 BINARY_ADD
10 STORE_GLOBAL 2 (y)
12 LOAD_CONST 0 (None)
14 RETURN_VALUE
</pre>
</section>
<section>
<h3>Dynamic Dependencies</h3>
<%=
notebook() do
nbcell("if z:\n y = x + 2", idx: 2)
end
%>
<pre>
0 LOAD_GLOBAL 0 (z)
2 POP_JUMP_IF_FALSE 12
12 LOAD_CONST 0 (None)
14 RETURN_VALUE
</pre>
</section>
<section>
<h3>Dynamic Dependencies</h3>
<%=
notebook() do
nbcell("if z:\n y = x + 2", idx: 2)
end
%>
<p><b>Reads: </b> $\{\;\textbf{z}\;\}$</p>
<p><b>Writes: </b> $\{\;\;\}$</p>
</section>
<section>
<h3>Static Dependencies</h3>
<%=
notebook() do
nbcell("if z:\n y = x + 2", idx: 2)
end
%>
<pre>
0 LOAD_GLOBAL 0 (z)
2 POP_JUMP_IF_FALSE 12
4 LOAD_GLOBAL 1 (x)
6 LOAD_CONST 1 (2)
8 BINARY_ADD
10 STORE_GLOBAL 2 (y)
12 LOAD_CONST 0 (None)
14 RETURN_VALUE
</pre>
</section>
<section>
<h3>Static Dependencies</h3>
<%=
notebook() do
nbcell("if z:\n y = x + 2", idx: 2)
end
%>
<pre>
0 LOAD_GLOBAL 0 (z) # <---- reads
2 POP_JUMP_IF_FALSE 12
4 LOAD_GLOBAL 1 (x) # <---- reads
6 LOAD_CONST 1 (2)
8 BINARY_ADD
10 STORE_GLOBAL 2 (y) # ----> writes
12 LOAD_CONST 0 (None)
14 RETURN_VALUE
</pre>
</section>
<section>
<h3>Static Dependencies</h3>
<%=
notebook() do
nbcell("if z:\n y = x + 2", idx: 2)
end
%>
<p><b>Could Read: </b> $\{\;\textbf{x},\;\textbf{z}\;\}$</p>
<p><b>Could Write: </b> $\{\;\textbf{y}\;\}$</p>
</section>
<section>
<h3>Static Dependencies</h3>
<%=
notebook() do
nbcell("my_data.filter( items )", idx: 2)
end
%>
<p><b>Could Read: </b> $\{\;\textbf{my_data},\;\textbf{items}\;\}$</p>
<p><b>Could Write: </b> $\{\;\;\}$</p>
</section>
<section>
<h3>Static Dependencies</h3>
<%=
notebook() do
nbcell("my_data.push( items )", idx: 2)
end
%>
<p><b>Could Read: </b> $\{\;\textbf{my_data},\;\textbf{items}\;\}$</p>
<p><b>Could Write: </b> $\{\;\textbf{my_data}\;\}$</p>
</section>
<section>
<%=
notebook() do
nbcell("my_data.filter( items )", idx: 2)
end
%>
vs
<%=
notebook() do
nbcell("my_data.push( items )", idx: 2)
end
%>
</section>
<section>
<img src="graphics/2024-04-12/LibraryStaticAnalysisDSL.png">
<attribution>"Bolt-on, Compact, and Rapid Program Slicing for Notebooks" (Shenkar et. al.; VLDB 2023)</attribution>
</section>
<section>
<h3>Dependency Needs</h3>
<ul>
<li class="fragment" data-fragment-index="1">Does a cell need to be re-run based on these changes?
<div class="fragment" data-fragment-index="2" style="font-weight: bold;">Dynamic sufficient (assuming deterministic cells).</div>
</li>
<li class="fragment" data-fragment-index="3">
<div class="fragment highlight-blue">
What is the minimal set of inputs a cell needs to run?
<div class="fragment" data-fragment-index="4" style="font-weight: bold;">Static required.</div>
</div>
</li>
<li class="fragment" data-fragment-index="5">Which cell last wrote to a variable?
<div class="fragment" data-fragment-index="6" style="font-weight: bold;">Dynamic sufficient.</div>
</li>
</ul>
</section>
<!------------------------- Microkernel Notebooks -------------------------->
<section>
If we have to have the ability to recover a state, does it have to be the same interpreter?
$$\{\;???\;\}$$
<%=
notebook() do
nbcell("if z:\n y = x + 2", idx: 2)
end
%>
<p class="fragment takeaway">We need to be able to recover the notebook from <i>any</i> state.</p>
</section>
<section>
@ -262,18 +478,6 @@ end
- 1-3 slides on spreadsheets
</section>
<!------------------------- Static Analysis -------------------------->
<section>
How to figure out dependencies
1. Run the code (exact, after the fact)
2. Static analysis (imprecise, incomplete)
</section>
<section>
Refer to Aditya's project w.r.t. static analysis
</section>
<!------------------------- Approximate Dependencies -------------------------->
<section>
How to figure out dependencies

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB