Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/znippy

.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">&#10003;</text>
    <text x="758" y="64" fill="#cfe6f5">multi-core</text>
    <text x="852" y="64" fill="#ffd17a" font-size="14" font-weight="700">&#9680;</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">&#10007;</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 &#8212; 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 &#8212; 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 &#8212; 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 &#8212; 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 &#8212; 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">&#10003;</text>
    <text x="595" y="197" fill="#5a7488" font-size="16">&#8211;</text>
    <text x="749" y="197" fill="#5a7488" font-size="16">&#8211;</text>
    <text x="903" y="197" fill="#ff7a7a">&#10007;</text>
    <text x="1061" y="197" fill="#5a7488" font-size="16">&#8211;</text>

    <!-- row 2 gzip marked : y=268 -->
    <text x="438" y="275" fill="#8ef0b4">&#10003;</text>
    <text x="595" y="275" fill="#8ef0b4">&#10003;</text>
    <text x="749" y="275" fill="#ff7a7a">&#10007;</text>
    <text x="903" y="275" fill="#5a7488" font-size="16">&#8211;</text>
    <text x="1061" y="275" fill="#5a7488" font-size="16">&#8211;</text>

    <!-- row 3 gzip arbitrary : y=346  (the unique win) -->
    <text x="438" y="353" fill="#8ef0b4">&#10003;</text>
    <text x="595" y="353" fill="#ff7a7a">&#10007;</text>
    <text x="749" y="353" fill="#ff7a7a">&#10007;</text>
    <text x="903" y="353" fill="#5a7488" font-size="16">&#8211;</text>
    <text x="1061" y="353" fill="#5a7488" font-size="16">&#8211;</text>

    <!-- row 4 gzip concat : y=424 -->
    <text x="438" y="431" fill="#8ef0b4">&#10003;</text>
    <text x="595" y="431" fill="#ff7a7a">&#10007;</text>
    <text x="749" y="431" fill="#ff7a7a">&#10007;</text>
    <text x="903" y="431" fill="#5a7488" font-size="16">&#8211;</text>
    <text x="1061" y="431" fill="#5a7488" font-size="16">&#8211;</text>

    <!-- row 5 bzip2 : y=502 -->
    <text x="438" y="509" fill="#8ef0b4">&#10003;</text>
    <text x="595" y="509" fill="#5a7488" font-size="16">&#8211;</text>
    <text x="749" y="509" fill="#5a7488" font-size="16">&#8211;</text>
    <text x="903" y="509" fill="#5a7488" font-size="16">&#8211;</text>
    <text x="1061" y="509" fill="#ffd17a">&#9680;</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 &#8212; 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>