.nornir/assets/zoomies_multicore.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1180 600" font-family="'DejaVu Sans', 'Segoe UI', sans-serif">
<defs>
<linearGradient id="board" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#0b1c2e"/>
<stop offset="1" stop-color="#06111d"/>
</linearGradient>
<linearGradient id="hero" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#0f3a2e"/>
<stop offset="1" stop-color="#0a2a22"/>
</linearGradient>
<linearGradient id="rail" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#173d57"/>
<stop offset="1" stop-color="#0c2438"/>
</linearGradient>
<linearGradient id="slot" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#123448"/>
<stop offset="1" stop-color="#0a2032"/>
</linearGradient>
</defs>
<!-- PCB substrate -->
<rect x="0" y="0" width="1180" height="600" fill="url(#board)"/>
<g stroke="#143a52" stroke-width="1">
<line x1="0" y1="76" x2="1180" y2="76"/>
<line x1="0" y1="556" x2="1180" y2="556"/>
</g>
<g fill="#16415c">
<circle cx="40" cy="40" r="2"/><circle cx="1140" cy="40" r="2"/>
<circle cx="40" cy="576" r="2"/><circle cx="1140" cy="576" r="2"/>
</g>
<!-- title -->
<text x="40" y="44" fill="#eaf6ff" font-size="22" font-weight="700">multi-core across every situation</text>
<text x="430" y="44" fill="#9fc9e0" font-size="15">znippy-zoomies ticks <tspan fill="#8ef0b4" font-weight="700">all cores, all inputs</tspan> — the field only parallelizes the easy cases</text>
<!-- legend -->
<g font-size="12">
<text x="744" y="64" fill="#8ef0b4" font-size="14" font-weight="700">✓</text>
<text x="758" y="64" fill="#cfe6f5">multi-core</text>
<text x="852" y="64" fill="#ffd17a" font-size="14" font-weight="700">◐</text>
<text x="866" y="64" fill="#cfe6f5">only its own output</text>
<text x="1010" y="64" fill="#ff7a7a" font-size="14" font-weight="700">✗</text>
<text x="1024" y="64" fill="#cfe6f5">single-thread</text>
</g>
<!-- column headers -->
<g font-size="12.5" font-weight="700" text-anchor="middle">
<rect x="360" y="96" width="156" height="40" rx="8" fill="url(#hero)" stroke="#5ad99a" stroke-width="2.2"/>
<text x="438" y="115" fill="#d6ffe8">znippy-zoomies</text>
<text x="438" y="129" fill="#7fd7a6" font-size="9.5" font-weight="400">lgz · lzip-parallel · lbzip2 · ljar</text>
<rect x="520" y="96" width="150" height="40" rx="8" fill="url(#slot)" stroke="#5aa6cf" stroke-width="1.4"/>
<text x="595" y="120" fill="#cfe6f5">pigz</text>
<rect x="674" y="96" width="150" height="40" rx="8" fill="url(#slot)" stroke="#5aa6cf" stroke-width="1.4"/>
<text x="749" y="115" fill="#cfe6f5">igzip · libdeflate</text>
<text x="749" y="129" fill="#86b3cc" font-size="9.5" font-weight="400">zlib / stock gzip</text>
<rect x="828" y="96" width="150" height="40" rx="8" fill="url(#slot)" stroke="#5aa6cf" stroke-width="1.4"/>
<text x="903" y="120" fill="#cfe6f5">unzip</text>
<rect x="982" y="96" width="158" height="40" rx="8" fill="url(#slot)" stroke="#5aa6cf" stroke-width="1.4"/>
<text x="1061" y="115" fill="#cfe6f5">lbzip2(C) · pbzip2</text>
<text x="1061" y="129" fill="#86b3cc" font-size="9.5" font-weight="400">parallel bzip2</text>
</g>
<!-- rows -->
<!-- helper: row backgrounds + hero column band -->
<rect x="360" y="148" width="156" height="392" rx="8" fill="#0c2c22" stroke="#2f6e54" stroke-width="1"/>
<g font-size="11.5">
<!-- row 1: zip/jar -->
<rect x="36" y="148" width="320" height="72" rx="8" fill="url(#rail)" stroke="#234a64" stroke-width="1"/>
<text x="56" y="180" fill="#eaf6ff" font-size="13" font-weight="700">zip / jar — many entries</text>
<text x="56" y="200" fill="#86b3cc" font-size="10">container lists every offset (central directory)</text>
<!-- row 2: gzip marked -->
<rect x="36" y="226" width="320" height="72" rx="8" fill="url(#rail)" stroke="#234a64" stroke-width="1"/>
<text x="56" y="258" fill="#eaf6ff" font-size="13" font-weight="700">gzip — flush-marked</text>
<text x="56" y="278" fill="#86b3cc" font-size="10">pigz -i / BGZF: 00 00 FF FF sync markers</text>
<!-- row 3: gzip arbitrary -->
<rect x="36" y="304" width="320" height="72" rx="8" fill="url(#rail)" stroke="#7fc8ea" stroke-width="1.6"/>
<text x="56" y="336" fill="#eaf6ff" font-size="13" font-weight="700">gzip — arbitrary, no markers</text>
<text x="56" y="356" fill="#bfe6ff" font-size="10">the hard case: speculative per-core resync</text>
<!-- row 4: gzip concat -->
<rect x="36" y="382" width="320" height="72" rx="8" fill="url(#rail)" stroke="#234a64" stroke-width="1"/>
<text x="56" y="414" fill="#eaf6ff" font-size="13" font-weight="700">gzip — concatenated members</text>
<text x="56" y="434" fill="#86b3cc" font-size="10">multiple 1f 8b 08 members, independent</text>
<!-- row 5: bzip2 -->
<rect x="36" y="460" width="320" height="72" rx="8" fill="url(#rail)" stroke="#234a64" stroke-width="1"/>
<text x="56" y="492" fill="#eaf6ff" font-size="13" font-weight="700">bzip2 — any stream</text>
<text x="56" y="512" fill="#86b3cc" font-size="10">48-bit block magic at any bit offset</text>
</g>
<!-- cell marks -->
<g font-size="20" font-weight="700" text-anchor="middle">
<!-- row 1 zip/jar : y=190 -->
<text x="438" y="197" fill="#8ef0b4">✓</text>
<text x="595" y="197" fill="#5a7488" font-size="16">–</text>
<text x="749" y="197" fill="#5a7488" font-size="16">–</text>
<text x="903" y="197" fill="#ff7a7a">✗</text>
<text x="1061" y="197" fill="#5a7488" font-size="16">–</text>
<!-- row 2 gzip marked : y=268 -->
<text x="438" y="275" fill="#8ef0b4">✓</text>
<text x="595" y="275" fill="#8ef0b4">✓</text>
<text x="749" y="275" fill="#ff7a7a">✗</text>
<text x="903" y="275" fill="#5a7488" font-size="16">–</text>
<text x="1061" y="275" fill="#5a7488" font-size="16">–</text>
<!-- row 3 gzip arbitrary : y=346 (the unique win) -->
<text x="438" y="353" fill="#8ef0b4">✓</text>
<text x="595" y="353" fill="#ff7a7a">✗</text>
<text x="749" y="353" fill="#ff7a7a">✗</text>
<text x="903" y="353" fill="#5a7488" font-size="16">–</text>
<text x="1061" y="353" fill="#5a7488" font-size="16">–</text>
<!-- row 4 gzip concat : y=424 -->
<text x="438" y="431" fill="#8ef0b4">✓</text>
<text x="595" y="431" fill="#ff7a7a">✗</text>
<text x="749" y="431" fill="#ff7a7a">✗</text>
<text x="903" y="431" fill="#5a7488" font-size="16">–</text>
<text x="1061" y="431" fill="#5a7488" font-size="16">–</text>
<!-- row 5 bzip2 : y=502 -->
<text x="438" y="509" fill="#8ef0b4">✓</text>
<text x="595" y="509" fill="#5a7488" font-size="16">–</text>
<text x="749" y="509" fill="#5a7488" font-size="16">–</text>
<text x="903" y="509" fill="#5a7488" font-size="16">–</text>
<text x="1061" y="509" fill="#ffd17a">◐</text>
</g>
<!-- ground rail -->
<rect x="36" y="522" width="1108" height="0" fill="none"/>
<text x="40" y="548" fill="#bcd9ec" font-size="11">znippy-zoomies is the only column with no gaps — the unique win is <tspan fill="#bfe6ff" font-weight="700">arbitrary gzip</tspan> (row 3) and <tspan fill="#bfe6ff" font-weight="700">concatenated members</tspan> (row 4); lbzip2(C) matches us on bzip2, pbzip2 only on its own output.</text>
</svg>