<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Opinions on Software.</title>
      <link>https://deferworks.org</link>
      <description>Ramblings on databases, compilers and software matters.</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://deferworks.org/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Execution Paradigms Are Schedules</title>
          <pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate>
          <link>https://deferworks.org/posts/paradigms-are-schedules/</link>
          <guid>https://deferworks.org/posts/paradigms-are-schedules/</guid>
          <description xml:base="https://deferworks.org/posts/paradigms-are-schedules/">&lt;p&gt;In the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;deferworks.org&#x2F;posts&#x2F;inkfuse-cps&#x2F;&quot;&gt;last post&lt;&#x2F;a&gt; I argued that the difference
between a HyPer-style compiled pipeline and Inkfuse’s precompiled
fragments comes down to which continuations get reified before
runtime and which get inlined away. The post itself sparked a discussion
with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;transactional.blog&#x2F;&quot;&gt;Alex Miller&lt;&#x2F;a&gt; about what an optimal IR
for query compilers would look like, this discussion made me look at some
old notes I wrote down a while ago while working on &lt;code&gt;raptor&lt;&#x2F;code&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-raptor-1&quot;&gt;&lt;a href=&quot;#fn-raptor&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, &lt;code&gt;raptor&lt;&#x2F;code&gt; is
a query compiler I started working on a while ago based on the same ideas
as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.lingo-db.com&#x2F;&quot;&gt;Lingo&lt;&#x2F;a&gt; it leverages &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mlir.llvm.org&#x2F;&quot;&gt;MLIR&lt;&#x2F;a&gt;
to build a tower of IRs as dialects. You first lower a logical plan to the
&lt;code&gt;relalg&lt;&#x2F;code&gt; dialect which maps closely to logical plan nodes, for example
here’s what the aggregation operator looks like in MLIR’s tablegen constructs.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; RelAlg_Op&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; mnemonic&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; list&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;Trait&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; traits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    :&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Op&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;RelAlg_Dialect&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; mnemonic&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; traits&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;def RelAlg_AggregationOp : RelAlg_Op&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;aggregation&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    SingleBlockImplicitTerminator&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;ReturnOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let summary &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;Group and aggregate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let description &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Groups tuples by the grouping columns &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt; computes aggregates.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        The region specifies the aggregate computations.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Example:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;        %&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; relalg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;aggregation&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            groupby &lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;@key&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            [&lt;&#x2F;span&gt;&lt;span&gt;#relalg&lt;&#x2F;span&gt;&lt;span&gt;.coldef&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;@total : i64&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            (&lt;&#x2F;span&gt;&lt;span&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;tuple&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;: !&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;relalg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #D2A6FF);&quot;&gt;tuple&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;            %&lt;&#x2F;span&gt;&lt;span&gt;val &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; relalg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;getcol&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt;tuple @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;@value : i64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;            %&lt;&#x2F;span&gt;&lt;span&gt;sum &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; relalg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;aggrfn&lt;&#x2F;span&gt;&lt;span&gt; sum &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;val : &lt;&#x2F;span&gt;&lt;span&gt;i64 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; i64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            relalg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;return&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt;sum : i64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;span&gt; : &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;relalg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;tuplestream&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let arguments &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;ins&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        RelAlg_TupleStreamType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$input&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ArrayAttr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$groupByColumns&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ArrayAttr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$computedColumns&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    )&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let results &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;outs RelAlg_TupleStreamType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$result&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let regions &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;region SizedRegion&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$aggregates&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let assemblyFormat &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        $input `groupby` $groupByColumns $computedColumns $aggregates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        attr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;dict `:`&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;$result&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The above dialect is then lowered to the suboperator dialect &lt;code&gt;subop&lt;&#x2F;code&gt; which
you can think of as one tier lower.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;def SubOp_LoopOp : SubOp_Op&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;loop&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    SingleBlockImplicitTerminator&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;subop::YieldOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let summary &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;Loop over tuples with carry values&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let description &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Execute the body&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; each tuple&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; threading carry values through&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        the &lt;&#x2F;span&gt;&lt;span&gt;loop&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt; Used&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; aggregations &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt; running computations.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let arguments &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;ins&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        SubOp_TupleStreamType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$input&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Variadic&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;AnyType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$initCarry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    )&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let results &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;outs Variadic&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;AnyType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$finalCarry&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let regions &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;region SizedRegion&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$body&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let assemblyFormat &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        $input `carry` `&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;` $initCarry `&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;$initCarry&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; `&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;` $body&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        attr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;dict `:`&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;$input&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; `&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;$finalCarry&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;def SubOp_BufferType : SubOp_Type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;Buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let summary &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;A mutable buffer for storing tuples&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let description &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A buffer is a &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;mutable&lt;&#x2F;span&gt;&lt;span&gt; container that can hold &lt;&#x2F;span&gt;&lt;span&gt;tuples&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt; Used&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; for&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        materializing intermediate results &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt; building hash tables.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let parameters &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;ins ArrayRefParameter&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;mlir::Type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$columnTypes&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let assemblyFormat &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;`&amp;lt;` $columnTypes `&amp;gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;def SubOp_HashIndexType : SubOp_Type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;HashIndex&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;hashindex&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let summary &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;A hash index over a buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let description &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Provides hash&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;based access to tuples in a &lt;&#x2F;span&gt;&lt;span&gt;buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt; The&lt;&#x2F;span&gt;&lt;span&gt; key types&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        determine which columns are used&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; hashing.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let parameters &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;ins&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ArrayRefParameter&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;mlir::Type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$keyTypes&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ArrayRefParameter&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;mlir::Type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;$valueTypes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    )&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    let assemblyFormat &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;`&amp;lt;` `keys` `:` $keyTypes `,` `values` `:` $valueTypes `&amp;gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The final conversion step lowers &lt;code&gt;subop&lt;&#x2F;code&gt; to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mlir.llvm.org&#x2F;docs&#x2F;Dialects&#x2F;SCFDialect&#x2F;&quot;&gt;&lt;code&gt;scf&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
which is another tier lower and can be lowered to actual LLVM IR which
you can ship off to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;llvm.org&#x2F;docs&#x2F;ORCv2.html&quot;&gt;Orc&lt;&#x2F;a&gt; to get machine
code.&lt;&#x2F;p&gt;
&lt;p&gt;Of course as elegant as this looks there’s a lot of hidden details notably
you need to scaffold some sort of runtime that gives you all the nitty gritty
stuff your query execution code needs. For example you need to track lifetimes
of Arrow buffers that represent your columnar data around, you need to expose
bindings to some sort of allocator to handle buffers and so on.&lt;&#x2F;p&gt;
&lt;p&gt;My theory on query execution is that if two engines that look nothing alike are the same program with different
decisions about where continuations live, then “vectorized” and “compiled” and “hybrid” are not rival architectures
so much as different points in some space, and it should be possible to name the axes of that space.&lt;&#x2F;p&gt;
&lt;p&gt;The reason I am bringing this up is that my notes also referred to a concept I initially described as
&lt;em&gt;sub-operator DAG + edge-located schedules&lt;&#x2F;em&gt; and since we can safely assume all operator DAGs are more
or less the same then the axes of the design space of query execution come down to what schedules you’re
picking or specializaing for.&lt;&#x2F;p&gt;
&lt;p&gt;This post is an attempt to name these axes. The claim is that the execution paradigms we build systems
around are &lt;em&gt;schedules&lt;&#x2F;em&gt; of one declarative suboperator program&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-program-1&quot;&gt;&lt;a href=&quot;#fn-program&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and that the schedule lives
on the edges of the plan rather than the nodes. But I also want to keep the claim from staying too abstract
so in this post I also describe a small enough compiler that represents the IR, schedules
a fragments library and a JIT. The full compiler can be found in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;deferworks.org&#x2F;code&#x2F;schedules.py&quot;&gt;schedules.py&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;charting-the-design-space-of-query-execution&quot;&gt;Charting the design space of query execution&lt;&#x2F;h2&gt;
&lt;p&gt;The design space of query execution has mostly been charted by
building one system per point. MonetDB&#x2F;X100 gave us vectorized
interpretation, HyPer gave us data-centric compilation and for a
decade they were treated as being separate approaches with different
trade-offs Kersten et al.’s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;db.cs.cmu.edu&#x2F;papers&#x2F;2018&#x2F;p2209-kersten.pdf&quot;&gt;comparison&lt;&#x2F;a&gt;
showed that which one wins depends mostly on the workload. Since then there has
been more hybrid designs like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol11&#x2F;p1-menon.pdf&quot;&gt;ROF&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cs.cit.tum.de&#x2F;fileadmin&#x2F;w00cfj&#x2F;dis&#x2F;papers&#x2F;inkfuse.pdf&quot;&gt;Inkfuse&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The most serious attempt to chart the space rather than add another point to it comes
from Gubner and Boncz &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol14&#x2F;p1067-gubner.pdf&quot;&gt;VOILA&lt;&#x2F;a&gt; is a DSL
that describes what an operator does without pinning down the order or style in which
the operations run; from one VOILA program its backends can generate thousands of &lt;em&gt;flavors&lt;&#x2F;em&gt;: vectorized,
data-centric, and many hybrids in between that nobody had bothered to hand-build.
The follow-up &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vldb.org&#x2F;pvldb&#x2F;vol16&#x2F;p829-boncz.pdf&quot;&gt;Excalibur&lt;&#x2F;a&gt;, takes the next
step: if there are thousands of flavors and no static cost model can robustly pick among
them, search at runtime. Excalibur encodes a point in the space as a sequence of
mutations, casts exploration as a multi-armed bandit problem, and switches flavors mid-query.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;algorithms-schedules&quot;&gt;Algorithms + Schedules&lt;&#x2F;h2&gt;
&lt;p&gt;Let’s take a brief detour into the world of specialized compilers and talk about
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cacm.acm.org&#x2F;research&#x2F;halide&#x2F;&quot;&gt;Halide&lt;&#x2F;a&gt;. Halide split image pipelines into
an &lt;em&gt;algorithm&lt;&#x2F;em&gt; which says what each stage computes and a &lt;em&gt;schedule&lt;&#x2F;em&gt;, which says
where and when values are computed and stored: the loop order, the tiling, what gets fused into
its consumer and what gets materialized into a buffer. This approach allows you to turn
the problem from “rewrite the program until it is fast” into “search a space of schedules for a fixed program”
with the compiler guaranteeing that every schedule computes the same thing&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-legality-1&quot;&gt;&lt;a href=&quot;#fn-legality&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Query execution already has the algorithm half think back to Bandle and Giceva’s
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol14&#x2F;p2483-bandle.pdf&quot;&gt;sub-operator approach&lt;&#x2F;a&gt; and Jungmair and Giceva’s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol16&#x2F;p3461-jungmair.pdf&quot;&gt;declarative
sub-operators&lt;&#x2F;a&gt; decompose relational
operators into small reusable pieces scatter,gather, scan, fold, hash-partition and so on
which stop prescribing how they execute a declarative suboperator DAG says which values
flow where and nothing else.&lt;&#x2F;p&gt;
&lt;p&gt;In what follows we will mainly look at Q6 from TPC-H which is simple enough to write
a small compiler around but contains enough details to make this interesting.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;select&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; sum&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;l_extendedprice &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; l_discount) &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;as&lt;&#x2F;span&gt;&lt;span&gt; revenue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; lineitem&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt; l_shipdate &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;1994-01-01&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;  and&lt;&#x2F;span&gt;&lt;span&gt; l_shipdate &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;1995-01-01&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;  and&lt;&#x2F;span&gt;&lt;span&gt; l_discount &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;between&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;05&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; and&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;07&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;  and&lt;&#x2F;span&gt;&lt;span&gt; l_quantity &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 24&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We will represent suboperators as frozen dataclasses and the query plan will be just a list.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; Filter based on an operator technically we want to pass in a predicate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; but to keep things simple we will just pass-in some comparison operations.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;dataclass&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #BFBDB6);&quot;&gt;frozen&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Filter&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    op&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; &amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;lt;=&amp;quot;, &amp;quot;&amp;gt;=&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    lhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;     #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; column name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    rhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; object&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; int constant or column name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;dataclass&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #BFBDB6);&quot;&gt;frozen&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Map&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    op&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span&gt;lhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span&gt;rhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; object&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    out&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;     #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; name of the produced column&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; Fold should allow arbitrary operations but again for simplicity we just assume&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; summation.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;dataclass&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #BFBDB6);&quot;&gt;frozen&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Fold&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    col&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;     #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; running sum of this column&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; This is the query plan as in sub-operator representation.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Q6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;    Filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;shipdate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 8766&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; 1994-01-01&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;    Filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;shipdate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 9131&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; 1995-01-01&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;    Filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;discount&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;    Filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;discount&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;    Filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;quantity&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 24&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;    Map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;extprice&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;discount&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;revenue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;    Fold&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;revenue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Note what is absent. There are no loops, no batches, no buffers and no mention of code generation
instead everything is declarative and &lt;code&gt;Q6&lt;&#x2F;code&gt; just says which values flow where and nothing else
which is what makes it an algorithm in Halide’s sense.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scan(lineitem) ── e1 ──&amp;gt; filter ── e2 ──&amp;gt; map(price × disc) ── e3 ──&amp;gt; fold(sum)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;location-scheduling&quot;&gt;Location Scheduling&lt;&#x2F;h2&gt;
&lt;p&gt;My proposal is that the schedule lives on those edges and we annotate each one with a tuple
composed of a &lt;em&gt;data location&lt;&#x2F;em&gt; e.g. a register, a cache-resident buffer of some capacity, memory, a
&lt;em&gt;representation&lt;&#x2F;em&gt; (dense vector, selection vector, on down to whatever your engine speaks)
and a &lt;em&gt;granularity&lt;&#x2F;em&gt; (one tuple, a vector of 1024, a morsel). In code we can represent an annotation and a
schedule as:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;dataclass&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #BFBDB6);&quot;&gt;frozen&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Edge&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    loc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; &amp;quot;reg&amp;quot; | &amp;quot;buf&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    rep&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; &amp;quot;dense&amp;quot; | &amp;quot;sel&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;dataclass&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #BFBDB6);&quot;&gt;frozen&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Schedule&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    edges&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; tuple&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;        #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; one Edge between each pair of adjacent ops&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    vector&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; int&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1024&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tier&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; str&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; &amp;quot;auto&amp;quot; | &amp;quot;precompiled&amp;quot; | &amp;quot;jit&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We can then take the different paradigms we talked about before as just specializations and
describe them as functions:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hyper&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; fuse_all&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;Q6&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;         #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; every edge Edge(&amp;quot;reg&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vec&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;   =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; stage_all&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;Q6&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;        #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; every edge Edge(&amp;quot;buf&amp;quot;, &amp;quot;dense&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rof&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;   =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; stage_at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;hyper&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; hyper with one edit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;stage_at&lt;&#x2F;code&gt; is the most interesting one because it inserts a boundary by demoting an
edge from &lt;code&gt;reg&lt;&#x2F;code&gt; to &lt;code&gt;buf&lt;&#x2F;code&gt; which is what ROF does via pipeline buffers in between fused blocks.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; stage_at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; rep&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;Demote one edge from reg to buf. ROF is one application of this.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    edges&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; list&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;edges&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    edges&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; Edge&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rep&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; replace&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #BFBDB6);&quot;&gt; edges&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt;tuple&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;edges&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The paradigms that we’ve been describing end up being just schedule assignments to the plan
we drew above.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hyper:      e1: reg        e2: reg        e3: reg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vec:        e1: buf(1024)  e2: buf(1024)  e3: buf(1024)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rof:        e1: reg        e2: buf(1024)  e3: reg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here is what the annotations mean, as the code each row should compile down to. With
every edge in &lt;code&gt;reg&lt;&#x2F;code&gt;, values flow between suboperators as local variables and the whole
pipeline is one loop:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;revenue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;n&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;shipdate&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 8766&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;shipdate&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;  9131&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;discount&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;discount&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; not&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;quantity&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;  24&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;   continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    revenue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; extprice&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; discount&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;e1&lt;&#x2F;code&gt; and &lt;code&gt;e2&lt;&#x2F;code&gt; appear nowhere: an edge in &lt;code&gt;reg&lt;&#x2F;code&gt; is a value that is never stored anywhere
nameable the continuation between suboperators inlined, and it is what Hyper’s codegen
produces as LLVM IR.&lt;&#x2F;p&gt;
&lt;p&gt;With every edge in &lt;code&gt;buf&lt;&#x2F;code&gt;, each suboperator is its own loop and the edges are the lists between the loops:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;e1_price&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; e1_disc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;n&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;                    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; filter writes survivors into e1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; passes_predicate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        e1_price&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;extprice&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        e1_disc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;discount&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;e2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; zip&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;e1_price&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; e1_disc&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; map drains e1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;revenue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; sum&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;e2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;                                 #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; fold drains e2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;One benefit of these loops is that there is nothing specific to Q6; it can be compiled once
and reused by any query, which is similar to Inkfuse’s fragments. Do note that each boundary
introduces a copy which isn’t the case in the fused version.&lt;&#x2F;p&gt;
&lt;p&gt;Inkfuse corresponds to the all-buf row, with the difference that its fragments are precompiled
instead of interpreted while Copy-and-patch keeps the boundary in registers: each stencil
ends with a tail call that passes its outputs in fixed registers to the next stencil, so the blocks
are precompiled but the edge between them is reg. This of course requires using the GHC calling convention
if you want to get a good idea about Copy-and-patch I recommend Alex’s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;transactional.blog&#x2F;copy-and-patch&#x2F;how-it-works&quot;&gt;article&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;How do we define a &lt;em&gt;region&lt;&#x2F;em&gt; ? Well we can define a region as the maximal tiling of sub-operators connected
by &lt;code&gt;reg&lt;&#x2F;code&gt; edges so building a region is just about splitting the pipeline at &lt;code&gt;buf&lt;&#x2F;code&gt; edges.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; regions&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;ops&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; sched&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    out&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; e&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; enumerate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;edges&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; e&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;loc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;buf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            out&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    out&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;ops&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;hyper&lt;&#x2F;code&gt; produces one region of seven suboperators, &lt;code&gt;vec&lt;&#x2F;code&gt; produces seven regions of one, and &lt;code&gt;rof&lt;&#x2F;code&gt; produces two
i.e the five filters fused, then map and fold fused. The actual fusion structure is not a property anyone
states we just derive it from where the buffers are.&lt;&#x2F;p&gt;
&lt;p&gt;There is a fourth annotation that has no Halide analog and it applies to regions rather
than edges which I will call &lt;em&gt;tiering&lt;&#x2F;em&gt;. A good way to think about tiering is how V8 for
example uses &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;v8.dev&#x2F;blog&#x2F;maglev&quot;&gt;4 tiers of compilers&lt;&#x2F;a&gt; depending on different heuristics.
We can think of tiering in our case not in the context of JIT thresholds or hotness but instead
where the code for a region comes from in the baseline case we interpret it out of a library of single-node primitives
or look it up in a library of precompiled multi-node fragments or compile it for this query.&lt;&#x2F;p&gt;
&lt;p&gt;I think this allows us to answer the axis jamii called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.scattered-thoughts.net&#x2F;writing&#x2F;a-missing-tier-for-query-compilers&#x2F;&quot;&gt;the missing tier for query compilers&lt;&#x2F;a&gt;,
in terms of pipeline boundaries. Inkfuse ties the two together: a fragment is defined by both
its boundary and the fact that it is precompiled. Keeping tier separate from the edge annotations means
you can change one without the other: swap a JIT region for an equivalent precompiled block without touching
the buffers (this is what a fragment cache does), or move a buffer without changing how the code is produced
which is what ROF does.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;two-pipelines-and-a-join&quot;&gt;Two pipelines and a join&lt;&#x2F;h2&gt;
&lt;p&gt;Q6 is a single straight pipeline, which is enough to introduce the
coordinates but not enough to stress them the scheduling questions people
actually argue about show up around joins, so before building the
tiers it is worth seeing what a join looks like in this notation.
TPC-H Q14:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;select&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;00&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; sum&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;case&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; when&lt;&#x2F;span&gt;&lt;span&gt; p_type &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;like&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;PROMO%&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;                         then&lt;&#x2F;span&gt;&lt;span&gt; l_extendedprice &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; l_discount)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;                         else&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; end&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;             &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; sum&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;l_extendedprice &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; l_discount)) &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;as&lt;&#x2F;span&gt;&lt;span&gt; promo_revenue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; lineitem, part&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt; l_partkey &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; p_partkey&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;  and&lt;&#x2F;span&gt;&lt;span&gt; l_shipdate &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;1995-09-01&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;  and&lt;&#x2F;span&gt;&lt;span&gt; l_shipdate &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;1995-10-01&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Decomposed into suboperators, Q14 is two pipelines. Jungmair’s IR and
Excalibur’s low-level plan both break a hash join apart in roughly
this way:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;build: scan(part) ── b1 ──&amp;gt; insert(ht)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;probe: scan(lineitem) ── e1 ──&amp;gt; filter(shipdate) ── e2 ──&amp;gt; probe(ht)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         ── e3 ──&amp;gt; gather(p_type) ── e4 ──&amp;gt; map(promo?, revenue) ── e5 ──&amp;gt; fold(sums)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;insert&lt;&#x2F;code&gt; builds a hash table keyed on &lt;code&gt;p_partkey&lt;&#x2F;code&gt;. The probe pipeline
cannot start until the build has finished, so &lt;code&gt;ht&lt;&#x2F;code&gt; is not an edge
between the pipelines; it is shared state, and the build&#x2F;probe
dependency is what pipeline-oriented compilers call a pipeline
breaker. On the probe side, &lt;code&gt;probe&lt;&#x2F;code&gt; looks up &lt;code&gt;l_partkey&lt;&#x2F;code&gt; in the table
and &lt;code&gt;gather&lt;&#x2F;code&gt; fetches &lt;code&gt;p_type&lt;&#x2F;code&gt; out of the matched row. A monolithic
HashJoin operator does both steps internally. Splitting them apart
matters because the gather is a dependent load per matching row,
usually a cache miss, and once it is a separate node the schedule can
decide where it runs and on how many rows at a time.&lt;&#x2F;p&gt;
&lt;p&gt;The edge to look at is &lt;code&gt;e2&lt;&#x2F;code&gt;, between the filter and the probe. With
&lt;code&gt;e2: reg&lt;&#x2F;code&gt; the probe is inlined into the scan&#x2F;filter loop, which is
how a fully fused pipeline runs this query: each surviving row probes
the hash table immediately, and when the table is bigger than cache
the load stalls with nothing else in flight to hide it. With
&lt;code&gt;e2: buf(1024)&lt;&#x2F;code&gt; the filter accumulates a vector of pending keys
before any probe runs, and a buffer of pending keys is the
precondition for software prefetching&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-probe-stall-1&quot;&gt;&lt;a href=&quot;#fn-probe-stall&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;: while probing
key &lt;code&gt;i&lt;&#x2F;code&gt; you issue a prefetch for the bucket of key &lt;code&gt;i + k&lt;&#x2F;code&gt;, and by
the time the loop reaches it the bucket is in cache. This was the
original motivation for ROF, and in this notation the paper’s stage
boundary in front of the probe is the annotation &lt;code&gt;e2: buf&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The walkthrough compiler stops short of all of this: it handles
straight pipelines only, and Q14 is the first query that would force
a second pipeline, shared state, and a barrier into it. I’ll come
back to what that state costs the formalism at the end.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tier-one-the-block-library&quot;&gt;Tier one: the block library&lt;&#x2F;h2&gt;
&lt;p&gt;Back to Q6 and the compiler. The first tier we will need to stitch together
is some pre-compiled primitives. Because we don’t know what every query we
will be processing looks like we want to limit ourselves to a combination
of primitive operations, but how do we decide which combination of primitive
operations should we pre-compile ?&lt;&#x2F;p&gt;
&lt;p&gt;The edge annotations answer this because they are exactly what identifies a
compiled block. A block is code for some fused region; its interior edges were
inlined away, so what survives is the boundary: which suboperators the region
computes, plus the representation of each edge crossing in or out. I call that
tuple the region’s &lt;em&gt;boundary key&lt;&#x2F;em&gt;, and in the compiler it is a plain tuple:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; region_key&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;ops&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; end&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    parts&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #39BAE6);&quot;&gt; tuple&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;shape_of&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;o&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; o&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; ops&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;end&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    rin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rout&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; in_rep&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; start&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; out_rep&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; end&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; end&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;parts&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rout&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;     #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; e.g. (&amp;quot;filter&amp;quot;, &amp;quot;&amp;gt;=&amp;quot;, &amp;quot;const&amp;quot;, &amp;quot;dense&amp;quot;, &amp;quot;sel&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;fused&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; parts&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rout&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Notice that the key doesn’t refer to explicit column names or constants &lt;code&gt;(&quot;filter&quot;, &quot;&amp;gt;=&quot;, &quot;const&quot;, ...)&lt;&#x2F;code&gt;
covers &lt;code&gt;shipdate &amp;gt;= 8766&lt;&#x2F;code&gt; and &lt;code&gt;quantity &amp;gt;= 5&lt;&#x2F;code&gt; alike, because those arrive at the block as call-time parameters.
The key just holds what the code shape depends on and the runtime state holds what this query binds to.&lt;&#x2F;p&gt;
&lt;p&gt;The library itself is a dictionary from boundary keys to code:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; build_library&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    lib&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; sym&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;col&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;            for&lt;&#x2F;span&gt;&lt;span&gt; rin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rout&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;filter&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; sym&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rout&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; make_filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;sym&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rout&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;            for&lt;&#x2F;span&gt;&lt;span&gt; rep&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;map&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; sym&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rep&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rep&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; make_map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;sym&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rep&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; rep&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;fold&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rep&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; None&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; make_fold&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;rep&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; no fused key is ever inserted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; lib&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here is &lt;code&gt;make_map&lt;&#x2F;code&gt;, trimmed of its constant-operand handling:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; make_map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;sym&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; rep&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt; OP_FNS&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;sym&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; block&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; o&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; needed&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; o.lhs, o.rhs, o.out bind at call time&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        lhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;cols&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;o&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;lhs&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;cols&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;o&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;rhs&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        out&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; indices&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;chunk&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; chunk.sel, or range(chunk.n) if dense&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            out&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; fn&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;lhs&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; rhs&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; with_column&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; o&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;out&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; out&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; block&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The dense and sel variants differ in their iteration space and in the contract of
their output, which is why representation is part of the key we have the same suboperator
but a different edge type and different code. In a native engine the difference will
manifest itself in the form of instruction density, auto-vectorization and cache misses
because the dense body will be branch-free and auto-vectorizes and the sel body will have
pointer and indices chasing and not always vectorize.&lt;&#x2F;p&gt;
&lt;p&gt;Different representations require passing data across boundaries, a filter for example produces
its surviving rows as a selection vector and a downstream block that computes a property over
rows wants a dense vector. So we need a way to copy or coerce the data in any engine this will
be an implementation hidden detail and won’t appear as a plan-level construct but in our case we
want to have a conversion node that materializes selection vectors into fresh columns.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E6C08A);&quot;&gt;dataclass&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #BFBDB6);&quot;&gt;frozen&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Compact&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel -&amp;gt; dense: materialize the survivors a selection vector&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;    names into fresh columns.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; make_compact&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; block&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; o&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; needed&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; is&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; None&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;            return&lt;&#x2F;span&gt;&lt;span&gt; chunk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        cols&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;cols&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;sel&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;                for&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;cols&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; needed&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; Chunk&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;cols&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;sel&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; None&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;compact&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; make_compact&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Being an ordinary suboperator is the point. &lt;code&gt;Compact&lt;&#x2F;code&gt; sits in the op
list, &lt;code&gt;regions&lt;&#x2F;code&gt; splits around it like anything else, and it resolves
through the same dictionary lookup, so the conversion is a thing in the
plan rather than a thing inside somebody’s filter loop. &lt;code&gt;compact&lt;&#x2F;code&gt; is
the one coercion the walkthrough implements. Two more belong to the
same family and are not in the code: gather fetches values through a
level of indirection (we met one fetching &lt;code&gt;p_type&lt;&#x2F;code&gt; through Q14’s probe
result), and spill demotes a register region into a buffer.&lt;&#x2F;p&gt;
&lt;p&gt;Speaking of legality a schedule can run on the precompiled tier if every one of its regions’s
keys is in the dictionary. &lt;code&gt;plan&lt;&#x2F;code&gt; does that check while resolving each region to a callable:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; plan&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;ops&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; lib&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    resolved&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; end&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; regions&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;ops&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; sched&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        key&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; region_key&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;ops&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; end&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; key&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; lib&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; and&lt;&#x2F;span&gt;&lt;span&gt; sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;tier&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;jit&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            resolved&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;key&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ops&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;start&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;        #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; tier: precompiled&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        elif&lt;&#x2F;span&gt;&lt;span&gt; sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;tier&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;precompiled&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;            raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt; IllegalSchedule&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; is not in the library&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        else&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            resolved&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;jit_region&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;ops&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; end&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; tier: jit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; resolved&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There is no separate list of allowed schedules; the check is dictionary membership, so adding
a block to the library is what makes the schedules that need it legal. Another thing to notice
is that we don’t have to fix one convention for whether filters emit selection vectors or compacted
output. The same works for Q14, with one addition: the boundary key of a probe region also names the
hash table’s bucket layout, because a precompiled probe block commits to a bucket format the same way
a map block commits to a vector width.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;physical-layouts-as-schedule-decisions&quot;&gt;Physical Layouts as Schedule Decisions&lt;&#x2F;h2&gt;
&lt;p&gt;Another thing that needs to be encoded is the physical layout of hashmap buckets
this only matters because our approach allows us to define an arbitrary layout
for &lt;code&gt;prob&#x2F;build&lt;&#x2F;code&gt; hashmaps and any storage interface.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;EMPTY&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; (insert, layout=&amp;quot;open&amp;quot;) — open addressing with linear probing:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; two flat arrays, collisions resolved by walking to the next slot.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; build_open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; payloads&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; bits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    mask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; bits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ht_keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;EMPTY&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; bits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ht_pay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;  =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; bits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; zip&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; payloads&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; hash&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;k&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; mask&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        while&lt;&#x2F;span&gt;&lt;span&gt; ht_keys&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt; EMPTY&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; mask&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ht_keys&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ht_pay&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; ht_keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;pay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; ht_pay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;mask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; mask&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; (insert, layout=&amp;quot;chained&amp;quot;) — bucket heads pointing into entry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; arrays, collisions resolved by a next-pointer chain.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; build_chained&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; payloads&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; bits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    mask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; bits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    heads&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;EMPTY&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; bits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ekey&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; epay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; enext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; zip&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; payloads&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; hash&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;k&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; mask&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ekey&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;k&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span&gt;epay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span&gt;enext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;heads&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        heads&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;ekey&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;heads&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; heads&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;ekey&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; ekey&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;epay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; epay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;enext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; enext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;mask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; mask&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; (probe, layout=&amp;quot;open&amp;quot;, in: dense, out: sel)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; probe_open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;keys_in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    hits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; pay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; enumerate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;keys_in&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; hash&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;k&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;mask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        while&lt;&#x2F;span&gt;&lt;span&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt; EMPTY&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; scan the linear-probe run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                hits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span&gt;pay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;pay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;                break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;mask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; hits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; pay&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; (probe, layout=&amp;quot;chained&amp;quot;, in: dense, out: sel)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; probe_chained&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;keys_in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    hits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; pay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; enumerate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;keys_in&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        e&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;heads&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt;hash&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;k&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;mask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        while&lt;&#x2F;span&gt;&lt;span&gt; e&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt; EMPTY&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;                  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; walk the chain&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;ekey&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                hits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span&gt;pay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;epay&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;                break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            e&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ht&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;enext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; hits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; pay&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;insert&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;open&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;                     =&lt;&#x2F;span&gt;&lt;span&gt; build_open&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;insert&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;chained&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;                  =&lt;&#x2F;span&gt;&lt;span&gt; build_chained&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;probe&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;open&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;   =&lt;&#x2F;span&gt;&lt;span&gt; probe_open&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lib&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;probe&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;chained&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;dense&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;sel&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;   =&lt;&#x2F;span&gt;&lt;span&gt; probe_chained&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; no (&amp;quot;probe&amp;quot;, &amp;quot;robinhood&amp;quot;, ...) entry exists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;state_layout&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;ht&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;robinhood&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; region_key for the probe region -&amp;gt; (&amp;quot;probe&amp;quot;, &amp;quot;robinhood&amp;quot;, &amp;quot;dense&amp;quot;, &amp;quot;sel&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; not in lib -&amp;gt; IllegalSchedule on the precompiled tier, JIT otherwise&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;tier-two-the-jit&quot;&gt;Tier two: the JIT&lt;&#x2F;h2&gt;
&lt;p&gt;When the lookup misses and the schedule isn’t pinned, &lt;code&gt;plan&lt;&#x2F;code&gt; falls
through to the JIT, and in Python a JIT is pleasantly short&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-short-1&quot;&gt;&lt;a href=&quot;#fn-short&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; we can just generate
source, &lt;code&gt;exec&lt;&#x2F;code&gt; it, return the function where &lt;code&gt;jit_region&lt;&#x2F;code&gt; walks the ops in the region
and emits one line per suboperator a &lt;code&gt;continue&lt;&#x2F;code&gt; guard per filter, a local per map and
an accumulation for the fold:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; jit_region&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;ops&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; sched&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; end&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; needed_out&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; name&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    src&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;(chunk, state):&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; ... load the columns the region reads, pick dense or sel iteration,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;     then one generated line per suboperator ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt;    exec&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;src&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ns&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;Chunk&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; Chunk&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; ns&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Unlike the library blocks, the generated code specializes the query into the source: column names
and constants are baked in, the way HyPer’s codegen bakes them into LLVM IR. Running &lt;code&gt;hyper&lt;&#x2F;code&gt; with tracing
on prints what came out:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;region 0: ops[0:7] tier=jit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| def region0(chunk, state):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     discount = chunk.cols[&amp;#39;discount&amp;#39;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     extprice = chunk.cols[&amp;#39;extprice&amp;#39;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     quantity = chunk.cols[&amp;#39;quantity&amp;#39;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     shipdate = chunk.cols[&amp;#39;shipdate&amp;#39;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     acc = state[&amp;#39;acc&amp;#39;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     idx = chunk.sel if chunk.sel is not None else range(chunk.n)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     for i in idx:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|         if not (shipdate[i] &amp;gt;= 8766): continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|         if not (shipdate[i] &amp;lt; 9131): continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|         if not (discount[i] &amp;gt;= 5): continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|         if not (discount[i] &amp;lt;= 7): continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|         if not (quantity[i] &amp;lt; 24): continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|         v_revenue = extprice[i] * discount[i]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|         acc += v_revenue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|     state[&amp;#39;acc&amp;#39;] = acc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is the fused loop we wanted to get back in the schedules section except we didn’t explicitely
write it instead we defined a schedule &lt;code&gt;fuse_all(Q6)&lt;&#x2F;code&gt; and seven declarative sub-operators and the
code kind of falls out. If we change the schedule we end up with different code f&lt;code&gt;rof&lt;&#x2F;code&gt; produces two
smaller functions, one compacting survivors into lists at its boundary and one consuming them.&lt;&#x2F;p&gt;
&lt;p&gt;One argument that keeps coming back in the HyPer and Umbra papers is that code generation is legitimately
about trading off compile times for execution times. In the case of Umbra, HyPer’s successor and more recenetly
Cedar this was addressed by tiering at the IR level by using two compilers.&lt;&#x2F;p&gt;
&lt;p&gt;In our case because we can decide on schedules before running the query for the first time we an benefit from
vectorization and pre-compiled fragments without ever triggering a compile and instead only trigger the compile
for queries we judge as hot or for UDFs&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-udfs-1&quot;&gt;&lt;a href=&quot;#fn-udfs&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to interject for a moment and clarify something, a lot of database papers on query compilation don’t
seem to discuss the contextual trade-off with I&#x2F;O i.e. when your data is available for processing and I think
this information makes the compile time discussion more interesting.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Another thing I wish to explore in the future is how much we can theoretically push down to process near data,
compilation is very attractive here because of how imaginative you can get e.g. processing near NIC or NVMe
which seems like a non-brainer for hyperscalers and hard to achieve in practice for your average database.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;But note how we didn’t have to do any of that and instead we just leverage our scheduling to get tiers for free. Of
course there is a compile time to produce machine code out of C code but this cost can be modeled into the scheduling
model and you can decide when to keep using pre-compiled blocks versus when to generated fused kernels.&lt;&#x2F;p&gt;
&lt;p&gt;Finally we define a reference interpreter to act as a correctness oracle and this comes from the same
model we’ve been cooking all along. The reference interpreter walks the pipeline a row at a time
and never looks at a schedule:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; reference&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #D2A6FF);&quot;&gt; ops&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    acc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F07178);&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;nrows&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;table&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        row&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; col&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; col&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; table&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #FFB454);&quot;&gt;items&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; o&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; ops&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #95E6CB);&quot;&gt;            ...&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; apply each suboperator to the row dict&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; acc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Every combination of &lt;code&gt;(schedule, tier)&lt;&#x2F;code&gt; can be asserted against the reference interpreter and when
something goes wrong you can just flip one annotation at a time and look at the results.
If for example the selection-vector schedule on the precompiled tier returns a revenue slightly off the
reference rerun it with &lt;code&gt;tier=&quot;jit&quot;&lt;&#x2F;code&gt; and if it agrees then you know some precompiled block is at
fault. Back on the precompiled tier, flip the edges to dense one at a time and look at the map’s
dense vectors which isolates the precompiled sel-variant of the map.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;reference (row at a time, no schedule): revenue = 64967015&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hyper    revenue = 64967015 [ok]   tier = jit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vec      revenue = 64967015 [ok]   tier = precompiled&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vec_sel  revenue = 64967015 [ok]   tier = precompiled&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rof      revenue = 64967015 [ok]   tier = jit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;if-you-already-speak-mlir&quot;&gt;If you already speak MLIR&lt;&#x2F;h2&gt;
&lt;p&gt;Everything above can be restated in MLIR terms, and it is worth doing
because most of the infrastructure already exists.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol15&#x2F;p2389-jungmair.pdf&quot;&gt;LingoDB&lt;&#x2F;a&gt; showed
that query compilation fits MLIR’s progressive-lowering model, and
Jungmair’s declarative sub-operators are implemented as a dialect on
that stack. So the algorithm half of the split is already an MLIR
first citizen suboperators are ops, and the edges of the DAG are SSA
values so the schedule is just part of the type system.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%rows      = subop.scan @lineitem&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             : !sched.stream&amp;lt;4 x i64, dense, 1024, buf&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%survivors = subop.filter %rows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             : !sched.stream&amp;lt;2 x i64, sel, 1024, buf&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The schedule-as-a-separate-program idea exists too. The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mlir.llvm.org&#x2F;docs&#x2F;Dialects&#x2F;Transform&#x2F;&quot;&gt;transform
dialect&lt;&#x2F;a&gt;, Halide’s
descendant inside MLIR, expresses tiling and fusion decisions as
their own IR whose payload is another program, an edge schedule is a
transform script over the suboperator dialect: fuse these ops into
one region, materialize this value at that type, at this capacity.
The walkthrough’s &lt;code&gt;Schedule&lt;&#x2F;code&gt; value and &lt;code&gt;regions&lt;&#x2F;code&gt; function are a
pocket-sized version of exactly that.&lt;&#x2F;p&gt;
&lt;p&gt;Tiering is also naturally a follow through of MLIR’s dialects picking a tier
means picking a lowering path in this case you lower a fused region through &lt;code&gt;scf&lt;&#x2F;code&gt;
to &lt;code&gt;llvm&lt;&#x2F;code&gt; and you get the JIT tier. Lower a region to a &lt;code&gt;func.call&lt;&#x2F;code&gt; against a pre-existing
library of precompiled blocks and you get the fragment tier.&lt;&#x2F;p&gt;
&lt;p&gt;What MLIR does not provide is the contents of that middle tier; someone still has to decide which fused blocks to
enumerate. LingoDB today lowers every pipeline through one flavor chosen by static rules; the edge-schedule proposal
allows you to turn that fixed path into a search space.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;where-the-comparison-is-not-correct&quot;&gt;Where the comparison is not correct&lt;&#x2F;h2&gt;
&lt;p&gt;Halide has limits that query plans do not have. These limits let Halide
divide the algorithm from the schedule. Query plans break that division
in four ways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Stages hold state.&lt;&#x2F;li&gt;
&lt;li&gt;Bounds change with the data.&lt;&#x2F;li&gt;
&lt;li&gt;Domains have no order.&lt;&#x2F;li&gt;
&lt;li&gt;Halide has no tier.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Stages hold state.&lt;&#x2F;strong&gt; A Halide stage is a pure function of its inputs
&lt;code&gt;fold&lt;&#x2F;code&gt; is not a pure function, and a hash-table build is not a pure
function. The walkthrough has only one item of state: the executor keeps
one accumulator and Q14 shows the small version of the problem i.e. the hash
table is common state with a barrier and no edge annotation can put the
probe before the end of the build.&lt;&#x2F;p&gt;
&lt;p&gt;Q1 is the TPC-H query that aggregates by group. Q1 shows the large
version of the problem. Its fold keeps one aggregate for each group.
Thus the edge into the fold does not carry values. The edge carries
updates to common state. The aggregation monoid controls which
reorderings and parallel splits are safe, and the schedule does not.&lt;&#x2F;p&gt;
&lt;p&gt;You must show the correctness guarantee again for state. An effect
system on suboperators can do this. The effect system must show which
edges carry values and which edges carry state. Halide has related work
with the name &lt;code&gt;rfactor&lt;&#x2F;code&gt;. &lt;code&gt;rfactor&lt;&#x2F;code&gt; divides a reduction into partial
states, one for each thread. This is the best example to start from.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Bounds change with the data.&lt;&#x2F;strong&gt; Halide knows its loop extents at compile
time. A query engine does not know the output cardinality of a filter
before it runs that filter. This cardinality controls which of the
subsequent schedules is the fastest. Thus you cannot select the correct
schedule before the query starts. Halide’s autoscheduler does not have
this problem.&lt;&#x2F;p&gt;
&lt;p&gt;I think that you must not select one schedule. Do these steps instead,
as Excalibur does:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Make a short list of schedules.&lt;&#x2F;li&gt;
&lt;li&gt;Run each schedule in the list on one morsel.&lt;&#x2F;li&gt;
&lt;li&gt;Keep the schedule that is the fastest.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Two schedules with one different annotation have one different region of
code. Thus you can identify the change that made the schedule faster. A
different post will tell you how to make the short list. It will also
tell you the cost of an incorrect selection.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Domains have no order.&lt;&#x2F;strong&gt; Halide divides ordered grids into tiles. A
relation is a bag, and a bag has no order. But the important decisions
about blocks are tiles of a domain that has no order. Morsels and radix
partitions before a join are two examples. I think that a radix join is a
loop tile operation with a partition operation. I cannot show this yet,
and I want this result from the formalism.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Halide has no tier.&lt;&#x2F;strong&gt; Halide always compiles. Thus Halide never selects
between a precompiled library and a JIT. Query engines must control the
time to the first tuple. Thus the tier is not an internal detail here.
Inkfuse, Excalibur, and jamii’s post are different mostly on this axis.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;things-i-m-still-not-sure-about&quot;&gt;Things I’m still not sure about&lt;&#x2F;h2&gt;
&lt;p&gt;Whether the schedule language is complete. Morsel-driven parallelism
looks like a granularity annotation on the scan edge plus a rule
about which state is shared, but that rule is the part I can’t state
precisely yet, and the shared-state half is the same thing I couldn’t
express in CPS terms last time.&lt;&#x2F;p&gt;
&lt;p&gt;Whether the coercion algebra stays closed once nulls and
variable-length data show up. Every representation in this post is a
vector of fixed-width values, which is the easy case. Validity
bitmaps and string payloads each add representation axes, and I don’t
know whether they add a manageable number of coercions or an
explosion of them.&lt;&#x2F;p&gt;
&lt;p&gt;And whether this is a genuinely different chart or VOILA with types.
The honest version of the differentiation, as I see it today: VOILA
puts the flavor in the code a backend generates for the operators,
and Excalibur searches over generated code; the edge view puts the
paradigm in the intermediates between suboperators, and makes the
code a derived artifact of edge decisions plus a tier. The
walkthrough is small, but it is a proof of that last part: its
library blocks and its generated regions are both downstream of the
same seven dataclasses and a tuple of edge annotations. I think that
relocation is what makes legality-by-presence expressible at all. But I have talked myself into framings like this
before and been wrong about which part mattered.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;The walkthrough compiler from this post:
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;deferworks.org&#x2F;code&#x2F;schedules.py&quot;&gt;schedules.py&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Tim Gubner, Peter Boncz, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol14&#x2F;p1067-gubner.pdf&quot;&gt;Charting the Design Space of Query
Execution using VOILA&lt;&#x2F;a&gt;,
PVLDB 14.&lt;&#x2F;li&gt;
&lt;li&gt;Tim Gubner, Peter Boncz, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vldb.org&#x2F;pvldb&#x2F;vol16&#x2F;p829-boncz.pdf&quot;&gt;Excalibur: A Virtual Machine for Adaptive
Fine-grained JIT-Compiled Query Execution based on
VOILA&lt;&#x2F;a&gt;, PVLDB 16.&lt;&#x2F;li&gt;
&lt;li&gt;Maximilian Bandle, Jana Giceva, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol14&#x2F;p2483-bandle.pdf&quot;&gt;Database Technology for the Masses:
Sub-Operators as First-Class
Entities&lt;&#x2F;a&gt;, PVLDB 14.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Jungmair, Jana Giceva, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol16&#x2F;p3461-jungmair.pdf&quot;&gt;Declarative Sub-Operators for
Universal Data
Processing&lt;&#x2F;a&gt;,
PVLDB 16.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Jungmair, André Kohn, Jana Giceva, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol15&#x2F;p2389-jungmair.pdf&quot;&gt;Designing an Open
Framework for Query Optimization and
Compilation&lt;&#x2F;a&gt;
(LingoDB), PVLDB 15.&lt;&#x2F;li&gt;
&lt;li&gt;Prashanth Menon, Todd Mowry, Andrew Pavlo, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol11&#x2F;p1-menon.pdf&quot;&gt;Relaxed Operator Fusion
for In-Memory Databases&lt;&#x2F;a&gt;,
PVLDB 11.&lt;&#x2F;li&gt;
&lt;li&gt;Jonathan Ragan-Kelley et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;people.csail.mit.edu&#x2F;jrk&#x2F;halide-pldi13.pdf&quot;&gt;Halide: A Language and Compiler for
Optimizing Parallelism, Locality, and Recomputation in Image
Processing Pipelines&lt;&#x2F;a&gt;,
PLDI 2013.&lt;&#x2F;li&gt;
&lt;li&gt;Haoran Xu, Fredrik Kjolstad, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2011.13127&quot;&gt;Copy-and-Patch
Compilation&lt;&#x2F;a&gt;, OOPSLA 2021.&lt;&#x2F;li&gt;
&lt;li&gt;Jamie Brandon, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.scattered-thoughts.net&#x2F;writing&#x2F;a-missing-tier-for-query-compilers&#x2F;&quot;&gt;A missing tier for query
compilers&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Timo Kersten et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;db.cs.cmu.edu&#x2F;papers&#x2F;2018&#x2F;p2209-kersten.pdf&quot;&gt;Everything You Always Wanted to Know About
Compiled and Vectorized Queries But Were Afraid to
Ask&lt;&#x2F;a&gt;, PVLDB 11.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cs.cit.tum.de&#x2F;fileadmin&#x2F;w00cfj&#x2F;dis&#x2F;papers&#x2F;inkfuse.pdf&quot;&gt;Inkfuse
paper&lt;&#x2F;a&gt;,
and the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;deferworks.org&#x2F;posts&#x2F;inkfuse-cps&#x2F;&quot;&gt;previous post&lt;&#x2F;a&gt; on it.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-raptor&quot;&gt;
&lt;p&gt;The &lt;code&gt;raptor&lt;&#x2F;code&gt; implementation is not opensource yet because it’s
still not complete and it’s still just a tinkering project I
work on from time to time. &lt;a href=&quot;#fr-raptor-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-program&quot;&gt;
&lt;p&gt;I am fairly sure with some extra effort one can describe this
as an algebra and work out the formal details. &lt;a href=&quot;#fr-program-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-legality&quot;&gt;
&lt;p&gt;The compiler guaranteeing that a schedule is legal is very different
from encoding it into the rewrite rule. A handwavy analogy is how Rust
makes memory safety a compiler checked property versus having it as a
runtime property e.g. reference counting. &lt;a href=&quot;#fr-legality-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-probe-stall&quot;&gt;
&lt;p&gt;The longer version of this argument, with the latency
arithmetic, is in the last post’s footnote on ROF and
prefetching; the canonical reference is Chen et al., &lt;em&gt;Improving
Hash Join Performance Through Prefetching&lt;&#x2F;em&gt;. &lt;a href=&quot;#fr-probe-stall-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-short&quot;&gt;
&lt;p&gt;Changing Python for C gives us the same brevity a good design approach for
generating C code can be seen in this &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wingolog.org&#x2F;archives&#x2F;2026&#x2F;02&#x2F;09&#x2F;six-thoughts-on-generating-c&quot;&gt;post&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-short-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-udfs&quot;&gt;
&lt;p&gt;UDFs are &lt;em&gt;“la bete noire”&lt;&#x2F;em&gt; of query execution and offering UDF support almost always means supporting
another compiler. BigQuery for example supports Javascript for UDFs and while its not documented anywhere
if I were to venture a guess I would bet some form of stripped down V8 is used or maybe even just V8 is
used for those. The nice thing about UDFs is that while they can be black boxes, statistically you know
you will execute them many times ~ O(rows) so compiling them straight away will be rewarding.
An intuitive way to think about it is that you dispatch the UDF to both TurboFan (fast compile times)
and Maglev (V8’s optimizing compiler) and whichever finishes first can be used to process available data.
This approach is only rewarding if you expect your I&#x2F;O to be super fast e.g. if you dispatch I&#x2F;O’s before
lowering the final plan as a sort of speculative warm up but if your I&#x2F;O is over the network e.g. reading Parquet
over S3 then you can just compile with the last tier. &lt;a href=&quot;#fr-udfs-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Inkfuse, Continuations and Query Compilation</title>
          <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
          <link>https://deferworks.org/posts/inkfuse-cps/</link>
          <guid>https://deferworks.org/posts/inkfuse-cps/</guid>
          <description xml:base="https://deferworks.org/posts/inkfuse-cps/">&lt;p&gt;A few weeks ago I read Remy Wang’s blog post on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;remy.wang&#x2F;blog&#x2F;cps.html&quot;&gt;continuation-passing
style&lt;&#x2F;a&gt; and the day after, I kept thinking
about &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cs.cit.tum.de&#x2F;fileadmin&#x2F;w00cfj&#x2F;dis&#x2F;papers&#x2F;inkfuse.pdf&quot;&gt;Inkfuse&lt;&#x2F;a&gt;,
a query engine I’d been picking apart on and off for a while. The two felt
related in a way I couldn’t quite articulate, so I’m writing this to figure
out why.&lt;&#x2F;p&gt;
&lt;p&gt;Inkfuse is a vectorized-meets-compiled query engine out of TUM. It comes
from the same group that brought us HyPer, the system most people point at
when they want to talk about compiled query execution. If you’ve read
Neumann’s 2011 paper on data-centric code generation, Inkfuse sits on the
same shelf, only with a different set of trade-offs that I’ll get to later.
The implementation is available on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wagjamin&#x2F;inkfuse&quot;&gt;Github&lt;&#x2F;a&gt;
and reading it side by side with the paper made some things click that the paper
alone didn’t.&lt;&#x2F;p&gt;
&lt;p&gt;CPS is what functional programmers reach for when they want to make
control flow explicit. Instead of a function returning a
value to its caller, the caller hands the function a continuation, a
“what-to-do-next” callable, and the callee calls it with the result. You can
compile any program to CPS, and the resulting program no longer has a call
stack in the usual sense: every call is a tail call, every return is just
another call.&lt;&#x2F;p&gt;
&lt;p&gt;The reason I started seeing CPS in Inkfuse is that data-centric compiled
query engines are under this lens a hand-written CPS transform of an iterator-based plan.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pull-versus-push&quot;&gt;Pull versus Push&lt;&#x2F;h2&gt;
&lt;p&gt;The textbook way to execute a query plan is the Volcano iterator model. Each
operator exposes &lt;code&gt;open &#x2F; next &#x2F; close&lt;&#x2F;code&gt;. To get a tuple out of the root, you
call &lt;code&gt;next&lt;&#x2F;code&gt;, which calls &lt;code&gt;next&lt;&#x2F;code&gt; on its child, which calls &lt;code&gt;next&lt;&#x2F;code&gt; on its
child, and so on. The control flow walks down to the leaf&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-leaf-1&quot;&gt;&lt;a href=&quot;#fn-leaf&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, picks up
a tuple, walks back up evaluating filters and projections, and hands a
tuple to the caller. The model gives you a clean separation between
operators but pays for it in virtual calls and instruction-cache misses,
both of which add up at high tuple rates.&lt;&#x2F;p&gt;
&lt;p&gt;To keep things concrete, here’s the plan I’ll keep coming back to. It’s
the simplest query plan shape: a scan, a filter, an aggregate.&lt;&#x2F;p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 720 260&quot; xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; role=&quot;img&quot; aria-labelledby=&quot;qp-t qp-d&quot;&gt;
  &lt;title id=&quot;qp-t&quot;&gt;Volcano query plan&lt;&#x2F;title&gt;
  &lt;desc id=&quot;qp-d&quot;&gt;A three-operator pipeline. Scan reads rows from table t, filter keeps rows where c is greater than 10, aggregate sums a times b.&lt;&#x2F;desc&gt;
  &lt;defs&gt;
    &lt;marker id=&quot;qp-up&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;10&quot; refY=&quot;5&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto&quot;&gt;
      &lt;path d=&quot;M 0 0 L 10 5 L 0 10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.4&quot;&#x2F;&gt;
    &lt;&#x2F;marker&gt;
  &lt;&#x2F;defs&gt;
  &lt;g stroke=&quot;currentColor&quot; fill=&quot;none&quot;&gt;
    &lt;rect x=&quot;60&quot; y=&quot;20&quot; width=&quot;600&quot; height=&quot;220&quot; stroke-width=&quot;1&quot;&#x2F;&gt;
    &lt;line x1=&quot;60&quot; y1=&quot;93&quot; x2=&quot;660&quot; y2=&quot;93&quot; stroke-width=&quot;0.75&quot;&#x2F;&gt;
    &lt;line x1=&quot;60&quot; y1=&quot;166&quot; x2=&quot;660&quot; y2=&quot;166&quot; stroke-width=&quot;0.75&quot;&#x2F;&gt;
    &lt;line x1=&quot;620&quot; y1=&quot;225&quot; x2=&quot;620&quot; y2=&quot;40&quot; stroke-width=&quot;0.75&quot; stroke-dasharray=&quot;3 4&quot; marker-end=&quot;url(#qp-up)&quot;&#x2F;&gt;
  &lt;&#x2F;g&gt;
  &lt;g fill=&quot;currentColor&quot;&gt;
    &lt;g font-family=&quot;Fraunces, Georgia, serif&quot; font-weight=&quot;500&quot; font-size=&quot;22&quot;&gt;
      &lt;text x=&quot;100&quot; y=&quot;62&quot;&gt;aggregate&lt;&#x2F;text&gt;
      &lt;text x=&quot;100&quot; y=&quot;135&quot;&gt;filter&lt;&#x2F;text&gt;
      &lt;text x=&quot;100&quot; y=&quot;208&quot;&gt;scan&lt;&#x2F;text&gt;
    &lt;&#x2F;g&gt;
    &lt;g font-family=&quot;&#x27;Space Mono&#x27;, ui-monospace, monospace&quot; font-size=&quot;15&quot;&gt;
      &lt;text x=&quot;300&quot; y=&quot;63&quot;&gt;sum(a * b)&lt;&#x2F;text&gt;
      &lt;text x=&quot;300&quot; y=&quot;136&quot;&gt;c &amp;gt; 10&lt;&#x2F;text&gt;
      &lt;text x=&quot;300&quot; y=&quot;209&quot;&gt;t(a, b, c)&lt;&#x2F;text&gt;
    &lt;&#x2F;g&gt;
    &lt;g font-family=&quot;&#x27;Space Mono&#x27;, ui-monospace, monospace&quot; font-size=&quot;10&quot; letter-spacing=&quot;2&quot; opacity=&quot;0.55&quot;&gt;
      &lt;text x=&quot;640&quot; y=&quot;132&quot; text-anchor=&quot;end&quot;&gt;DATA FLOW&lt;&#x2F;text&gt;
    &lt;&#x2F;g&gt;
  &lt;&#x2F;g&gt;
&lt;&#x2F;svg&gt;
&lt;figcaption&gt;Fig. 1 — Query plan for &lt;code&gt;SELECT sum(a * b) FROM t WHERE c &amp;gt; 10&lt;&#x2F;code&gt;. Data flows from scan up to aggregate.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;In Volcano, running this query pulls from the root. The aggregate’s &lt;code&gt;next&lt;&#x2F;code&gt;
calls the filter’s &lt;code&gt;next&lt;&#x2F;code&gt;, which calls the scan’s &lt;code&gt;next&lt;&#x2F;code&gt; in a loop until a
row passes the predicate, then the row walks back up. In Rust, with
iterators standing in for operators, that’s roughly:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; A row tuple (a, b, c).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Row&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;i64&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; i64&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; i64&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; run_pull&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;rows&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Vec&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;Row&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; i64&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    rows&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;into_iter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The HyPer model flips that. Instead of pulling from the top, you produce
from the bottom. The compiler walks the plan and calls &lt;code&gt;produce&lt;&#x2F;code&gt; on each
operator, top-down. When &lt;code&gt;produce&lt;&#x2F;code&gt; reaches a scan it emits a loop, and the
body of that loop is the &lt;code&gt;consume&lt;&#x2F;code&gt; of the scan’s parent, whose body is the
&lt;code&gt;consume&lt;&#x2F;code&gt; of &lt;em&gt;its&lt;&#x2F;em&gt; parent, and so on up the tree. By the time code generation
is done, the pipeline is a single tight loop with no virtual dispatch and
the tuple lives in registers the whole way up. Neumann calls this data-centric
code generation. DuckDB implements a similar push model but using a vectorized
approach instead of code generation.&lt;&#x2F;p&gt;
&lt;p&gt;The same query in push form looks more like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; scan&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;rows&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;Row&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span&gt; consume&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; impl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; FnMut&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;Row&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; rows&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;        consume&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    rows&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;Row&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    pred&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; impl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; Fn&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;Row&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; bool&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    mut&lt;&#x2F;span&gt;&lt;span&gt; consume&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; impl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; FnMut&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;Row&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;    scan&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;rows&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; pred&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; consume&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; run_push&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;rows&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;Row&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; i64&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span&gt; acc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;    filter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;rows&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; acc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    acc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;consume&lt;&#x2F;code&gt; callback at the bottom is the aggregate’s body. &lt;code&gt;filter&lt;&#x2F;code&gt;
takes it, wraps it in its own predicate check, and passes the wrapped
callback down to &lt;code&gt;scan&lt;&#x2F;code&gt;. After inlining, the whole thing collapses to a
single loop: the aggregate body sitting inside the filter body sitting
inside the scan body.&lt;&#x2F;p&gt;
&lt;p&gt;Looking at the shape of that we can see that each operator takes its parent’s &lt;code&gt;consume&lt;&#x2F;code&gt; and
threads control into it. Nothing returns a tuple back up the chain; every
operator just hands off to the next consumer by calling its continuation.&lt;&#x2F;p&gt;
&lt;p&gt;That is what I pointed out as CPS here the &lt;code&gt;consume&lt;&#x2F;code&gt; function is the continuation
and the operator chain is the call chain and the IU bindings threaded through each operator
are the environment the continuation closes over.
A tuple passed to &lt;code&gt;consume&lt;&#x2F;code&gt; is the value the continuation receives and code generation is the
CPS transform itself, emitting machine code instead of source.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;inkfuse&quot;&gt;Inkfuse&lt;&#x2F;h2&gt;
&lt;p&gt;Pure HyPer-style compilation makes a different trade-off than dynamic dispatch
instead you pay an LLVM compilation tax up front. For short queries that tax can be longer than
just running the query in an interpreter. People have tried various ways around it: cheaper compiler
backends like custom bytecode VMs (NoisePage went this way), speculative compilation that runs an
interpreter and switches over to native code once it’s ready, or breaking the pipeline into
pieces small enough that you don’t have to generate fresh code for them at all.&lt;&#x2F;p&gt;
&lt;p&gt;That last option is more or less what Inkfuse does. Instead of compiling
each pipeline as a single monolithic function, it composes the pipeline out
of small fused fragments that are themselves precompiled ahead of time.
There is still a code-generation step, but it stitches fragments together
rather than emitting fresh IR for every operator combination. First-tuple
latency drops, and long-running queries still get most of the benefit of
full compilation.&lt;&#x2F;p&gt;
&lt;p&gt;I am going to draw an analogy that I don’t believe might be fully accurate from a PL
perspective; if a compiled pipeline is a CPS-transformed query plan then a fused fragment
is a closed continuation i.e. a piece of compiled code that knows how to consume some tuple
shape and pass it along.&lt;&#x2F;p&gt;
&lt;p&gt;Stretching that further we can describe stitching fragments at runtime as a kind of
defunctionalization: you keep a tag that says which fragment runs next and the runtime
looks it up. Defunctionalization is the standard technique for turning higher-order CPS code into first-order code.&lt;&#x2F;p&gt;
&lt;p&gt;If we map this back to the Rust above &lt;code&gt;filter(rows, pred, |r| aggregate(r))&lt;&#x2F;code&gt; is a call
whose continuation is a closure over &lt;code&gt;pred&lt;&#x2F;code&gt; and &lt;code&gt;aggregate&lt;&#x2F;code&gt; becomes a pipeline like
&lt;code&gt;[expr_i64_gt, agg_sum_i64_mul]&lt;&#x2F;code&gt;: a list of names identifying precompiled fragments that the runtime chains by looking
each one up in the fragment library.&lt;&#x2F;p&gt;
&lt;p&gt;In the code base this all shows up as &lt;code&gt;Suboperator&lt;&#x2F;code&gt;. The interface is the
direct equivalent of the push closure I wrote in Rust above:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; Suboperator&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; Generate initial code for this operator when IUs are requested&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; the first time. Will usually call open on all children and make&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; the target IUs available to the parent operator.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;   virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;CompilationContext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #D2A6FF);&quot;&gt; context&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; All downstream consumers have been closed - this operator can be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; closed as well.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;   virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; close&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;CompilationContext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #D2A6FF);&quot;&gt; context&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; Consume a specific IU from one of the children.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;   virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; consume&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; IU&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #D2A6FF);&quot;&gt; iu&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; CompilationContext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #D2A6FF);&quot;&gt; context&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; Consume once all IUs are ready.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;   virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt; void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt; consumeAllChildren&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;CompilationContext&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #D2A6FF);&quot;&gt; context&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The definition is from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wagjamin&#x2F;inkfuse&#x2F;blob&#x2F;8b6b31b01da0&#x2F;src&#x2F;algebra&#x2F;suboperators&#x2F;Suboperator.h#L47-L63&quot;&gt;Suboperator.h, L47-L63&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;consume(iu, context)&lt;&#x2F;code&gt; call is the continuation when called it doesn’t
move data but instead it emits code into &lt;code&gt;context&lt;&#x2F;code&gt; that consumes the IU&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-iu-1&quot;&gt;&lt;a href=&quot;#fn-iu&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The compiler
walks the DAG calling &lt;code&gt;consume&lt;&#x2F;code&gt; up through the parents, and what falls out
the other end is one fused loop body.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;relaxed-operator-fusion&quot;&gt;Relaxed operator fusion&lt;&#x2F;h2&gt;
&lt;p&gt;The Inkfuse paper builds on relaxed operator fusion (ROF) by Menon et al.,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;db.cs.cmu.edu&#x2F;papers&#x2F;2017&#x2F;p1-menon.pdf&quot;&gt;&lt;em&gt;Relaxed Operator Fusion for In-Memory
Databases&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;. The idea in
ROF is that full pipeline fusion is sometimes too aggressive. Some
operators want to work on a batch of tuples at a time, either because they
want SIMD, or because they want to overlap memory stalls with computation
through software prefetching&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-prefetch-1&quot;&gt;&lt;a href=&quot;#fn-prefetch&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; by fusing everything into one tight
loop we kind of give up that batching.&lt;&#x2F;p&gt;
&lt;p&gt;ROF introduces stage boundaries inside an otherwise fused pipeline where between
two stages, tuples materialize into a small vector that sits in L1, and the
next stage consumes the vector. Inside a stage you still get the compiled,
tight-loop shape and across a stage boundary you get the vectorized shape.&lt;&#x2F;p&gt;
&lt;p&gt;Drawing it on the same query, the stage boundary sits between filter and
aggregate:&lt;&#x2F;p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 720 360&quot; xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; role=&quot;img&quot; aria-labelledby=&quot;rof-t rof-d&quot;&gt;
  &lt;title id=&quot;rof-t&quot;&gt;Relaxed operator fusion — stage boundary&lt;&#x2F;title&gt;
  &lt;desc id=&quot;rof-d&quot;&gt;The same query plan, split into two stages by a buffer of tuples. Stage 1 (scan and filter) is a fused tight loop that pushes rows into a small vector. Stage 2 (aggregate) reads from that buffer, opening the door to SIMD and prefetching.&lt;&#x2F;desc&gt;
  &lt;defs&gt;
    &lt;marker id=&quot;rof-up&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;10&quot; refY=&quot;5&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto&quot;&gt;
      &lt;path d=&quot;M 0 0 L 10 5 L 0 10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.4&quot;&#x2F;&gt;
    &lt;&#x2F;marker&gt;
  &lt;&#x2F;defs&gt;
  &lt;g stroke=&quot;currentColor&quot; fill=&quot;none&quot;&gt;
    &lt;rect x=&quot;60&quot; y=&quot;20&quot; width=&quot;500&quot; height=&quot;70&quot; stroke-width=&quot;1&quot;&#x2F;&gt;
    &lt;rect x=&quot;60&quot; y=&quot;110&quot; width=&quot;500&quot; height=&quot;36&quot; stroke-width=&quot;1&quot; class=&quot;buffer-band&quot;&#x2F;&gt;
    &lt;line x1=&quot;60&quot; y1=&quot;118&quot; x2=&quot;560&quot; y2=&quot;118&quot; stroke-width=&quot;0.5&quot; stroke-dasharray=&quot;1 3&quot;&#x2F;&gt;
    &lt;line x1=&quot;60&quot; y1=&quot;138&quot; x2=&quot;560&quot; y2=&quot;138&quot; stroke-width=&quot;0.5&quot; stroke-dasharray=&quot;1 3&quot;&#x2F;&gt;
    &lt;rect x=&quot;60&quot; y=&quot;166&quot; width=&quot;500&quot; height=&quot;70&quot; stroke-width=&quot;1&quot;&#x2F;&gt;
    &lt;rect x=&quot;60&quot; y=&quot;256&quot; width=&quot;500&quot; height=&quot;70&quot; stroke-width=&quot;1&quot;&#x2F;&gt;
    &lt;line x1=&quot;520&quot; y1=&quot;256&quot; x2=&quot;520&quot; y2=&quot;242&quot; stroke-width=&quot;0.75&quot; marker-end=&quot;url(#rof-up)&quot;&#x2F;&gt;
    &lt;line x1=&quot;520&quot; y1=&quot;166&quot; x2=&quot;520&quot; y2=&quot;152&quot; stroke-width=&quot;0.75&quot; marker-end=&quot;url(#rof-up)&quot;&#x2F;&gt;
    &lt;line x1=&quot;520&quot; y1=&quot;110&quot; x2=&quot;520&quot; y2=&quot;96&quot; stroke-width=&quot;0.75&quot; marker-end=&quot;url(#rof-up)&quot;&#x2F;&gt;
    &lt;path d=&quot;M 600 20 L 610 20 L 610 90 L 600 90&quot; stroke-width=&quot;1&quot;&#x2F;&gt;
    &lt;path d=&quot;M 600 166 L 610 166 L 610 326 L 600 326&quot; stroke-width=&quot;1&quot;&#x2F;&gt;
  &lt;&#x2F;g&gt;
  &lt;g fill=&quot;currentColor&quot;&gt;
    &lt;g font-family=&quot;Fraunces, Georgia, serif&quot; font-weight=&quot;500&quot; font-size=&quot;22&quot;&gt;
      &lt;text x=&quot;90&quot; y=&quot;63&quot;&gt;aggregate&lt;&#x2F;text&gt;
      &lt;text x=&quot;90&quot; y=&quot;209&quot;&gt;filter&lt;&#x2F;text&gt;
      &lt;text x=&quot;90&quot; y=&quot;299&quot;&gt;scan&lt;&#x2F;text&gt;
    &lt;&#x2F;g&gt;
    &lt;g font-family=&quot;&#x27;Space Mono&#x27;, ui-monospace, monospace&quot; font-size=&quot;15&quot;&gt;
      &lt;text x=&quot;280&quot; y=&quot;63&quot;&gt;sum(a * b)&lt;&#x2F;text&gt;
      &lt;text x=&quot;280&quot; y=&quot;209&quot;&gt;c &amp;gt; 10&lt;&#x2F;text&gt;
      &lt;text x=&quot;280&quot; y=&quot;299&quot;&gt;t(a, b, c)&lt;&#x2F;text&gt;
    &lt;&#x2F;g&gt;
    &lt;text x=&quot;310&quot; y=&quot;134&quot; text-anchor=&quot;middle&quot; font-family=&quot;&#x27;Space Mono&#x27;, ui-monospace, monospace&quot; font-size=&quot;11&quot; letter-spacing=&quot;2&quot;&gt;BUFFER OF (a, b)&lt;&#x2F;text&gt;
    &lt;g font-family=&quot;&#x27;Space Mono&#x27;, ui-monospace, monospace&quot; font-size=&quot;10&quot; letter-spacing=&quot;1.4&quot;&gt;
      &lt;text x=&quot;622&quot; y=&quot;49&quot;&gt;STAGE 2&lt;&#x2F;text&gt;
      &lt;text x=&quot;622&quot; y=&quot;68&quot; opacity=&quot;0.6&quot;&gt;vectorized&lt;&#x2F;text&gt;
      &lt;text x=&quot;622&quot; y=&quot;235&quot;&gt;STAGE 1&lt;&#x2F;text&gt;
      &lt;text x=&quot;622&quot; y=&quot;254&quot; opacity=&quot;0.6&quot;&gt;fused loop&lt;&#x2F;text&gt;
    &lt;&#x2F;g&gt;
  &lt;&#x2F;g&gt;
&lt;&#x2F;svg&gt;
&lt;figcaption&gt;Fig. 2 — ROF slices the pipeline at a materialization boundary. Stage 1 stays fused; stage 2 reads the buffer as a batch, where SIMD and prefetching become possible.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Stage one is the same fused loop as before and stage two runs its own loop
over the buffer, which is the part the compiler can vectorize or
prefetch-pipeline. The aggregate’s &lt;code&gt;consume&lt;&#x2F;code&gt; is still its body, it just
gets called by a different driver.&lt;&#x2F;p&gt;
&lt;p&gt;If you keep the CPS picture in your head, a stage boundary is the place
where the continuation gets trampolined. Rather than calling the next
consumer directly, you push the tuple into a buffer, return, and let the
runtime call the next consumer once the buffer fills up. This is also where
prefetching becomes possible: once you have a buffer of pending keys, you can issue prefetches
for the hash-table probes that will happen in the next stage and overlap
them with the work in the current one.&lt;&#x2F;p&gt;
&lt;p&gt;Kersten et al.’s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;db.cs.cmu.edu&#x2F;papers&#x2F;2018&#x2F;p2209-kersten.pdf&quot;&gt;&lt;em&gt;Everything You Always Wanted to Know About Compiled and
Vectorized Queries But Were Afraid to
Ask&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; is a useful read
in parallel with the Inkfuse paper. It compares the two execution models
head to head with controlled benchmarks. Once you’ve seen those numbers it
becomes hard to defend either model as universally better, and the
ROF&#x2F;Inkfuse direction starts to look like the obvious thing to want.&lt;&#x2F;p&gt;
&lt;p&gt;There’s also &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;db.cs.cmu.edu&#x2F;papers&#x2F;2021&#x2F;ngom-damon2021.pdf&quot;&gt;Ngom et al. (DaMoN
2021)&lt;&#x2F;a&gt;, which I keep
coming back to whenever I think about the runtime layer around the
compiled code. Tangential to the CPS argument, but it shaped how I think
about where materialized state lives during execution, an important implementation
detail that is often not discussed in papers.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;where-i-think-the-framing-helps&quot;&gt;Where I think the framing helps&lt;&#x2F;h2&gt;
&lt;p&gt;I’m not claiming that calling Inkfuse a CPS engine gives you a new
optimization. It mostly doesn’t, because the people building these systems
already understand what they’re doing, they just describe it operationally.
The thing it gives me, as someone reading the papers and the code, is a
way to ask cleaner questions.&lt;&#x2F;p&gt;
&lt;p&gt;When I want to decide whether two operators can be fused, I can ask
whether the continuation between them stays inlined or has to be reified
into a buffer. For stage boundaries, the question becomes where in the
plan it pays to reify the continuation explicitly. And for understanding
fragments in Inkfuse, the question is what closed continuation a given
fragment encodes.&lt;&#x2F;p&gt;
&lt;p&gt;That last question is the one I find most useful. Inkfuse’s fragment
library is, in effect, a set of compiled continuations parameterized by
tuple type. You can see exactly what that library looks like in
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wagjamin&#x2F;inkfuse&#x2F;blob&#x2F;8b6b31b01da0&#x2F;src&#x2F;interpreter&#x2F;ExpressionFragmentizer.cpp#L45-L58&quot;&gt;ExpressionFragmentizer.cpp, L45-L58&lt;&#x2F;a&gt;,
the piece that builds fragments for binary expressions:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #BFBDB6); background-color: light-dark(#FFFFFF, #0D1017);&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt; ExpressionFragmentizer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;fragmentizeBinary&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt;   &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #5A6673);&quot;&gt; All binary operations on the same type.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;   for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; type &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; types&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;      for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;auto&lt;&#x2F;span&gt;&lt;span&gt; operation&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; op_types&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;         auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; pipe&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; pipes&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;emplace_back&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;         auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; iu_1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; generated_ius&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;emplace_back&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;         auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; iu_2 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; generated_ius&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;emplace_back&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;         auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; iu_out &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; generated_ius&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;emplace_back&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;            ExpressionOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;operation&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; {type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; type}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #AAD94C);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #FF8F40);&quot;&gt;         auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; op &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; pipe&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;attachSuboperator&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #59C2FF);&quot;&gt;            ExpressionSubop&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;build&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D2A6FF);&quot;&gt;nullptr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;iu_out}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;iu_1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;iu_2}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; operation&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         name &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F29668);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; op&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FFB454);&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #BFBDB6B3);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Every (type, op) pair becomes one named pipeline that gets baked into the
fragment shared object at build time. At query time, the runtime looks up
the fragment by name and chains it into the pipeline. The name in this case is the
defunctionalized continuation tag I mentioned earlier.&lt;&#x2F;p&gt;
&lt;p&gt;If you read the compile step as a CPS transform, the difference between
Inkfuse and a full HyPer-style compile is just &lt;em&gt;which&lt;&#x2F;em&gt; continuations get
reified ahead of time and which get built from source for this particular
query this is mostly a knob that you can tune and Inkfuse picks a setting
that favors latency without giving up much throughput.&lt;&#x2F;p&gt;
&lt;p&gt;The PL literature has two standard ways to eliminate first-class
continuations before runtime, and both show up here. One is to inline
every continuation call at compile time such that the continuation disappears
into the surrounding code effectively inlined and no closure survives. That is HyPer: one
monolithic function per pipeline and everything specialized to this query.
The other is defunctionalization where you give each continuation a name and
dispatch on it at runtime, that’s what Inkfuse does each fragment is a named
continuation and the runtime chains them by name.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;things-i-m-still-not-sure-about&quot;&gt;Things I’m still not sure about&lt;&#x2F;h2&gt;
&lt;p&gt;A few things I’ve been chewing on and haven’t worked out.&lt;&#x2F;p&gt;
&lt;p&gt;One is how far the analogy goes when you bring parallelism in.
Morsel-driven parallelism (also TUM) gives each worker a chunk of input
and runs the pipeline on it. In CPS terms each worker has its own
continuation, but they share the join-side state. I haven’t found a clean
way to express that and I don’t think there is one at least not from
the literature I’ve read and I haven’t looked much into parallelism
and concurrency in functional languages so there might be something there
to unearth.&lt;&#x2F;p&gt;
&lt;p&gt;Another is what happens at the operator boundaries that aren’t really
operators: null handling, type dispatch, NULL-aware comparisons, all of these
become branches inside the compiled pipeline that aren’t represented
in the plan, and I don’t know whether the CPS framing helps or hurts in
reasoning about them. In fact I think this is one reason why this entire framing
might be “too pure” in the practical sense.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Remy Wang, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;remy.wang&#x2F;blog&#x2F;cps.html&quot;&gt;Continuation-passing
style&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cs.cit.tum.de&#x2F;fileadmin&#x2F;w00cfj&#x2F;dis&#x2F;papers&#x2F;inkfuse.pdf&quot;&gt;Inkfuse
paper&lt;&#x2F;a&gt;
from TUM.&lt;&#x2F;li&gt;
&lt;li&gt;Menon, Mowry, Pavlo, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;db.cs.cmu.edu&#x2F;papers&#x2F;2017&#x2F;p1-menon.pdf&quot;&gt;Relaxed Operator Fusion for In-Memory
Databases&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Kersten et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;db.cs.cmu.edu&#x2F;papers&#x2F;2018&#x2F;p2209-kersten.pdf&quot;&gt;Everything You Always Wanted to Know About Compiled
and Vectorized Queries But Were Afraid to
Ask&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;db.cs.cmu.edu&#x2F;papers&#x2F;2021&#x2F;ngom-damon2021.pdf&quot;&gt;Ngom et al., DaMoN
2021&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Thomas Neumann, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vldb.org&#x2F;pvldb&#x2F;vol4&#x2F;p539-neumann.pdf&quot;&gt;Efficiently Compiling Efficient Query Plans for Modern
Hardware&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Inkfuse source:
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wagjamin&#x2F;inkfuse&quot;&gt;github.com&#x2F;wagjamin&#x2F;inkfuse&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-leaf&quot;&gt;
&lt;p&gt;In a classical Volcano plan a leaf is any operator with no
children — table scan, index scan, &lt;code&gt;VALUES&lt;&#x2F;code&gt;, or a materialized
subquery&#x2F;CTE reference. In pipeline-oriented compilation the
boundary moves: a pipeline can also start from the probe side of a
hash join or the read side of a grouping, both leaf-&lt;em&gt;like&lt;&#x2F;em&gt; from
that pipeline’s perspective because their build side has already
materialized into a hash table before this pipeline runs. &lt;a href=&quot;#fr-leaf-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-iu&quot;&gt;
&lt;p&gt;IU stands for “Information Unit” — Moerkotte’s term from &lt;em&gt;Building
Query Compilers&lt;&#x2F;em&gt; for a named value threaded through the plan. Think of
it as a variable: a column read from a scan, an intermediate expression
result, a group key. Each IU has a type and a lifetime; the compiled
code lowers it to a register or a stack slot. Operators declare which
IUs they consume from their children and which they produce for their
parents, and the plan is well-formed exactly when every IU a consumer
reads is produced somewhere above it in the tree. &lt;a href=&quot;#fr-iu-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-prefetch&quot;&gt;
&lt;p&gt;The stall is usually a hash-table probe. Looking up a key in a
table that’s too big for cache means a load that misses L1, L2, L3 and
ends at DRAM roughly 200-300 CPU cycles of waiting. In a tight one-tuple
at-a-time loop there’s nothing else to run during that wait,
so the core just sits. Software prefetching turns the wait into useful
work: with a buffer of pending keys, you issue a &lt;code&gt;prefetcht0&lt;&#x2F;code&gt; (x86;
&lt;code&gt;prfm&lt;&#x2F;code&gt; on ARM) on the bucket for &lt;code&gt;keys[i + k]&lt;&#x2F;code&gt; while you do the actual
probe for &lt;code&gt;keys[i]&lt;&#x2F;code&gt;. By the time iteration &lt;code&gt;i + k&lt;&#x2F;code&gt; comes around, its
bucket is already in L1 and the probe hits cache. The lookahead &lt;code&gt;k&lt;&#x2F;code&gt;
is tuned to memory latency divided by per-iteration cycle cost. Chen
et al., &lt;em&gt;Improving Hash Join Performance Through Prefetching&lt;&#x2F;em&gt;, is the
canonical reference. None of this works in a fully fused pipeline,
because there is no buffer of upcoming keys to prefetch from. &lt;a href=&quot;#fr-prefetch-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
    </channel>
</rss>
