Files
LithosAnanake/docs/fig_data_flow.svg

163 lines
9.8 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: data_flow Pages: 1 -->
<svg width="650pt" height="469pt"
viewBox="0.00 0.00 650.00 469.48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 465.48)">
<title>data_flow</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-465.48 646,-465.48 646,4 -4,4"/>
<text text-anchor="middle" x="321" y="-444.68" font-family="Helvetica Bold" font-size="16.00">StarForth Data Flow: From Execution Event to Optimized Lookup</text>
<!-- input -->
<g id="node1" class="node">
<title>input</title>
<ellipse fill="yellow" stroke="black" cx="440" cy="-408.61" rx="90.52" ry="26.74"/>
<text text-anchor="middle" x="440" y="-412.41" font-family="Helvetica,sans-Serif" font-size="14.00">Execution Event</text>
<text text-anchor="middle" x="440" y="-397.41" font-family="Helvetica,sans-Serif" font-size="14.00">(word executed)</text>
</g>
<!-- measure_freq -->
<g id="node2" class="node">
<title>measure_freq</title>
<polygon fill="#e8f5e9" stroke="black" points="514,-325.74 366,-325.74 366,-287.74 514,-287.74 514,-325.74"/>
<text text-anchor="middle" x="440" y="-310.54" font-family="Helvetica,sans-Serif" font-size="14.00">Increment</text>
<text text-anchor="middle" x="440" y="-295.54" font-family="Helvetica,sans-Serif" font-size="14.00">Frequency Counter</text>
</g>
<!-- input&#45;&gt;measure_freq -->
<g id="edge1" class="edge">
<title>input&#45;&gt;measure_freq</title>
<path fill="none" stroke="black" d="M440,-381.63C440,-367.72 440,-350.56 440,-336.28"/>
<polygon fill="black" stroke="black" points="443.5,-336.03 440,-326.03 436.5,-336.03 443.5,-336.03"/>
</g>
<!-- measure_window -->
<g id="node3" class="node">
<title>measure_window</title>
<polygon fill="#e8f5e9" stroke="black" points="122,-325.74 0,-325.74 0,-287.74 122,-287.74 122,-325.74"/>
<text text-anchor="middle" x="61" y="-310.54" font-family="Helvetica,sans-Serif" font-size="14.00">Record in</text>
<text text-anchor="middle" x="61" y="-295.54" font-family="Helvetica,sans-Serif" font-size="14.00">Rolling Window</text>
</g>
<!-- input&#45;&gt;measure_window -->
<g id="edge2" class="edge">
<title>input&#45;&gt;measure_window</title>
<path fill="none" stroke="black" d="M357.6,-397.38C294.33,-387.98 205.49,-371.38 131,-344.74 120.5,-340.98 109.62,-335.89 99.66,-330.68"/>
<polygon fill="black" stroke="black" points="101.27,-327.58 90.8,-325.91 97.94,-333.74 101.27,-327.58"/>
</g>
<!-- apply_decay -->
<g id="node4" class="node">
<title>apply_decay</title>
<polygon fill="#fff9c4" stroke="black" points="455.5,-217.74 332.5,-217.74 332.5,-179.74 455.5,-179.74 455.5,-217.74"/>
<text text-anchor="middle" x="394" y="-202.54" font-family="Helvetica,sans-Serif" font-size="14.00">Apply</text>
<text text-anchor="middle" x="394" y="-187.54" font-family="Helvetica,sans-Serif" font-size="14.00">Decay Function</text>
</g>
<!-- measure_freq&#45;&gt;apply_decay -->
<g id="edge3" class="edge">
<title>measure_freq&#45;&gt;apply_decay</title>
<path fill="none" stroke="black" d="M438.23,-287.7C436.25,-273.09 432.19,-252.27 424,-235.74 422.35,-232.41 420.33,-229.12 418.14,-225.96"/>
<polygon fill="black" stroke="black" points="420.88,-223.79 412.01,-217.99 415.32,-228.05 420.88,-223.79"/>
</g>
<!-- infer_window -->
<g id="node5" class="node">
<title>infer_window</title>
<polygon fill="#ffe0b2" stroke="black" points="156,-217.74 2,-217.74 2,-179.74 156,-179.74 156,-217.74"/>
<text text-anchor="middle" x="79" y="-202.54" font-family="Helvetica,sans-Serif" font-size="14.00">Infer Window Width</text>
<text text-anchor="middle" x="79" y="-187.54" font-family="Helvetica,sans-Serif" font-size="14.00">(Levene&#39;s Test)</text>
</g>
<!-- measure_window&#45;&gt;infer_window -->
<g id="edge4" class="edge">
<title>measure_window&#45;&gt;infer_window</title>
<path fill="none" stroke="black" d="M64.14,-287.28C66.91,-270.94 71,-246.84 74.19,-228.06"/>
<polygon fill="black" stroke="black" points="77.68,-228.44 75.9,-217.99 70.78,-227.27 77.68,-228.44"/>
</g>
<!-- infer_slope -->
<g id="node6" class="node">
<title>infer_slope</title>
<polygon fill="#ffe0b2" stroke="black" points="314,-217.74 174,-217.74 174,-179.74 314,-179.74 314,-217.74"/>
<text text-anchor="middle" x="244" y="-202.54" font-family="Helvetica,sans-Serif" font-size="14.00">Infer Decay Slope</text>
<text text-anchor="middle" x="244" y="-187.54" font-family="Helvetica,sans-Serif" font-size="14.00">(Exp. Regression)</text>
</g>
<!-- measure_window&#45;&gt;infer_slope -->
<g id="edge5" class="edge">
<title>measure_window&#45;&gt;infer_slope</title>
<path fill="none" stroke="black" d="M75.75,-287.58C89.39,-271.86 110.96,-249.56 134,-235.74 143.37,-230.12 153.72,-225.26 164.21,-221.1"/>
<polygon fill="black" stroke="black" points="165.73,-224.27 173.86,-217.47 163.27,-217.72 165.73,-224.27"/>
</g>
<!-- reorganize -->
<g id="node7" class="node">
<title>reorganize</title>
<polygon fill="#f8bbd0" stroke="black" points="364.5,-128.74 229.5,-128.74 229.5,-90.74 364.5,-90.74 364.5,-128.74"/>
<text text-anchor="middle" x="297" y="-113.54" font-family="Helvetica,sans-Serif" font-size="14.00">Reorganize</text>
<text text-anchor="middle" x="297" y="-98.54" font-family="Helvetica,sans-Serif" font-size="14.00">Hot&#45;Words Cache</text>
</g>
<!-- apply_decay&#45;&gt;reorganize -->
<g id="edge6" class="edge">
<title>apply_decay&#45;&gt;reorganize</title>
<path fill="none" stroke="black" d="M373.9,-179.71C359.73,-167 340.55,-149.8 324.89,-135.76"/>
<polygon fill="black" stroke="black" points="326.85,-132.81 317.07,-128.74 322.18,-138.03 326.85,-132.81"/>
</g>
<!-- infer_window&#45;&gt;reorganize -->
<g id="edge7" class="edge">
<title>infer_window&#45;&gt;reorganize</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M124.17,-179.71C158.51,-166.01 205.91,-147.09 242.39,-132.53"/>
<polygon fill="black" stroke="black" points="243.9,-135.7 251.89,-128.74 241.3,-129.2 243.9,-135.7"/>
<text text-anchor="middle" x="225" y="-150.54" font-family="Helvetica,sans-Serif" font-size="14.00">tuning</text>
</g>
<!-- infer_slope&#45;&gt;reorganize -->
<g id="edge8" class="edge">
<title>infer_slope&#45;&gt;reorganize</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M254.98,-179.71C262.44,-167.47 272.44,-151.06 280.81,-137.32"/>
<polygon fill="black" stroke="black" points="283.82,-139.1 286.03,-128.74 277.84,-135.46 283.82,-139.1"/>
<text text-anchor="middle" x="297" y="-150.54" font-family="Helvetica,sans-Serif" font-size="14.00">tuning</text>
</g>
<!-- output -->
<g id="node8" class="node">
<title>output</title>
<ellipse fill="lightgreen" stroke="black" cx="468" cy="-26.87" rx="100.32" ry="26.74"/>
<text text-anchor="middle" x="468" y="-30.67" font-family="Helvetica,sans-Serif" font-size="14.00">Optimized Lookup</text>
<text text-anchor="middle" x="468" y="-15.67" font-family="Helvetica,sans-Serif" font-size="14.00">(O(1) cache hit)</text>
</g>
<!-- reorganize&#45;&gt;output -->
<g id="edge9" class="edge">
<title>reorganize&#45;&gt;output</title>
<path fill="none" stroke="black" d="M335.38,-90.59C357.55,-80.1 385.88,-66.7 410.66,-54.99"/>
<polygon fill="black" stroke="black" points="412.42,-58.03 419.96,-50.59 409.43,-51.7 412.42,-58.03"/>
</g>
<!-- output&#45;&gt;input -->
<g id="edge10" class="edge">
<title>output&#45;&gt;input</title>
<path fill="none" stroke="red" stroke-dasharray="1,5" d="M507.17,-51.72C524.92,-65.75 542,-85.33 542,-108.74 542,-307.74 542,-307.74 542,-307.74 542,-338.22 518.45,-362.47 493.99,-379.43"/>
<polygon fill="red" stroke="red" points="491.76,-376.71 485.33,-385.13 495.61,-382.56 491.76,-376.71"/>
<text text-anchor="middle" x="592" y="-202.54" font-family="Helvetica,sans-Serif" font-size="14.00">increased</text>
<text text-anchor="middle" x="592" y="-187.54" font-family="Helvetica,sans-Serif" font-size="14.00">execution rate</text>
</g>
<!-- heartbeat -->
<g id="node9" class="node">
<title>heartbeat</title>
<polygon fill="#e1bee7" stroke="black" points="244,-344.74 140,-306.74 244,-268.74 348,-306.74 244,-344.74"/>
<text text-anchor="middle" x="244" y="-310.54" font-family="Helvetica,sans-Serif" font-size="14.00">Heartbeat</text>
<text text-anchor="middle" x="244" y="-295.54" font-family="Helvetica,sans-Serif" font-size="14.00">Coordination</text>
</g>
<!-- heartbeat&#45;&gt;apply_decay -->
<g id="edge11" class="edge">
<title>heartbeat&#45;&gt;apply_decay</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M279.58,-281.36C293.23,-271.91 308.91,-260.92 323,-250.74 332.01,-244.23 334.02,-242.28 343,-235.74 348.29,-231.89 353.92,-227.85 359.44,-223.93"/>
<polygon fill="black" stroke="black" points="361.81,-226.54 367.95,-217.91 357.77,-220.83 361.81,-226.54"/>
<text text-anchor="middle" x="381.5" y="-239.54" font-family="Helvetica,sans-Serif" font-size="14.00">tick trigger</text>
</g>
<!-- heartbeat&#45;&gt;infer_window -->
<g id="edge12" class="edge">
<title>heartbeat&#45;&gt;infer_window</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M206.97,-281.95C179.71,-264.44 142.81,-240.73 115.64,-223.28"/>
<polygon fill="black" stroke="black" points="117.49,-220.3 107.18,-217.84 113.7,-226.19 117.49,-220.3"/>
<text text-anchor="middle" x="195.5" y="-239.54" font-family="Helvetica,sans-Serif" font-size="14.00">tick trigger</text>
</g>
<!-- heartbeat&#45;&gt;infer_slope -->
<g id="edge13" class="edge">
<title>heartbeat&#45;&gt;infer_slope</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M244,-268.67C244,-255.37 244,-240.59 244,-228.15"/>
<polygon fill="black" stroke="black" points="247.5,-227.9 244,-217.9 240.5,-227.9 247.5,-227.9"/>
<text text-anchor="middle" x="282.5" y="-239.54" font-family="Helvetica,sans-Serif" font-size="14.00">tick trigger</text>
</g>
</g>
</svg>