summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@kernel.org>2024-01-22 12:17:51 -0800
committerPaul E. McKenney <paulmck@kernel.org>2024-01-22 12:20:09 -0800
commit9caac64bfabf85439c480ce928dddef969354369 (patch)
tree1c8bbdccef7ea254d9ba40c0634a557c8b37a1d3
parentd1a5d020205ba69caefd59dcc514f425c566159e (diff)
downloadperfbook-9caac64bfabf85439c480ce928dddef969354369.tar.gz
memorder: Add quick quiz on x86 memory ordering
TL;DR: x86 CPUs have store buffers and they are not afraid to use them! Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
-rw-r--r--CodeSamples/cpu/data/coe-nvals.pngbin0 -> 6333 bytes
-rw-r--r--CodeSamples/cpu/data/coe.pngbin0 -> 4859 bytes
-rw-r--r--CodeSamples/cpu/data/fre.pngbin0 -> 6681 bytes
-rw-r--r--CodeSamples/cpu/data/rfe.pngbin0 -> 6739 bytes
-rw-r--r--memorder/co-hopes.svg524
-rw-r--r--memorder/fr-hopes.svg535
-rw-r--r--memorder/memorder.tex144
-rw-r--r--memorder/rf-hopes.svg549
8 files changed, 1751 insertions, 1 deletions
diff --git a/CodeSamples/cpu/data/coe-nvals.png b/CodeSamples/cpu/data/coe-nvals.png
new file mode 100644
index 00000000..9df9130e
--- /dev/null
+++ b/CodeSamples/cpu/data/coe-nvals.png
Binary files differ
diff --git a/CodeSamples/cpu/data/coe.png b/CodeSamples/cpu/data/coe.png
new file mode 100644
index 00000000..37f197ac
--- /dev/null
+++ b/CodeSamples/cpu/data/coe.png
Binary files differ
diff --git a/CodeSamples/cpu/data/fre.png b/CodeSamples/cpu/data/fre.png
new file mode 100644
index 00000000..9410905b
--- /dev/null
+++ b/CodeSamples/cpu/data/fre.png
Binary files differ
diff --git a/CodeSamples/cpu/data/rfe.png b/CodeSamples/cpu/data/rfe.png
new file mode 100644
index 00000000..1f7cc9e2
--- /dev/null
+++ b/CodeSamples/cpu/data/rfe.png
Binary files differ
diff --git a/memorder/co-hopes.svg b/memorder/co-hopes.svg
new file mode 100644
index 00000000..cfc9ffa4
--- /dev/null
+++ b/memorder/co-hopes.svg
@@ -0,0 +1,524 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+
+<!-- Title: G Pages: 1 -->
+
+<svg
+ width="317.83292"
+ height="277.43112"
+ viewBox="0 0 297.96836 260.09167"
+ id="svg2"
+ version="1.1"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ sodipodi:docname="co-hopes.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata92">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs90">
+ <marker
+ style="overflow:visible"
+ id="Arrow2Lstart"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lstart"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round"
+ id="path25955" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path4240"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ id="path4240-7"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-6-0"
+ style="overflow:visible">
+ <path
+ id="path4240-7-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-9"
+ style="overflow:visible">
+ <path
+ id="path4240-78"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-3"
+ style="overflow:visible">
+ <path
+ id="path4240-8"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2Lstart-7"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lstart"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round"
+ id="path25955-8" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-3-7"
+ style="overflow:visible">
+ <path
+ id="path4240-8-4"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98"
+ style="overflow:visible">
+ <path
+ id="path4240-85"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4-1"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4-0"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-32"
+ style="overflow:visible">
+ <path
+ id="path4240-4"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2245"
+ inkscape:window-height="1528"
+ id="namedview88"
+ showgrid="false"
+ fit-margin-left="5"
+ fit-margin-top="5"
+ fit-margin-right="5"
+ fit-margin-bottom="5"
+ inkscape:zoom="1.8568507"
+ inkscape:cx="283.81388"
+ inkscape:cy="279.77478"
+ inkscape:window-x="523"
+ inkscape:window-y="318"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2"
+ inkscape:pagecheckerboard="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.60492;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-32)"
+ d="m 7.4624344,238.12321 283.6869856,0.883"
+ id="path3925-9-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#020000;fill-opacity:1;stroke:none"
+ x="150.71912"
+ y="255.17691"
+ id="text4659-7"><tspan
+ sodipodi:role="line"
+ id="tspan4661-1"
+ x="150.71912"
+ y="255.17691"
+ style="font-weight:bold;font-size:12.0492px;line-height:1.25;font-family:sans-serif;fill:#020000;fill-opacity:1">Time</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98)"
+ d="M 100.48954,97.698704 123.3811,64.679654"
+ id="path3011-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.60492, 1.60492;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 67.264511,69.665924 67.376127,178.48693"
+ id="path3011-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="54.794476"
+ y="81.018341"
+ id="text3969-7"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9"
+ x="54.794476"
+ y="81.018341"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">t</tspan></text>
+ <g
+ id="g5986"
+ transform="translate(-100.17213,91.543189)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="138.06879"
+ y="-46.547588"
+ id="text3901"><tspan
+ sodipodi:role="line"
+ id="tspan3903"
+ x="138.06879"
+ y="-46.547588"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">Winning</tspan><tspan
+ sodipodi:role="line"
+ x="138.06879"
+ y="-34.510662"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan4908">Store</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856"
+ width="59.376099"
+ height="44.483562"
+ x="108.10332"
+ y="-66.360825" />
+ </g>
+ <g
+ id="g5986-8"
+ transform="translate(8.9281865,236.57587)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="137.7561"
+ y="-52.650684"
+ id="text3901-9"><tspan
+ sodipodi:role="line"
+ x="137.7561"
+ y="-52.650684"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan4908-0">Counter-</tspan><tspan
+ sodipodi:role="line"
+ x="137.7561"
+ y="-40.613758"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan13340">Intuitive</tspan><tspan
+ sodipodi:role="line"
+ x="137.7561"
+ y="-28.576834"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan10005">Store</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856-7"
+ width="59.376099"
+ height="44.483562"
+ x="108.10332"
+ y="-66.360825" />
+ </g>
+ <g
+ id="g5986-8-0"
+ transform="translate(-66.989873,164.05953)">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856-7-3"
+ width="59.376099"
+ height="44.483562"
+ x="108.10332"
+ y="-66.360825" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="138.06879"
+ y="-46.547588"
+ id="text3901-9-1"><tspan
+ sodipodi:role="line"
+ x="138.06879"
+ y="-46.547588"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan4908-0-0">Other</tspan><tspan
+ sodipodi:role="line"
+ x="138.06879"
+ y="-34.510662"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan10005-1">Store</tspan></text>
+ </g>
+ <g
+ id="g25404"
+ transform="translate(-70.710468,137.73241)">
+ <g
+ id="g18822"
+ transform="translate(5.5993212,-4.9034252)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="261.06393"
+ y="-88.045357"
+ id="text3901-61"><tspan
+ sodipodi:role="line"
+ id="tspan3903-8"
+ x="261.06393"
+ y="-88.045357"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">Old</tspan><tspan
+ sodipodi:role="line"
+ x="261.06393"
+ y="-76.00843"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17350">Value</tspan></text>
+ <ellipse
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path18736"
+ cx="261.05334"
+ cy="-85.616814"
+ rx="19.307709"
+ ry="19.11109" />
+ </g>
+ <g
+ id="g18822-4"
+ transform="translate(-59.098506,-4.9034252)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="261.06393"
+ y="-88.045357"
+ id="text3901-61-5"><tspan
+ sodipodi:role="line"
+ id="tspan3903-8-1"
+ x="261.06393"
+ y="-88.045357"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">Older</tspan><tspan
+ sodipodi:role="line"
+ x="261.06393"
+ y="-76.00843"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17350-0">Value</tspan></text>
+ <ellipse
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path18736-3"
+ cx="261.05334"
+ cy="-85.616814"
+ rx="19.307709"
+ ry="19.11109" />
+ </g>
+ <g
+ id="g18822-7"
+ transform="translate(70.297177,-4.9034252)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="261.06393"
+ y="-88.045357"
+ id="text3901-61-8"><tspan
+ sodipodi:role="line"
+ id="tspan3903-8-8"
+ x="261.06393"
+ y="-88.045357"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">Final</tspan><tspan
+ sodipodi:role="line"
+ x="261.06393"
+ y="-76.00843"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17350-6">Value</tspan></text>
+ <ellipse
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path18736-0"
+ cx="261.05334"
+ cy="-85.616814"
+ rx="19.307709"
+ ry="19.11109" />
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-6)"
+ d="m 221.48915,-90.599589 24.56578,0.143648"
+ id="path3011-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-6-0)"
+ d="m 286.18701,-90.599589 24.56578,0.143648"
+ id="path3011-6-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.60492, 1.60492;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 41.045925,69.120344 0.06752,59.936916"
+ id="path3011-5-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend-3)"
+ d="m 65.494834,88.312174 -22.669426,0.20855"
+ id="path3011-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="91.284821"
+ y="174.49078"
+ id="text3969-7-1"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9-9"
+ x="91.284821"
+ y="174.49078"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">-t</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="39.385769"
+ y="169.91011"
+ id="text3969-7-1-9"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9-9-9"
+ x="39.385769"
+ y="169.91011"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">co</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart-7);marker-end:url(#Arrow2Lend-3-7)"
+ d="m 116.4507,178.4363 -49.074573,0.0506"
+ id="path3011-3-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-4)"
+ d="M 147.1138,168.99739 190.54304,67.014124"
+ id="path3011-8-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-4-1)"
+ d="m 67.307283,25.182364 c 0,0 60.215197,-20.8449496 91.397557,-20.0726096 31.45312,0.77905 91.07578,24.7861696 91.07578,24.7861696"
+ id="path3011-8-7-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-4-0)"
+ d="m 117.03151,214.69861 c 0,0 -65.269714,-18.52484 -84.908661,-43.54604 C 10.650955,143.79609 7.9311844,69.665924 7.9311844,69.665924"
+ id="path3011-8-7-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csc" />
+</svg>
diff --git a/memorder/fr-hopes.svg b/memorder/fr-hopes.svg
new file mode 100644
index 00000000..1e15611b
--- /dev/null
+++ b/memorder/fr-hopes.svg
@@ -0,0 +1,535 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+
+<!-- Title: G Pages: 1 -->
+
+<svg
+ width="241.16232"
+ height="280.5"
+ viewBox="0 0 226.08968 262.96874"
+ id="svg2"
+ version="1.1"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ sodipodi:docname="fr-hopes.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata92">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs90">
+ <marker
+ style="overflow:visible"
+ id="Arrow2Lstart"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lstart"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round"
+ id="path25955" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path4240"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ id="path4240-7"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-6-0"
+ style="overflow:visible">
+ <path
+ id="path4240-7-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-9"
+ style="overflow:visible">
+ <path
+ id="path4240-78"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-3"
+ style="overflow:visible">
+ <path
+ id="path4240-8"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2Lstart-7"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lstart"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round"
+ id="path25955-8" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-3-7"
+ style="overflow:visible">
+ <path
+ id="path4240-8-4"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98"
+ style="overflow:visible">
+ <path
+ id="path4240-85"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4-1"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4-0"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-32"
+ style="overflow:visible">
+ <path
+ id="path4240-4"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-8"
+ style="overflow:visible">
+ <path
+ id="path4240-85-33"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-47"
+ style="overflow:visible">
+ <path
+ id="path4240-85-6"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2245"
+ inkscape:window-height="1528"
+ id="namedview88"
+ showgrid="false"
+ fit-margin-left="5"
+ fit-margin-top="5"
+ fit-margin-right="5"
+ fit-margin-bottom="5"
+ inkscape:zoom="1.8568507"
+ inkscape:cx="281.12115"
+ inkscape:cy="235.61399"
+ inkscape:window-x="523"
+ inkscape:window-y="318"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2"
+ inkscape:pagecheckerboard="0" />
+ <g
+ id="g28235"
+ transform="translate(-37.412469,85.433725)">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.60492;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-32)"
+ d="m 42.100319,155.62321 214.582971,-0.0935"
+ id="path3925-9-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#020000;fill-opacity:1;stroke:none"
+ x="150.71912"
+ y="172.67691"
+ id="text4659-7"><tspan
+ sodipodi:role="line"
+ id="tspan4661-1"
+ x="150.71912"
+ y="172.67691"
+ style="font-weight:bold;font-size:12.0492px;line-height:1.25;font-family:sans-serif;fill:#020000;fill-opacity:1">Time</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98)"
+ d="M 121.44981,109.34999 97.714603,70.115993"
+ id="path3011-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-8)"
+ d="m 139.77918,143.11599 19.93909,31.29133"
+ id="path3011-8-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.60492, 1.60492;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 64.489574,70.724649 65.04047,215.43837"
+ id="path3011-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="52.019539"
+ y="82.077065"
+ id="text3969-7"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9"
+ x="52.019539"
+ y="82.077065"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">t</tspan></text>
+ <g
+ id="g5986"
+ transform="translate(-102.94707,171.35191)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="137.73024"
+ y="-40.613758"
+ id="text3901"><tspan
+ sodipodi:role="line"
+ x="137.73024"
+ y="-40.613758"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan4908">Store</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856"
+ width="59.376099"
+ height="44.483562"
+ x="108.10332"
+ y="-66.360825" />
+ </g>
+ <g
+ id="g5986-8"
+ transform="translate(6.1532492,241.38459)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="153.26526"
+ y="-52.746971"
+ id="text3901-9"><tspan
+ sodipodi:role="line"
+ x="153.26526"
+ y="-52.746971"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan13340">Counter-Intuitive</tspan><tspan
+ sodipodi:role="line"
+ x="153.26526"
+ y="-40.710045"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan10005">Load Still Gets</tspan><tspan
+ sodipodi:role="line"
+ x="153.26526"
+ y="-28.67312"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan12149">Old Value</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856-7"
+ width="90.352081"
+ height="44.121723"
+ x="108.10332"
+ y="-66.360825" />
+ </g>
+ <g
+ id="g5986-8-0"
+ transform="translate(-69.76481,91.993255)">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856-7-3"
+ width="59.376099"
+ height="44.483562"
+ x="108.10332"
+ y="-66.360825" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="137.55392"
+ y="-46.547588"
+ id="text3901-9-1"><tspan
+ sodipodi:role="line"
+ x="137.55392"
+ y="-46.547588"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan10005-1">Load Gets</tspan><tspan
+ sodipodi:role="line"
+ x="137.55392"
+ y="-34.510662"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17247">Old Value</tspan></text>
+ </g>
+ <g
+ id="g25404"
+ transform="translate(-137.23541,217.54113)">
+ <g
+ id="g18822"
+ transform="translate(5.5993212,-4.9034252)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="261.06393"
+ y="-88.045357"
+ id="text3901-61"><tspan
+ sodipodi:role="line"
+ id="tspan3903-8"
+ x="261.06393"
+ y="-88.045357"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">Old</tspan><tspan
+ sodipodi:role="line"
+ x="261.06393"
+ y="-76.00843"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17350">Value</tspan></text>
+ <ellipse
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path18736"
+ cx="261.05334"
+ cy="-85.616814"
+ rx="19.307709"
+ ry="19.11109" />
+ </g>
+ <g
+ id="g18822-7"
+ transform="translate(70.297177,-4.9034252)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="261.06393"
+ y="-88.045357"
+ id="text3901-61-8"><tspan
+ sodipodi:role="line"
+ id="tspan3903-8-8"
+ x="261.06393"
+ y="-88.045357"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">New</tspan><tspan
+ sodipodi:role="line"
+ x="261.06393"
+ y="-76.00843"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17350-6">Value</tspan></text>
+ <ellipse
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path18736-0"
+ cx="261.05334"
+ cy="-85.616814"
+ rx="19.307709"
+ ry="19.11109" />
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-6-0)"
+ d="m 286.18701,-90.599589 24.56578,0.143648"
+ id="path3011-6-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.60492, 1.60492;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 38.270988,70.179069 0.576043,35.071321"
+ id="path3011-5-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend-3)"
+ d="m 62.719897,89.370899 -22.669426,0.20855"
+ id="path3011-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="88.50988"
+ y="192.42451"
+ id="text3969-7-1"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9-9"
+ x="88.50988"
+ y="192.42451"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">-t</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart-7);marker-end:url(#Arrow2Lend-3-7)"
+ d="m 113.67576,196.37002 -49.07457,0.0506"
+ id="path3011-3-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-4)"
+ d="M 114.25656,175.02377 64.532349,149.47465"
+ id="path3011-8-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-4-1)"
+ d="m 24.131512,105.08492 c 0,0 -13.121198,-82.322622 22.768636,-93.707 31.720692,-10.0619123 70.167932,-7.3257963 95.300722,3.141997 23.78711,9.907314 31.13639,22.714557 40.89157,38.752643 8.92787,14.677957 12.83108,53.68442 12.83108,53.68442"
+ id="path3011-8-7-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csssc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="92.023941"
+ y="158.27304"
+ id="text3969-7-1-8"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9-9-0"
+ x="92.023941"
+ y="158.27304"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">fr</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="80.420937"
+ y="94.06945"
+ id="text3969-7-1-8-9"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9-9-0-0"
+ x="80.420937"
+ y="94.06945"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">fr</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-47)"
+ d="M 86.911669,70.696422 64.532349,104.99109"
+ id="path3011-8-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+</svg>
diff --git a/memorder/memorder.tex b/memorder/memorder.tex
index da56a699..1c85b22c 100644
--- a/memorder/memorder.tex
+++ b/memorder/memorder.tex
@@ -2791,7 +2791,7 @@ counter-temporal nature of load-to-store and store-to-store ordering.\footnote{
(\path{C-2+2W+o-wmb-o+o-wmb-o.litmus}),
research shows that the cycle is prohibited, even in weakly
ordered systems such as \ARM\ and Power~\cite{test6-pdf}.
- Given that, are store-to-store really \emph{always}
+ Given that, is store-to-store ordering really \emph{always}
counter-temporal???
}\QuickQuizAnswer{
This litmus test is indeed a very interesting curiosity.
@@ -2838,6 +2838,148 @@ to have executed at an earlier time than did the load.
This means that carefully constructed programs can rely on the
passage of time itself as a memory-ordering operation.
+\QuickQuiz{
+ Why don't we just stick to sanely ordered CPU families like x86,
+ so that time will \emph{always} be on our side???
+}\QuickQuizAnswer{
+ Sorry to be the one to break it to you, but x86 CPUs have
+ store buffers and they are not afraid to use them.
+
+ The data shown in
+ \crefrange{fig:memorder:x86 CPUs Can Disagree}{fig:memorder:Store-to-Load is Temporal on x86}
+ was obtained from a two-socket x86 system having a total of 80
+ hardware threads.\footnote{
+ \co{Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz},
+ for those wanting more details.}
+
+\begin{figure}
+\centering
+\resizebox{\columnwidth}{!}{\includegraphics{CodeSamples/cpu/data/coe-nvals}}
+\caption{x86 CPUs Can Disagree}
+\label{fig:memorder:x86 CPUs Can Disagree}
+\end{figure}
+
+ \Cref{fig:memorder:x86 CPUs Can Disagree} is from a program
+ similar to the one that generated
+ \cref{fig:memorder:A Variable With More Simultaneous Values}
+ on
+ \cpageref{fig:memorder:A Variable With More Simultaneous Values},
+ but showing the number of distinct opinions per unit time, where
+ each timestamp period is 0.5~nanoseconds.\footnote{
+ Recall that each CPU writes its own number to a single
+ shared variable, which each CPU repeatedly polls,
+ recording time and value at each change in value.}
+ As you can see, there is a significant period of time during
+ which there are more than 40 distinct opinions as to the value
+ of a single shared variable.
+ Even on x86.
+
+\begin{figure}
+\centering
+\resizebox{\columnwidth}{!}{\includegraphics{memorder/co-hopes}}
+\caption{Is Store-to-Store Counter-Temporal on x86?}
+\label{fig:memorder:Is Store-to-Store Counter-Temporal on x86?}
+\end{figure}
+
+ But perhaps we might hope that on x86, the last CPU to execute its
+ store in global time order would ``win'', that is, the final value
+ of the shared variable would be that of that last store.
+ If so, any store starting after the ``winning'' store finished would
+ overwrite the winning store.
+ In contrast, we know that on weakly ordered systems, a
+ counter-intuitive store such as that shown at the bottom of
+ \cref{fig:memorder:Is Store-to-Store Counter-Temporal on x86?}
+ could read the old value, despite the fact that it started
+ $t$ timestamp periods after the winning store completed,
+ as depicted in the figure by the $-t$.\footnote{
+ That is completed from the viewpoint of the instruction
+ stream containing that store.
+ The value stored might well remain in the store buffer
+ for long afterwards.}
+
+\begin{figure}
+\centering
+\resizebox{\columnwidth}{!}{\includegraphics{CodeSamples/cpu/data/coe}}
+\caption{Store-to-Store is Counter-Temporal on x86}
+\label{fig:memorder:Store-to-Store is Counter-Temporal on x86}
+\end{figure}
+
+ However,
+ \cref{fig:memorder:Store-to-Store is Counter-Temporal on x86}
+ dashes any fond hope of x86 refusing to indulge in
+ counter-intuitive stores.
+ The data in this figure summarizes the results from 1,000 runs
+ of the type that generated
+ \cref{fig:memorder:x86 CPUs Can Disagree},
+ and is a histogram of the minimum time elapsed from the start of
+ a non-winning CPU's store and the end of the winning CPU's store.
+ Of course, if this value is negative, the winning store completed
+ (though its value might not have propagated past the store buffer)
+ before some other store even started.
+ And the negative-time data points in that figure show that this
+ counter-temporal behavior really happens a small but significant
+ fraction of the time, even on x86.
+
+\begin{figure}
+\centering
+\resizebox{2.2in}{!}{\includegraphics{memorder/fr-hopes}}
+\caption{Is Load-to-Store Counter-Temporal on x86?}
+\label{fig:memorder:Is Load-to-Store Counter-Temporal on x86?}
+\end{figure}
+
+ But perhaps we could instead hope that once a store had
+ executed, any future load from that same variable might
+ be guaranteed to return the new value.
+ In contrast, we know that on weakly ordered systems, a
+ counter-intuitive load such as that shown at the bottom
+ of
+ \cref{fig:memorder:Is Load-to-Store Counter-Temporal on x86?}
+ could return the old value, despite having started $t$
+ timestamp periods after the end of the store, again, as
+ depicted in the figure by the $-t$.
+
+\begin{figure}
+\centering
+\resizebox{\columnwidth}{!}{\includegraphics{CodeSamples/cpu/data/fre}}
+\caption{Load-to-Store is Counter-Temporal on x86}
+\label{fig:memorder:Load-to-Store is Counter-Temporal on x86}
+\end{figure}
+
+ However,
+ \cref{fig:memorder:Load-to-Store is Counter-Temporal on x86}
+ dashes any fond hopes that loads executing after a given store
+ would see that store's value (or some later value).
+ This data is generated by a program in which the parent thread
+ spawns the children, each of which polls a shared variable.
+ After all the children are running, the parent writes a new
+ value to the shared variable.
+ The quantity histogrammed in the figure is the time from just
+ after the store until just before the last load of the old value.
+
+\begin{figure}
+\centering
+\resizebox{\columnwidth}{!}{\includegraphics{memorder/rf-hopes}}
+\caption{Is Store-to-Load Counter-Temporal on x86?}
+\label{fig:memorder:Is Store-to-Load Counter-Temporal on x86?}
+\end{figure}
+
+\begin{figure}
+\centering
+\resizebox{\columnwidth}{!}{\includegraphics{CodeSamples/cpu/data/rfe}}
+\caption{Store-to-Load is Temporal on x86}
+\label{fig:memorder:Store-to-Load is Temporal on x86}
+\end{figure}
+
+ It is only reasonable to assume that a load that ends before
+ a store starts will be unable to load that store's value,
+ as shown in
+ \cref{fig:memorder:Is Store-to-Load Counter-Temporal on x86?},
+ even on weakly ordered systems.
+ And as shown in
+ \cref{fig:memorder:Store-to-Load is Temporal on x86},
+ in this case, our temporal hopes have been fulfilled.
+}\QuickQuizEnd
+
\begin{figure}
\centering
\resizebox{\twocolumnwidth}{!}{\includegraphics{memorder/rf}}
diff --git a/memorder/rf-hopes.svg b/memorder/rf-hopes.svg
new file mode 100644
index 00000000..e1f5ed3a
--- /dev/null
+++ b/memorder/rf-hopes.svg
@@ -0,0 +1,549 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+
+<!-- Title: G Pages: 1 -->
+
+<svg
+ width="366.21548"
+ height="258.20551"
+ viewBox="0 0 343.32702 242.06765"
+ id="svg2"
+ version="1.1"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ sodipodi:docname="rf-hopes.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata92">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs90">
+ <marker
+ style="overflow:visible"
+ id="Arrow2Lstart"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lstart"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round"
+ id="path25955" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path4240"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ id="path4240-7"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-6-0"
+ style="overflow:visible">
+ <path
+ id="path4240-7-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-9"
+ style="overflow:visible">
+ <path
+ id="path4240-78"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-3"
+ style="overflow:visible">
+ <path
+ id="path4240-8"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2Lstart-7"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lstart"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round"
+ id="path25955-8" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-3-7"
+ style="overflow:visible">
+ <path
+ id="path4240-8-4"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98"
+ style="overflow:visible">
+ <path
+ id="path4240-85"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4-1"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4-0"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-32"
+ style="overflow:visible">
+ <path
+ id="path4240-4"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-8"
+ style="overflow:visible">
+ <path
+ id="path4240-85-33"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-47"
+ style="overflow:visible">
+ <path
+ id="path4240-85-6"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-98-4-1-6"
+ style="overflow:visible">
+ <path
+ id="path4240-85-3-3-4"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2245"
+ inkscape:window-height="1528"
+ id="namedview88"
+ showgrid="false"
+ fit-margin-left="5"
+ fit-margin-top="5"
+ fit-margin-right="5"
+ fit-margin-bottom="5"
+ inkscape:zoom="1.8568507"
+ inkscape:cx="278.96696"
+ inkscape:cy="213.53359"
+ inkscape:window-x="523"
+ inkscape:window-y="318"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2"
+ inkscape:pagecheckerboard="0" />
+ <g
+ id="g28235"
+ transform="translate(79.824874,64.53263)">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.60492;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-32)"
+ d="m -73.56909,154.54996 330.25238,0.97975"
+ id="path3925-9-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#020000;fill-opacity:1;stroke:none"
+ x="92.883438"
+ y="172.67691"
+ id="text4659-7"><tspan
+ sodipodi:role="line"
+ id="tspan4661-1"
+ x="92.883438"
+ y="172.67691"
+ style="font-weight:bold;font-size:12.0492px;line-height:1.25;font-family:sans-serif;fill:#020000;fill-opacity:1">Time</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-8)"
+ d="m 294.9588,118.49708 -41.86867,29.80789"
+ id="path3011-8-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.60492, 1.60492;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 121.72692,49.823554 0.5692,131.932656"
+ id="path3011-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="109.25688"
+ y="61.175968"
+ id="text3969-7"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9"
+ x="109.25688"
+ y="61.175968"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">-t</tspan></text>
+ <g
+ id="g5986"
+ transform="translate(14.290273,150.45081)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="137.73024"
+ y="-40.613758"
+ id="text3901"><tspan
+ sodipodi:role="line"
+ x="137.73024"
+ y="-40.613758"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan4908">Store</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856"
+ width="59.376099"
+ height="44.483562"
+ x="108.10332"
+ y="-66.360825" />
+ </g>
+ <g
+ id="g5986-8"
+ transform="translate(-102.94707,71.517075)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="153.26526"
+ y="-52.746971"
+ id="text3901-9"><tspan
+ sodipodi:role="line"
+ x="153.26526"
+ y="-52.746971"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan13340">Counter-Intuitive</tspan><tspan
+ sodipodi:role="line"
+ x="153.26526"
+ y="-40.710045"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan10005">Load Gets</tspan><tspan
+ sodipodi:role="line"
+ x="153.26526"
+ y="-28.67312"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan12149">New Value</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856-7"
+ width="90.352081"
+ height="44.121723"
+ x="108.10332"
+ y="-66.360825" />
+ </g>
+ <g
+ id="g5986-8-0"
+ transform="translate(85.610721,214.66579)">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5856-7-3"
+ width="59.376099"
+ height="44.483562"
+ x="108.10332"
+ y="-66.360825" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="137.55392"
+ y="-46.547588"
+ id="text3901-9-1"><tspan
+ sodipodi:role="line"
+ x="137.55392"
+ y="-46.547588"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan10005-1">Load Gets</tspan><tspan
+ sodipodi:role="line"
+ x="137.55392"
+ y="-34.510662"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17247">New Value</tspan></text>
+ </g>
+ <g
+ id="g25404"
+ transform="translate(-19.998067,196.64003)">
+ <g
+ id="g18822"
+ transform="translate(5.5993212,-4.9034252)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="261.06393"
+ y="-88.045357"
+ id="text3901-61"><tspan
+ sodipodi:role="line"
+ id="tspan3903-8"
+ x="261.06393"
+ y="-88.045357"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">Old</tspan><tspan
+ sodipodi:role="line"
+ x="261.06393"
+ y="-76.00843"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17350">Value</tspan></text>
+ <ellipse
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path18736"
+ cx="261.05334"
+ cy="-85.616814"
+ rx="19.307709"
+ ry="19.11109" />
+ </g>
+ <g
+ id="g18822-7"
+ transform="translate(70.297177,-4.9034252)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="261.06393"
+ y="-88.045357"
+ id="text3901-61-8"><tspan
+ sodipodi:role="line"
+ id="tspan3903-8-8"
+ x="261.06393"
+ y="-88.045357"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">New</tspan><tspan
+ sodipodi:role="line"
+ x="261.06393"
+ y="-76.00843"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif"
+ id="tspan17350-6">Value</tspan></text>
+ <ellipse
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path18736-0"
+ cx="261.05334"
+ cy="-85.616814"
+ rx="19.307709"
+ ry="19.11109" />
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-6-0)"
+ d="m 286.18701,-90.599589 24.56578,0.143648"
+ id="path3011-6-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.60492, 1.60492;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 95.508332,49.277974 0.833571,28.845654"
+ id="path3011-5-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend-3)"
+ d="m 119.95724,68.469804 -22.669425,0.20855"
+ id="path3011-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="156.55997"
+ y="165.89842"
+ id="text3969-7-1"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9-9"
+ x="156.55997"
+ y="165.89842"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">t</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart-7);marker-end:url(#Arrow2Lend-3-7)"
+ d="m 191.24541,170.13008 -69.40688,-0.23556"
+ id="path3011-3-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-4)"
+ d="m 180.99872,128.43082 12.71532,19.87415"
+ id="path3011-8-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-4-1)"
+ d="m 181.76969,84.089995 c 0,0 17.34363,-23.83854 57.5449,-23.520627 36.80652,-1.479321 61.06145,28.647207 61.06145,28.647207"
+ id="path3011-8-7-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="192.38628"
+ y="135.49695"
+ id="text3969-7-1-8"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9-9-0"
+ x="192.38628"
+ y="135.49695"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">rf</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="72.641525"
+ y="80.348579"
+ id="text3969-7-1-8-9"><tspan
+ sodipodi:role="line"
+ id="tspan3971-9-9-0-0"
+ x="72.641525"
+ y="80.348579"
+ style="font-size:9.62954px;line-height:1.25;font-family:sans-serif">rf</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-47)"
+ d="M 122.15724,106.14654 48.968296,49.809565"
+ id="path3011-8-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.802462px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-98-4-1-6)"
+ d="m 311.50223,86.93913 c 0,0 -7.20362,-28.42529 -45.84017,-45.615355 C 231.71741,26.221217 95.555875,28.905393 95.555875,28.905393"
+ id="path3011-8-7-8-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csc" />
+</svg>