diff options
author | Paul E. McKenney <paulmck@kernel.org> | 2024-01-22 12:17:51 -0800 |
---|---|---|
committer | Paul E. McKenney <paulmck@kernel.org> | 2024-01-22 12:20:09 -0800 |
commit | 9caac64bfabf85439c480ce928dddef969354369 (patch) | |
tree | 1c8bbdccef7ea254d9ba40c0634a557c8b37a1d3 | |
parent | d1a5d020205ba69caefd59dcc514f425c566159e (diff) | |
download | perfbook-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.png | bin | 0 -> 6333 bytes | |||
-rw-r--r-- | CodeSamples/cpu/data/coe.png | bin | 0 -> 4859 bytes | |||
-rw-r--r-- | CodeSamples/cpu/data/fre.png | bin | 0 -> 6681 bytes | |||
-rw-r--r-- | CodeSamples/cpu/data/rfe.png | bin | 0 -> 6739 bytes | |||
-rw-r--r-- | memorder/co-hopes.svg | 524 | ||||
-rw-r--r-- | memorder/fr-hopes.svg | 535 | ||||
-rw-r--r-- | memorder/memorder.tex | 144 | ||||
-rw-r--r-- | memorder/rf-hopes.svg | 549 |
8 files changed, 1751 insertions, 1 deletions
diff --git a/CodeSamples/cpu/data/coe-nvals.png b/CodeSamples/cpu/data/coe-nvals.png Binary files differnew file mode 100644 index 00000000..9df9130e --- /dev/null +++ b/CodeSamples/cpu/data/coe-nvals.png diff --git a/CodeSamples/cpu/data/coe.png b/CodeSamples/cpu/data/coe.png Binary files differnew file mode 100644 index 00000000..37f197ac --- /dev/null +++ b/CodeSamples/cpu/data/coe.png diff --git a/CodeSamples/cpu/data/fre.png b/CodeSamples/cpu/data/fre.png Binary files differnew file mode 100644 index 00000000..9410905b --- /dev/null +++ b/CodeSamples/cpu/data/fre.png diff --git a/CodeSamples/cpu/data/rfe.png b/CodeSamples/cpu/data/rfe.png Binary files differnew file mode 100644 index 00000000..1f7cc9e2 --- /dev/null +++ b/CodeSamples/cpu/data/rfe.png 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> |