From 1b3607b18c09f02e77e4ea0ae91d675f9981195f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Bastian?= <contact@tobast.fr> Date: Wed, 27 Dec 2023 17:44:15 +0100 Subject: [PATCH] Foundations: SIMD --- manuscrit/20_foundations/10_cpu_arch.tex | 26 +- manuscrit/assets/imgs/20_foundations/simd.svg | 503 ++++++++++++++++++ 2 files changed, 527 insertions(+), 2 deletions(-) create mode 100644 manuscrit/assets/imgs/20_foundations/simd.svg diff --git a/manuscrit/20_foundations/10_cpu_arch.tex b/manuscrit/20_foundations/10_cpu_arch.tex index 617ac76..b0a6cea 100644 --- a/manuscrit/20_foundations/10_cpu_arch.tex +++ b/manuscrit/20_foundations/10_cpu_arch.tex @@ -235,5 +235,27 @@ Processors operate at a given \emph{word size}, fixed by the ISA ---~typically 32 or 64 bits nowadays, even though embedded processors might operate at lower word sizes. -Some operations, however, are able to work on chunks of data larger than the -word size. +Some instructions, however, operate on chunks of multiple words at once. These +instructions are called \emph{vector instructions}, or \emph{SIMD} for Single +Instruction, Multiple Data. A SIMD ``add'' instruction may, for instance, add +two chunks of 128 bits, which can for instance be treated each as four integers +of 32 bits bundled together, as illustrated in \autoref{fig:cpu_simd}. + +\begin{figure} + \centering + \includegraphics[width=0.6\textwidth]{simd.svg} + \caption{Example of SIMD add instruction on 128b}\label{fig:cpu_simd} +\end{figure} + +Such instructions present clear efficiency advantages. If the processor is able +to handle one such instruction every cycle ---~even if it is pipelined for +multiple cycles~---, it multiplies by its number of vector elements the +processor's throughput, making it able to process \eg{} four add operations per +cycle instead of one, as long as the data is arranged in memory in an +appropriate way. Some processors, however, are not able to process the full +vector instruction at once, by lack of backend units ---~it may, for instance, +only process two 32-bits adds at once, making the processor able to execute +only one such instruction per two cycles. Even in this case, there are clear +efficiency benefits: while there is no real gain in the backend, the frontend +has only one instruction to decode, rename, etc., greatly alleviating frontend +pressure. \qtodo{Ref. to RISC-V vector extensions?} diff --git a/manuscrit/assets/imgs/20_foundations/simd.svg b/manuscrit/assets/imgs/20_foundations/simd.svg new file mode 100644 index 0000000..2289ada --- /dev/null +++ b/manuscrit/assets/imgs/20_foundations/simd.svg @@ -0,0 +1,503 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="170mm" + height="89.290749mm" + viewBox="0 0 170 89.290749" + version="1.1" + id="svg1" + inkscape:version="1.3 (0e150ed6c4, 2023-07-21)" + sodipodi:docname="simd.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"> + <sodipodi:namedview + id="namedview1" + pagecolor="#dbdbdb" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:showpageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="0.67752152" + inkscape:cx="-0.73798394" + inkscape:cy="176.37816" + inkscape:window-width="1916" + inkscape:window-height="1041" + inkscape:window-x="0" + inkscape:window-y="18" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <marker + style="overflow:visible" + id="ArrowWide" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path1" /> + </marker> + <marker + style="overflow:visible" + id="ArrowWide-9" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path1-6" /> + </marker> + <marker + style="overflow:visible" + id="ArrowWide-9-1" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path1-6-1" /> + </marker> + <marker + style="overflow:visible" + id="ArrowWide-9-8" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path1-6-10" /> + </marker> + <marker + style="overflow:visible" + id="ArrowWide-9-4" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path1-6-4" /> + </marker> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <rect + style="fill:#c0e3f5;fill-opacity:1;stroke-width:1.31227" + id="rect1" + width="40" + height="80" + x="-1.7763568e-15" + y="0" /> + <rect + style="fill:#c0f5cb;fill-opacity:1;stroke-width:1.31227" + id="rect1-6" + width="40" + height="80" + x="70" + y="0" /> + <rect + style="fill:#f5e5c0;fill-opacity:1;stroke-width:1.31227" + id="rect1-6-9" + width="40" + height="80" + x="130" + y="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.58539;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#ArrowWide)" + d="M 64.406995,40 H 46.812661" + id="path17" /> + <path + style="opacity:0.5;fill:none;stroke:#000000;stroke-width:0.755969;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#ArrowWide-9)" + d="M 71.247121,9.3461278 H 39.476423" + id="path17-8" /> + <path + style="opacity:0.5;fill:none;stroke:#000000;stroke-width:0.755969;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#ArrowWide-9-1)" + d="M 71.247121,30 H 39.476423" + id="path17-8-9" /> + <path + style="opacity:0.5;fill:none;stroke:#000000;stroke-width:0.755969;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#ArrowWide-9-8)" + d="M 71.247121,50 H 39.476423" + id="path17-8-0" /> + <path + style="opacity:0.5;fill:none;stroke:#000000;stroke-width:0.755969;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#ArrowWide-9-4)" + d="M 71.247121,70 H 39.476423" + id="path17-8-6" /> + <text + xml:space="preserve" + style="font-size:6.81073px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.319252" + x="114.55661" + y="44.03429" + id="text1" + transform="scale(1.0007791,0.9992215)"><tspan + sodipodi:role="line" + id="tspan1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.7701px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.319252" + x="114.55661" + y="44.03429">+</tspan></text> + <text + xml:space="preserve" + style="font-size:3.40536px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;opacity:0.5;stroke-width:0.159626" + x="117.23151" + y="12.009358" + id="text1-5" + transform="scale(1.0007799,0.99922071)"><tspan + sodipodi:role="line" + id="tspan1-9" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.38504px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.159626" + x="117.23151" + y="12.009358">+</tspan></text> + <text + xml:space="preserve" + style="font-size:3.40536px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;opacity:0.5;stroke-width:0.159626" + x="117.23151" + y="32.024956" + id="text1-5-7" + transform="scale(1.0007799,0.99922071)"><tspan + sodipodi:role="line" + id="tspan1-9-8" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.38504px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.159626" + x="117.23151" + y="32.024956">+</tspan></text> + <text + xml:space="preserve" + style="font-size:3.40536px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;opacity:0.5;stroke-width:0.159626" + x="117.23151" + y="52.04055" + id="text1-5-1" + transform="scale(1.0007799,0.99922071)"><tspan + sodipodi:role="line" + id="tspan1-9-85" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.38504px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.159626" + x="117.23151" + y="52.04055">+</tspan></text> + <text + xml:space="preserve" + style="font-size:3.40536px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;opacity:0.5;stroke-width:0.159626" + x="117.23151" + y="72.056152" + id="text1-5-3" + transform="scale(1.0007799,0.99922071)"><tspan + sodipodi:role="line" + id="tspan1-9-88" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.38504px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.159626" + x="117.23151" + y="72.056152">+</tspan></text> + <rect + style="fill:#76bce0;fill-opacity:1;stroke-width:1.00434" + id="rect2-0" + width="35" + height="15" + x="2.5" + y="22.5" /> + <rect + style="fill:#76bce0;fill-opacity:1;stroke-width:1.00434" + id="rect2-06" + width="35" + height="15" + x="2.5" + y="42.5" /> + <rect + style="fill:#76bce0;fill-opacity:1;stroke-width:1.00434" + id="rect2-6" + width="35" + height="15" + x="2.5" + y="62.5" /> + <rect + style="fill:#76bce0;fill-opacity:1;stroke-width:1.00434" + id="rect2" + width="35" + height="15" + x="2.5" + y="2.5" /> + <rect + style="fill:#73cb85;fill-opacity:1;stroke-width:1.00434" + id="rect2-0-6" + width="35" + height="15" + x="72.5" + y="22.5" /> + <rect + style="fill:#73cb85;fill-opacity:1;stroke-width:1.00434" + id="rect2-06-5" + width="35" + height="15" + x="72.5" + y="42.499996" /> + <rect + style="fill:#73cb85;fill-opacity:1;stroke-width:1.00434" + id="rect2-6-6" + width="35" + height="15" + x="72.5" + y="62.5" /> + <g + id="g4"> + <rect + style="fill:#73cb85;fill-opacity:1;stroke-width:1.00434" + id="rect2-7" + width="35" + height="15" + x="72.5" + y="2.499999" /> + </g> + <rect + style="fill:#e7ca85;fill-opacity:1;stroke-width:1.00434" + id="rect2-7-2" + width="35" + height="15" + x="132.5" + y="2.499999" /> + <rect + style="fill:#e7ca85;fill-opacity:1;stroke-width:1.00434" + id="rect2-0-6-5" + width="35" + height="15" + x="132.5" + y="22.5" /> + <rect + style="fill:#e7ca85;fill-opacity:1;stroke-width:1.00434" + id="rect2-06-5-4" + width="35" + height="15" + x="132.5" + y="42.499996" /> + <rect + style="fill:#e7ca85;fill-opacity:1;stroke-width:1.00434" + id="rect2-6-6-7" + width="35" + height="15" + x="132.5" + y="62.5" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="3.0191138" + y="88.360573" + id="text2"><tspan + sodipodi:role="line" + id="tspan2" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="3.0191138" + y="88.360573">v1 (128b)</tspan></text> + <g + id="g3"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="5.4644642" + y="11.772156" + id="text2-9"><tspan + sodipodi:role="line" + id="tspan2-5" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="5.4644642" + y="11.772156">v1:0 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="5.4644642" + y="31.772156" + id="text2-9-7"><tspan + sodipodi:role="line" + id="tspan2-5-2" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="5.4644642" + y="31.772156">v1:1 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="5.4644642" + y="51.772156" + id="text2-9-6"><tspan + sodipodi:role="line" + id="tspan2-5-1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="5.4644642" + y="51.772156">v1:2 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="5.4644642" + y="73.080116" + id="text2-9-5"><tspan + sodipodi:role="line" + id="tspan2-5-9" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="5.4644642" + y="73.080116">v1:3 (32b)</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="75.464462" + y="11.118176" + id="text2-9-9"><tspan + sodipodi:role="line" + id="tspan2-5-7" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="75.464462" + y="11.118176">v2:0 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="75.464462" + y="31.118176" + id="text2-9-7-7"><tspan + sodipodi:role="line" + id="tspan2-5-2-6" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="75.464462" + y="31.118176">v2:1 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="75.464462" + y="51.118176" + id="text2-9-6-7"><tspan + sodipodi:role="line" + id="tspan2-5-1-3" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="75.464462" + y="51.118176">v2:2 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="75.464462" + y="72.42614" + id="text2-9-5-6"><tspan + sodipodi:role="line" + id="tspan2-5-9-5" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="75.464462" + y="72.42614">v2:3 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="73.019112" + y="88.360573" + id="text2-3"><tspan + sodipodi:role="line" + id="tspan2-1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="73.019112" + y="88.360573">v2 (128b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="133.01912" + y="88.360573" + id="text2-0"><tspan + sodipodi:role="line" + id="tspan2-6" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="133.01912" + y="88.360573">v3 (128b)</tspan></text> + <g + id="g3-4" + transform="translate(130,-0.65398024)"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="5.4644642" + y="11.772156" + id="text2-9-8"><tspan + sodipodi:role="line" + id="tspan2-5-12" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="5.4644642" + y="11.772156">v3:0 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="5.4644642" + y="31.772156" + id="text2-9-7-9"><tspan + sodipodi:role="line" + id="tspan2-5-2-3" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="5.4644642" + y="31.772156">v3:1 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="5.4644642" + y="51.772156" + id="text2-9-6-9"><tspan + sodipodi:role="line" + id="tspan2-5-1-0" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="5.4644642" + y="51.772156">v3:2 (32b)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.529166" + x="5.4644642" + y="73.080116" + id="text2-9-5-8"><tspan + sodipodi:role="line" + id="tspan2-5-9-8" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:none;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.529166" + x="5.4644642" + y="73.080116">v3:3 (32b)</tspan></text> + </g> + </g> +</svg>