WIP: UIC talk
parent
451d226376
commit
8c878d7097
|
@ -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 |
Loading…
Reference in New Issue