diff --git a/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt b/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt index d37b6dc..50a48a5 100644 --- a/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt +++ b/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt @@ -779,7 +779,7 @@ private fun deflateHash(data: ByteArray, index: Int, shift1: Int, shift2: Int, m ((data[index + 2].toInt() and 0xFF) shl shift2)) and mask } -private fun findLongestMatch( +internal fun findLongestMatch( data: ByteArray, dataSize: Int, index: Int, @@ -791,7 +791,6 @@ private fun findLongestMatch( var currentIndex = index and MATCH_DISTANCE_MASK var candidateIndex = previousIndex var distance = (currentIndex - candidateIndex) and MATCH_DISTANCE_MASK - if (!hasThreeByteMatch(data, index, distance, remaining)) return 0 val niceLength = minOf(level.niceLength, remaining) val maxDistance = minOf(MATCH_DISTANCE_MASK, index) diff --git a/kflate/src/jvmTest/kotlin/MatchSearchTest.kt b/kflate/src/jvmTest/kotlin/MatchSearchTest.kt new file mode 100644 index 0000000..8f52f81 --- /dev/null +++ b/kflate/src/jvmTest/kotlin/MatchSearchTest.kt @@ -0,0 +1,31 @@ +package com.rafambn.kflate.algorithm + +import kotlin.test.Test +import kotlin.test.assertEquals + +class MatchSearchTest { + + @Test + fun walksPastHashCollisionToFindOlderMatch() { + val data = byteArrayOf(1, 2, 3, 17, 3, 3, 1, 2, 3) + val previous = ShortArray(MATCH_DISTANCE_MASK + 1) + previous[3] = 0 + + val match = findLongestMatch( + data = data, + dataSize = data.size, + index = 6, + previousIndex = 3, + previous = previous, + level = DeflateLevel( + niceLength = 258, + chainLength = 4, + maxLazyLength = 0, + maxHashBits = 12, + ), + ) + + assertEquals(3, match ushr MATCH_DISTANCE_BITS) + assertEquals(6, match and MATCH_DISTANCE_MASK) + } +} diff --git a/performance/2026-09-09-match/RESULTS.md b/performance/2026-09-09-match/RESULTS.md new file mode 100644 index 0000000..feaf807 --- /dev/null +++ b/performance/2026-09-09-match/RESULTS.md @@ -0,0 +1,105 @@ +# Recover matches hidden by hash collisions + +Walk past nonmatching hash-chain entries instead of stopping at the newest collision. Across the tracked corpus this reduces output at every compressed level without a per-corpus size regression. It trades compression time for smaller output; see timings below. + +Base: `fe2ff51`, `dev-1.1.0`. Measured on September 9, 2026 on Linux x86_64, Intel Core i7-11800H. JVM uses JBR 17.0.14; Node uses 22.22.1. + +Only KFlate was timed. Kompress sizes and timings come unchanged from the trusted September 8 archive in `performance/history.json`. Benchmark setup may produce Kompress streams for decoder validation outside timing. + +## Compressed size + +The JVM sweep compresses all seven tracked corpora at every listed level. Every output must round-trip through both the JDK RAW inflater and KFlate. Byte counts are deterministic. Single-run durations in the sweep JSON are diagnostic, not throughput benchmarks. + +Output reduction is `(beforeBytes - afterBytes) / beforeBytes`. Totals weight each corpus by its compressed bytes; they are not averages of percentage changes. + +| Level | Before bytes | After bytes | Output reduction | +| ---: | ---: | ---: | ---: | +| 0 | 76,379,868 | 76,379,868 | 0.0000% | +| 1 | 40,222,941 | 39,622,345 | 1.4932% | +| 2 | 39,269,936 | 38,468,406 | 2.0411% | +| 3 | 38,906,551 | 37,992,438 | 2.3495% | +| 4 | 38,333,169 | 37,847,745 | 1.2663% | +| 5 | 38,293,272 | 37,812,255 | 1.2561% | +| 6 | 37,882,044 | 37,628,245 | 0.6700% | +| 7 | 37,868,330 | 37,614,576 | 0.6701% | +| 8 | 37,737,043 | 37,602,558 | 0.3564% | +| 9 | 37,251,418 | 37,246,954 | 0.0120% | + +### Level 6 + +| Corpus | Before bytes | After bytes | Reduction | Saved JVM Kompress bytes | +| --- | ---: | ---: | ---: | ---: | +| simpleText | 84 | 84 | 0.0000% | 84 | +| text | 506,455 | 503,866 | 0.5112% | 505,318 | +| model3D | 2,153 | 2,148 | 0.2322% | 2,149 | +| Rainier.bmp | 3,283,450 | 3,271,245 | 0.3717% | 3,275,337 | +| Maltese.bmp | 7,158,472 | 7,092,741 | 0.9182% | 7,096,685 | +| Sunrise.bmp | 26,838,825 | 26,666,060 | 0.6437% | 26,698,992 | +| compressed_MVT.pbf | 92,605 | 92,101 | 0.5442% | 91,408 | + +### Level 9 + +| Corpus | Before bytes | After bytes | Reduction | Saved JVM Kompress bytes | +| --- | ---: | ---: | ---: | ---: | +| simpleText | 84 | 84 | 0.0000% | 84 | +| text | 492,523 | 492,051 | 0.0958% | 503,400 | +| model3D | 2,153 | 2,147 | 0.2787% | 2,149 | +| Rainier.bmp | 3,258,570 | 3,258,337 | 0.0072% | 3,270,382 | +| Maltese.bmp | 7,034,092 | 7,031,627 | 0.0350% | 7,090,887 | +| Sunrise.bmp | 26,372,269 | 26,371,028 | 0.0047% | 26,652,810 | +| compressed_MVT.pbf | 91,727 | 91,680 | 0.0512% | 91,400 | + +## Compression timing + +Development measurements use three one-second warmups and five one-second measurement iterations. JVM has one fresh fork per corpus; Native has one process per corpus; Wasm uses one runner. These shorter runs detect broad tradeoffs and are not release-grade speed claims. Raw samples, errors and confidence intervals are retained. No decompression speed claim is made. + +### jvm + +| Corpus | Before ms | After ms | Before/after speedup | Saved Kompress/after speedup | +| --- | ---: | ---: | ---: | ---: | +| simpleText | 0.0279 | 0.0271 | 1.026x | 0.157x | +| text | 60.4159 | 78.8756 | 0.766x | 0.660x | +| model3D | 0.0669 | 0.0786 | 0.851x | 0.384x | +| Rainier.bmp | 108.3289 | 186.0693 | 0.582x | 0.554x | +| Maltese.bmp | 477.9739 | 536.2622 | 0.891x | 0.705x | +| Sunrise.bmp | 1673.0244 | 1795.4100 | 0.932x | 0.689x | +| compressed_MVT.pbf | 4.5006 | 5.4291 | 0.829x | 0.719x | + +### linuxX64 + +| Corpus | Before ms | After ms | Before/after speedup | Saved Kompress/after speedup | +| --- | ---: | ---: | ---: | ---: | +| simpleText | 0.0672 | 0.0651 | 1.032x | 0.448x | +| text | 65.9090 | 67.3055 | 0.979x | 0.749x | +| model3D | 0.1313 | 0.1332 | 0.986x | 0.385x | +| Rainier.bmp | 103.6015 | 149.6475 | 0.692x | 0.706x | +| Maltese.bmp | 446.5430 | 463.2164 | 0.964x | 0.765x | +| Sunrise.bmp | 1283.2512 | 1613.3915 | 0.795x | 0.727x | +| compressed_MVT.pbf | 3.5805 | 4.5448 | 0.788x | 0.831x | + +### wasmJs + +| Corpus | Before ms | After ms | Before/after speedup | Saved Kompress/after speedup | +| --- | ---: | ---: | ---: | ---: | +| simpleText | Unavailable | 0.0933 | Unavailable | 0.692x | +| text | Unavailable | 84.6156 | Unavailable | 1.271x | +| model3D | Unavailable | 0.1930 | Unavailable | 1.242x | +| Rainier.bmp | Unavailable | 211.9063 | Unavailable | 1.825x | +| Maltese.bmp | Unavailable | 665.7267 | Unavailable | 1.621x | +| Sunrise.bmp | Unavailable | 2357.2363 | Unavailable | 1.556x | +| compressed_MVT.pbf | Unavailable | 6.4155 | Unavailable | 1.608x | + + +## Validation and reproduction + +Linux JVM tests: 178 passed. Native Release and Wasm/JS benchmark builds passed. Each of the seven benchmark corpora passed setup round-trip validation on Native and Wasm. The 70-case JVM size sweep also passed JDK interoperability checks. + +Measurements ran on the uncommitted implementation subsequently committed with this report. `source-sha256.json` identifies the measured algorithm source. + +Build the benchmark artifacts with `./gradlew :kflate:assembleBenchmarks :kflate:wasmJsBenchmarkSmokeBenchmark -PbenchmarkLibrary=kflate`. Compile `RatioSweep.java` against the JVM main classes and benchmark JAR, then run it with `kflate/src/jvmTest/resources` as its argument. + +JMH filter: `.*CompressionBenchmarks.rawDeflateCompression`, with `-wi 3 -i 5 -w 1s -r 1s -f 1 -foe true -rf json`. The classpath includes main classes, benchmark classes and the generated JMH JAR. `native_bench.py` runs the equivalent Native configuration. Wasm uses the same generated runner configuration with the report path changed, passed to its generated `.mjs` entry point through Node. + +## Timing calibration + +A later three-fork unchanged-baseline run measured text at 60.37, 85.43, and 64.00 ms per fork. This spread means the initial single-fork text comparison cannot establish a causal speed change. The deterministic size results are unaffected. See `baseline-recheck-jmh.json` for all samples. diff --git a/performance/2026-09-09-match/RatioSweep.java b/performance/2026-09-09-match/RatioSweep.java new file mode 100644 index 0000000..996a4ce --- /dev/null +++ b/performance/2026-09-09-match/RatioSweep.java @@ -0,0 +1,37 @@ +import com.rafambn.kflate.KFlate; +import com.rafambn.kflate.compression.Raw; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.zip.Inflater; + +public class RatioSweep { + public static void main(String[] args) throws Exception { + String[] names = {"simpleText", "text", "model3D", "Rainier.bmp", "Maltese.bmp", "Sunrise.bmp", "compressed_MVT.pbf"}; + int first = args.length > 1 ? Integer.parseInt(args[1]) : 0; + int last = args.length > 2 ? Integer.parseInt(args[2]) : 9; + for (String name : names) { + byte[] input = Files.readAllBytes(Path.of(args[0], name)); + for (int level = first; level <= last; level++) { + long start = System.nanoTime(); + byte[] output = KFlate.INSTANCE.compress(input, new Raw(level, null)); + double ms = (System.nanoTime() - start) / 1e6; + Inflater inflater = new Inflater(true); + try { + inflater.setInput(output); + byte[] decoded = new byte[input.length + 1]; + int count = inflater.inflate(decoded); + if (!inflater.finished() || count != input.length || !Arrays.equals(input, Arrays.copyOf(decoded, count))) { + throw new AssertionError("Invalid output: " + name + " level " + level); + } + } finally { + inflater.end(); + } + if (!Arrays.equals(input, KFlate.INSTANCE.decompress(output, new com.rafambn.kflate.decompression.Raw(null, null)))) { + throw new AssertionError("KFlate round trip: " + name + " level " + level); + } + System.out.printf(java.util.Locale.ROOT, "{\"corpus\":\"%s\",\"level\":%d,\"originalSizeBytes\":%d,\"compressedSizeBytes\":%d,\"singleRunMs\":%.6f}%n", name, level, input.length, output.length, ms); + } + } + } +} diff --git a/performance/2026-09-09-match/after-jmh.json b/performance/2026-09-09-match/after-jmh.json new file mode 100644 index 0000000..e0d8b7d --- /dev/null +++ b/performance/2026-09-09-match/after-jmh.json @@ -0,0 +1,380 @@ +[ + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "simpleText" + }, + "primaryMetric" : { + "score" : 2.714230414311001E-5, + "scoreError" : 2.827869896168104E-6, + "scoreConfidence" : [ + 2.4314434246941907E-5, + 2.9970174039278116E-5 + ], + "scorePercentiles" : { + "0.0" : 2.625116131656999E-5, + "50.0" : 2.7629341279487322E-5, + "90.0" : 2.770076058600349E-5, + "95.0" : 2.770076058600349E-5, + "99.0" : 2.770076058600349E-5, + "99.9" : 2.770076058600349E-5, + "99.99" : 2.770076058600349E-5, + "99.999" : 2.770076058600349E-5, + "99.9999" : 2.770076058600349E-5, + "100.0" : 2.770076058600349E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 2.76984460013292E-5, + 2.7629341279487322E-5, + 2.770076058600349E-5, + 2.6431811532160033E-5, + 2.625116131656999E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "text" + }, + "primaryMetric" : { + "score" : 0.0788756426923077, + "scoreError" : 0.0017264390236397444, + "scoreConfidence" : [ + 0.07714920366866795, + 0.08060208171594743 + ], + "scorePercentiles" : { + "0.0" : 0.07837216784615385, + "50.0" : 0.07893249761538461, + "90.0" : 0.07932279323076923, + "95.0" : 0.07932279323076923, + "99.0" : 0.07932279323076923, + "99.9" : 0.07932279323076923, + "99.99" : 0.07932279323076923, + "99.999" : 0.07932279323076923, + "99.9999" : 0.07932279323076923, + "100.0" : 0.07932279323076923 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.07837216784615385, + 0.07845859784615385, + 0.07929215692307692, + 0.07932279323076923, + 0.07893249761538461 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "model3D" + }, + "primaryMetric" : { + "score" : 7.858677265519258E-5, + "scoreError" : 3.001566923541308E-6, + "scoreConfidence" : [ + 7.558520573165127E-5, + 8.158833957873389E-5 + ], + "scorePercentiles" : { + "0.0" : 7.772566829874874E-5, + "50.0" : 7.860704990176817E-5, + "90.0" : 7.960136808595305E-5, + "95.0" : 7.960136808595305E-5, + "99.0" : 7.960136808595305E-5, + "99.9" : 7.960136808595305E-5, + "99.99" : 7.960136808595305E-5, + "99.999" : 7.960136808595305E-5, + "99.9999" : 7.960136808595305E-5, + "100.0" : 7.960136808595305E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 7.960136808595305E-5, + 7.860704990176817E-5, + 7.906736153055577E-5, + 7.79324154589372E-5, + 7.772566829874874E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Rainier.bmp" + }, + "primaryMetric" : { + "score" : 0.18606929833333336, + "scoreError" : 0.0047083752562326955, + "scoreConfidence" : [ + 0.18136092307710067, + 0.19077767358956604 + ], + "scorePercentiles" : { + "0.0" : 0.18477663983333334, + "50.0" : 0.1857682735, + "90.0" : 0.18761071033333335, + "95.0" : 0.18761071033333335, + "99.0" : 0.18761071033333335, + "99.9" : 0.18761071033333335, + "99.99" : 0.18761071033333335, + "99.999" : 0.18761071033333335, + "99.9999" : 0.18761071033333335, + "100.0" : 0.18761071033333335 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.18761071033333335, + 0.18705501, + 0.1857682735, + 0.18477663983333334, + 0.185135858 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Maltese.bmp" + }, + "primaryMetric" : { + "score" : 0.5362622043, + "scoreError" : 0.1213590692743057, + "scoreConfidence" : [ + 0.4149031350256943, + 0.6576212735743058 + ], + "scorePercentiles" : { + "0.0" : 0.489028694, + "50.0" : 0.554053205, + "90.0" : 0.5644340025, + "95.0" : 0.5644340025, + "99.0" : 0.5644340025, + "99.9" : 0.5644340025, + "99.99" : 0.5644340025, + "99.999" : 0.5644340025, + "99.9999" : 0.5644340025, + "100.0" : 0.5644340025 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.489028694, + 0.5191325145, + 0.5644340025, + 0.5546626055, + 0.554053205 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Sunrise.bmp" + }, + "primaryMetric" : { + "score" : 1.7954099714000002, + "scoreError" : 0.029446447863794193, + "scoreConfidence" : [ + 1.7659635235362061, + 1.8248564192637944 + ], + "scorePercentiles" : { + "0.0" : 1.78673967, + "50.0" : 1.796943619, + "90.0" : 1.804290738, + "95.0" : 1.804290738, + "99.0" : 1.804290738, + "99.9" : 1.804290738, + "99.99" : 1.804290738, + "99.999" : 1.804290738, + "99.9999" : 1.804290738, + "100.0" : 1.804290738 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 1.800702344, + 1.804290738, + 1.788373486, + 1.78673967, + 1.796943619 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "compressed_MVT.pbf" + }, + "primaryMetric" : { + "score" : 0.005429126107575154, + "scoreError" : 0.0013912006902130865, + "scoreConfidence" : [ + 0.004037925417362067, + 0.006820326797788241 + ], + "scorePercentiles" : { + "0.0" : 0.00516300706185567, + "50.0" : 0.005181196304123711, + "90.0" : 0.005917609182352941, + "95.0" : 0.005917609182352941, + "99.0" : 0.005917609182352941, + "99.9" : 0.005917609182352941, + "99.99" : 0.005917609182352941, + "99.999" : 0.005917609182352941, + "99.9999" : 0.005917609182352941, + "100.0" : 0.005917609182352941 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.005917609182352941, + 0.0057165833142857145, + 0.005167234675257732, + 0.005181196304123711, + 0.00516300706185567 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-match/after-native.json b/performance/2026-09-09-match/after-native.json new file mode 100644 index 0000000..ce35a1b --- /dev/null +++ b/performance/2026-09-09-match/after-native.json @@ -0,0 +1,317 @@ +[ + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "simpleText" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 6.512260282447882E-5, + "scoreError": 5.0082735533194806E-6, + "scoreConfidence" : [ + 6.011432927115934E-5, + 7.01308763777983E-5 + ], + "scorePercentiles" : { + "0.00" : 5.967425658739378E-5, + "25.00" : 6.0469932139145324E-5, + "50.00" : 6.219730677997188E-5, + "75.00" : 7.123792153206578E-5, + "90.00" : 7.239392816531149E-5, + "99.00" : 7.239392816531149E-5, + "99.90" : 7.239392816531149E-5, + "99.99" : 7.239392816531149E-5, + "100.00" : 7.239392816531149E-5 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 5.967425658739378E-5, + 6.126560769089686E-5, + 6.219730677997188E-5, + 7.008191489882007E-5, + 7.239392816531149E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "text" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.06730547945333334, + "scoreError": 0.002851662831268095, + "scoreConfidence" : [ + 0.06445381662206524, + 0.07015714228460145 + ], + "scorePercentiles" : { + "0.00" : 0.06153821293333333, + "25.00" : 0.0647962628, + "50.00" : 0.06871215473333334, + "75.00" : 0.06911135846666666, + "90.00" : 0.06919253533333333, + "99.00" : 0.06919253533333333, + "99.90" : 0.06919253533333333, + "99.99" : 0.06919253533333333, + "100.00" : 0.06919253533333333 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.06903018159999999, + 0.06871215473333334, + 0.06919253533333333, + 0.06805431266666667, + 0.06153821293333333 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "model3D" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 1.3318452991367447E-4, + "scoreError": 7.441758028250097E-6, + "scoreConfidence" : [ + 1.2574277188542437E-4, + 1.4062628794192457E-4 + ], + "scorePercentiles" : { + "0.00" : 1.2730928537470288E-4, + "25.00" : 1.2754122688602527E-4, + "50.00" : 1.2844340760665582E-4, + "75.00" : 1.4119839409483298E-4, + "90.00" : 1.472643862129363E-4, + "99.00" : 1.472643862129363E-4, + "99.90" : 1.472643862129363E-4, + "99.99" : 1.472643862129363E-4, + "100.00" : 1.472643862129363E-4 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 1.2730928537470288E-4, + 1.2777316839734769E-4, + 1.2844340760665582E-4, + 1.3513240197672962E-4, + 1.472643862129363E-4 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Rainier.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.14964745754285716, + "scoreError": 6.318532688225913E-4, + "scoreConfidence" : [ + 0.14901560427403457, + 0.15027931081167975 + ], + "scorePercentiles" : { + "0.00" : 0.148790032, + "25.00" : 0.14910198914285716, + "50.00" : 0.14956938171428572, + "75.00" : 0.15023196385714288, + "90.00" : 0.15077941442857143, + "99.00" : 0.15077941442857143, + "99.90" : 0.15077941442857143, + "99.99" : 0.15077941442857143, + "100.00" : 0.15077941442857143 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.14956938171428572, + 0.148790032, + 0.1496845132857143, + 0.1494139462857143, + 0.15077941442857143 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Maltese.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.4632164346666666, + "scoreError": 0.0016595708394789653, + "scoreConfidence" : [ + 0.46155686382718764, + 0.4648760055061456 + ], + "scorePercentiles" : { + "0.00" : 0.460972647, + "25.00" : 0.46149038733333336, + "50.00" : 0.46280149, + "75.00" : 0.46514995433333334, + "90.00" : 0.46546214366666666, + "99.00" : 0.46546214366666666, + "99.90" : 0.46546214366666666, + "99.99" : 0.46546214366666666, + "100.00" : 0.46546214366666666 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.4620081276666667, + 0.46546214366666666, + 0.46280149, + 0.464837765, + 0.460972647 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Sunrise.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 1.6133915289999998, + "scoreError": 0.004333410206147846, + "scoreConfidence" : [ + 1.609058118793852, + 1.6177249392061477 + ], + "scorePercentiles" : { + "0.00" : 1.605314461, + "25.00" : 1.609180302, + "50.00" : 1.613830393, + "75.00" : 1.617383324, + "90.00" : 1.617797984, + "99.00" : 1.617797984, + "99.90" : 1.617797984, + "99.99" : 1.617797984, + "100.00" : 1.617797984 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 1.613830393, + 1.613046143, + 1.605314461, + 1.617797984, + 1.616968664 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "compressed_MVT.pbf" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.004544770251141552, + "scoreError": 1.0695080190961871E-5, + "scoreConfidence" : [ + 0.00453407517095059, + 0.004555465331332514 + ], + "scorePercentiles" : { + "0.00" : 0.004533866493150685, + "25.00" : 0.004537184260273972, + "50.00" : 0.004541383155251141, + "75.00" : 0.004554049789954337, + "90.00" : 0.004565769515981735, + "99.00" : 0.004565769515981735, + "99.90" : 0.004565769515981735, + "99.99" : 0.004565769515981735, + "100.00" : 0.004565769515981735 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.004533866493150685, + 0.004542330063926941, + 0.004565769515981735, + 0.00454050202739726, + 0.004541383155251141 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-match/after-sizes.jsonl b/performance/2026-09-09-match/after-sizes.jsonl new file mode 100644 index 0000000..c0906f1 --- /dev/null +++ b/performance/2026-09-09-match/after-sizes.jsonl @@ -0,0 +1,70 @@ +{"corpus":"simpleText","level":0,"originalSizeBytes":100,"compressedSizeBytes":105,"singleRunMs":17.340591} +{"corpus":"simpleText","level":1,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":9.996971} +{"corpus":"simpleText","level":2,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.306873} +{"corpus":"simpleText","level":3,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.321261} +{"corpus":"simpleText","level":4,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.290734} +{"corpus":"simpleText","level":5,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.267016} +{"corpus":"simpleText","level":6,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.233011} +{"corpus":"simpleText","level":7,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.250769} +{"corpus":"simpleText","level":8,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.194520} +{"corpus":"simpleText","level":9,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.488753} +{"corpus":"text","level":0,"originalSizeBytes":1232923,"compressedSizeBytes":1233018,"singleRunMs":4.378562} +{"corpus":"text","level":1,"originalSizeBytes":1232923,"compressedSizeBytes":585613,"singleRunMs":54.000653} +{"corpus":"text","level":2,"originalSizeBytes":1232923,"compressedSizeBytes":560123,"singleRunMs":33.076279} +{"corpus":"text","level":3,"originalSizeBytes":1232923,"compressedSizeBytes":541693,"singleRunMs":36.044940} +{"corpus":"text","level":4,"originalSizeBytes":1232923,"compressedSizeBytes":520652,"singleRunMs":48.604324} +{"corpus":"text","level":5,"originalSizeBytes":1232923,"compressedSizeBytes":511044,"singleRunMs":59.522164} +{"corpus":"text","level":6,"originalSizeBytes":1232923,"compressedSizeBytes":503866,"singleRunMs":67.185297} +{"corpus":"text","level":7,"originalSizeBytes":1232923,"compressedSizeBytes":503514,"singleRunMs":69.706073} +{"corpus":"text","level":8,"originalSizeBytes":1232923,"compressedSizeBytes":503434,"singleRunMs":79.195316} +{"corpus":"text","level":9,"originalSizeBytes":1232923,"compressedSizeBytes":492051,"singleRunMs":202.436725} +{"corpus":"model3D","level":0,"originalSizeBytes":2478,"compressedSizeBytes":2483,"singleRunMs":0.048915} +{"corpus":"model3D","level":1,"originalSizeBytes":2478,"compressedSizeBytes":2156,"singleRunMs":0.216218} +{"corpus":"model3D","level":2,"originalSizeBytes":2478,"compressedSizeBytes":2155,"singleRunMs":0.143093} +{"corpus":"model3D","level":3,"originalSizeBytes":2478,"compressedSizeBytes":2152,"singleRunMs":0.131898} +{"corpus":"model3D","level":4,"originalSizeBytes":2478,"compressedSizeBytes":2150,"singleRunMs":0.131206} +{"corpus":"model3D","level":5,"originalSizeBytes":2478,"compressedSizeBytes":2148,"singleRunMs":0.623419} +{"corpus":"model3D","level":6,"originalSizeBytes":2478,"compressedSizeBytes":2148,"singleRunMs":0.228093} +{"corpus":"model3D","level":7,"originalSizeBytes":2478,"compressedSizeBytes":2148,"singleRunMs":0.233503} +{"corpus":"model3D","level":8,"originalSizeBytes":2478,"compressedSizeBytes":2148,"singleRunMs":0.230387} +{"corpus":"model3D","level":9,"originalSizeBytes":2478,"compressedSizeBytes":2147,"singleRunMs":0.379764} +{"corpus":"Rainier.bmp","level":0,"originalSizeBytes":6220854,"compressedSizeBytes":6221329,"singleRunMs":4.187022} +{"corpus":"Rainier.bmp","level":1,"originalSizeBytes":6220854,"compressedSizeBytes":3360613,"singleRunMs":116.404737} +{"corpus":"Rainier.bmp","level":2,"originalSizeBytes":6220854,"compressedSizeBytes":3322966,"singleRunMs":134.318945} +{"corpus":"Rainier.bmp","level":3,"originalSizeBytes":6220854,"compressedSizeBytes":3308007,"singleRunMs":142.988084} +{"corpus":"Rainier.bmp","level":4,"originalSizeBytes":6220854,"compressedSizeBytes":3302910,"singleRunMs":136.425711} +{"corpus":"Rainier.bmp","level":5,"originalSizeBytes":6220854,"compressedSizeBytes":3289611,"singleRunMs":144.813594} +{"corpus":"Rainier.bmp","level":6,"originalSizeBytes":6220854,"compressedSizeBytes":3271245,"singleRunMs":168.778037} +{"corpus":"Rainier.bmp","level":7,"originalSizeBytes":6220854,"compressedSizeBytes":3269902,"singleRunMs":188.147082} +{"corpus":"Rainier.bmp","level":8,"originalSizeBytes":6220854,"compressedSizeBytes":3267091,"singleRunMs":218.386567} +{"corpus":"Rainier.bmp","level":9,"originalSizeBytes":6220854,"compressedSizeBytes":3258337,"singleRunMs":2830.728347} +{"corpus":"Maltese.bmp","level":0,"originalSizeBytes":16427390,"compressedSizeBytes":16428645,"singleRunMs":6.494069} +{"corpus":"Maltese.bmp","level":1,"originalSizeBytes":16427390,"compressedSizeBytes":8094657,"singleRunMs":293.114633} +{"corpus":"Maltese.bmp","level":2,"originalSizeBytes":16427390,"compressedSizeBytes":7538593,"singleRunMs":315.401485} +{"corpus":"Maltese.bmp","level":3,"originalSizeBytes":16427390,"compressedSizeBytes":7246929,"singleRunMs":367.294303} +{"corpus":"Maltese.bmp","level":4,"originalSizeBytes":16427390,"compressedSizeBytes":7156799,"singleRunMs":443.985439} +{"corpus":"Maltese.bmp","level":5,"originalSizeBytes":16427390,"compressedSizeBytes":7156065,"singleRunMs":577.843999} +{"corpus":"Maltese.bmp","level":6,"originalSizeBytes":16427390,"compressedSizeBytes":7092741,"singleRunMs":584.748804} +{"corpus":"Maltese.bmp","level":7,"originalSizeBytes":16427390,"compressedSizeBytes":7091989,"singleRunMs":590.257458} +{"corpus":"Maltese.bmp","level":8,"originalSizeBytes":16427390,"compressedSizeBytes":7091933,"singleRunMs":584.177787} +{"corpus":"Maltese.bmp","level":9,"originalSizeBytes":16427390,"compressedSizeBytes":7031627,"singleRunMs":1543.488592} +{"corpus":"Sunrise.bmp","level":0,"originalSizeBytes":52344054,"compressedSizeBytes":52348049,"singleRunMs":32.859354} +{"corpus":"Sunrise.bmp","level":1,"originalSizeBytes":52344054,"compressedSizeBytes":27485383,"singleRunMs":1005.223395} +{"corpus":"Sunrise.bmp","level":2,"originalSizeBytes":52344054,"compressedSizeBytes":26951671,"singleRunMs":1132.556546} +{"corpus":"Sunrise.bmp","level":3,"originalSizeBytes":52344054,"compressedSizeBytes":26801040,"singleRunMs":1282.669133} +{"corpus":"Sunrise.bmp","level":4,"originalSizeBytes":52344054,"compressedSizeBytes":26772754,"singleRunMs":1389.389831} +{"corpus":"Sunrise.bmp","level":5,"originalSizeBytes":52344054,"compressedSizeBytes":26761152,"singleRunMs":1633.250369} +{"corpus":"Sunrise.bmp","level":6,"originalSizeBytes":52344054,"compressedSizeBytes":26666060,"singleRunMs":1784.035024} +{"corpus":"Sunrise.bmp","level":7,"originalSizeBytes":52344054,"compressedSizeBytes":26654836,"singleRunMs":2006.590227} +{"corpus":"Sunrise.bmp","level":8,"originalSizeBytes":52344054,"compressedSizeBytes":26645766,"singleRunMs":2163.685671} +{"corpus":"Sunrise.bmp","level":9,"originalSizeBytes":52344054,"compressedSizeBytes":26371028,"singleRunMs":12228.939151} +{"corpus":"compressed_MVT.pbf","level":0,"originalSizeBytes":146224,"compressedSizeBytes":146239,"singleRunMs":0.054769} +{"corpus":"compressed_MVT.pbf","level":1,"originalSizeBytes":146224,"compressedSizeBytes":93839,"singleRunMs":2.893045} +{"corpus":"compressed_MVT.pbf","level":2,"originalSizeBytes":146224,"compressedSizeBytes":92814,"singleRunMs":3.707999} +{"corpus":"compressed_MVT.pbf","level":3,"originalSizeBytes":146224,"compressedSizeBytes":92533,"singleRunMs":4.319190} +{"corpus":"compressed_MVT.pbf","level":4,"originalSizeBytes":146224,"compressedSizeBytes":92396,"singleRunMs":4.823938} +{"corpus":"compressed_MVT.pbf","level":5,"originalSizeBytes":146224,"compressedSizeBytes":92151,"singleRunMs":5.481420} +{"corpus":"compressed_MVT.pbf","level":6,"originalSizeBytes":146224,"compressedSizeBytes":92101,"singleRunMs":4.933073} +{"corpus":"compressed_MVT.pbf","level":7,"originalSizeBytes":146224,"compressedSizeBytes":92103,"singleRunMs":4.986765} +{"corpus":"compressed_MVT.pbf","level":8,"originalSizeBytes":146224,"compressedSizeBytes":92102,"singleRunMs":9.688154} +{"corpus":"compressed_MVT.pbf","level":9,"originalSizeBytes":146224,"compressedSizeBytes":91680,"singleRunMs":9.193965} diff --git a/performance/2026-09-09-match/after-wasm.json b/performance/2026-09-09-match/after-wasm.json new file mode 100644 index 0000000..bd7800f --- /dev/null +++ b/performance/2026-09-09-match/after-wasm.json @@ -0,0 +1,317 @@ +[ + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "simpleText" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.0000932848713957935, + "scoreError": 1.674009584135088e-7, + "scoreConfidence" : [ + 0.00009311747043737999, + 0.00009345227235420702 + ], + "scorePercentiles" : { + "0.00" : 0.00009313276529636712, + "25.00" : 0.0000931464277246654, + "50.00" : 0.00009322689063097514, + "75.00" : 0.00009345230544933079, + "90.00" : 0.00009360683059273422, + "99.00" : 0.00009360683059273422, + "99.90" : 0.00009360683059273422, + "99.99" : 0.00009360683059273422, + "100.00" : 0.00009360683059273422 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.00009313276529636712, + 0.00009316009015296368, + 0.00009360683059273422, + 0.00009329778030592735, + 0.00009322689063097514 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "text" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.08461562824999999, + "scoreError": 0.0001902616489717368, + "scoreConfidence" : [ + 0.08442536660102826, + 0.08480588989897173 + ], + "scorePercentiles" : { + "0.00" : 0.08443135508333333, + "25.00" : 0.08444463270833333, + "50.00" : 0.08453740283333333, + "75.00" : 0.0848257365, + "90.00" : 0.08495843691666667, + "99.00" : 0.08495843691666667, + "99.90" : 0.08495843691666667, + "99.99" : 0.08495843691666667, + "100.00" : 0.08495843691666667 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.08469303608333333, + 0.08445791033333333, + 0.08453740283333333, + 0.08495843691666667, + 0.08443135508333333 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "model3D" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.00019301180558789287, + "scoreError": 2.900269063217334e-7, + "scoreConfidence" : [ + 0.00019272177868157113, + 0.00019330183249421462 + ], + "scorePercentiles" : { + "0.00" : 0.00019262427706635623, + "25.00" : 0.00019269585661622042, + "50.00" : 0.00019297087446643383, + "75.00" : 0.0001933482201202949, + "90.00" : 0.00019334837640667442, + "99.00" : 0.00019334837640667442, + "99.90" : 0.00019334837640667442, + "99.99" : 0.00019334837640667442, + "100.00" : 0.00019334837640667442 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.00019297087446643383, + 0.00019334837640667442, + 0.0001933480638339154, + 0.00019262427706635623, + 0.0001927674361660846 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Rainier.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.21190632792000003, + "scoreError": 0.0010271851115137684, + "scoreConfidence" : [ + 0.21087914280848627, + 0.21293351303151378 + ], + "scorePercentiles" : { + "0.00" : 0.211178955, + "25.00" : 0.21122193820000001, + "50.00" : 0.2113059132, + "75.00" : 0.212890925, + "90.00" : 0.213952348, + "99.00" : 0.213952348, + "99.90" : 0.213952348, + "99.99" : 0.213952348, + "100.00" : 0.213952348 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.2113059132, + 0.211178955, + 0.211829502, + 0.213952348, + 0.2112649214 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Maltese.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.6657266874000001, + "scoreError": 0.007149954352952755, + "scoreConfidence" : [ + 0.6585767330470473, + 0.6728766417529528 + ], + "scorePercentiles" : { + "0.00" : 0.660820431, + "25.00" : 0.66092495775, + "50.00" : 0.661476217, + "75.00" : 0.67265365225, + "90.00" : 0.679933126, + "99.00" : 0.679933126, + "99.90" : 0.679933126, + "99.99" : 0.679933126, + "100.00" : 0.679933126 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.6610294845, + 0.679933126, + 0.660820431, + 0.661476217, + 0.6653741785 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Sunrise.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 2.3572362626, + "scoreError": 0.019005770923501624, + "scoreConfidence" : [ + 2.3382304916764984, + 2.3762420335235013 + ], + "scorePercentiles" : { + "0.00" : 2.338974378, + "25.00" : 2.3406992755, + "50.00" : 2.352333579, + "75.00" : 2.3762245914999998, + "90.00" : 2.393290978, + "99.00" : 2.393290978, + "99.90" : 2.393290978, + "99.99" : 2.393290978, + "100.00" : 2.393290978 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 2.338974378, + 2.359158205, + 2.352333579, + 2.342424173, + 2.393290978 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "compressed_MVT.pbf" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.00641548699102564, + "scoreError": 0.00001333702615633631, + "scoreConfidence" : [ + 0.006402149964869304, + 0.006428824017181976 + ], + "scorePercentiles" : { + "0.00" : 0.006396334346153846, + "25.00" : 0.006400830548076923, + "50.00" : 0.006414908314102564, + "75.00" : 0.006430432772435897, + "90.00" : 0.00643254358974359, + "99.00" : 0.00643254358974359, + "99.90" : 0.00643254358974359, + "99.99" : 0.00643254358974359, + "100.00" : 0.00643254358974359 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.00640532675, + 0.00643254358974359, + 0.006414908314102564, + 0.006428321955128205, + 0.006396334346153846 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-match/baseline-recheck-jmh.json b/performance/2026-09-09-match/baseline-recheck-jmh.json new file mode 100644 index 0000000..198a588 --- /dev/null +++ b/performance/2026-09-09-match/baseline-recheck-jmh.json @@ -0,0 +1,200 @@ +[ + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "jvm": "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs": [], + "jdkVersion": "17.0.14", + "vmName": "OpenJDK 64-Bit Server VM", + "vmVersion": "17.0.14+1-b1367.22", + "warmupIterations": 3, + "warmupTime": "1 s", + "warmupBatchSize": 1, + "measurementIterations": 5, + "measurementTime": "1 s", + "measurementBatchSize": 1, + "params": { + "corpus": "simpleText" + }, + "primaryMetric": { + "score": 2.6968305442982996e-05, + "scoreError": 7.972825660060215e-07, + "scoreConfidence": [ + 2.6171022876976976e-05, + 2.7765588008989016e-05 + ], + "scorePercentiles": { + "0.0": 2.6064190561809466e-05, + "50.0": 2.713266691080729e-05, + "90.0": 2.8003960663271567e-05, + "95.0": 2.8266364931321012e-05, + "99.0": 2.8266364931321012e-05, + "99.9": 2.8266364931321012e-05, + "99.99": 2.8266364931321012e-05, + "99.999": 2.8266364931321012e-05, + "99.9999": 2.8266364931321012e-05, + "100.0": 2.8266364931321012e-05 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 2.7555488814194403e-05, + 2.8266364931321012e-05, + 2.7460792801449593e-05, + 2.6064190561809466e-05, + 2.608264600500678e-05 + ], + [ + 2.7647624087793012e-05, + 2.7570792910499186e-05, + 2.7829024484571936e-05, + 2.63618836056932e-05, + 2.6479099994705074e-05 + ], + [ + 2.7309787188728704e-05, + 2.713266691080729e-05, + 2.618046873445884e-05, + 2.6117664142666912e-05, + 2.6466086471039612e-05 + ] + ] + }, + "secondaryMetrics": {} + }, + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "jvm": "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs": [], + "jdkVersion": "17.0.14", + "vmName": "OpenJDK 64-Bit Server VM", + "vmVersion": "17.0.14+1-b1367.22", + "warmupIterations": 3, + "warmupTime": "1 s", + "warmupBatchSize": 1, + "measurementIterations": 5, + "measurementTime": "1 s", + "measurementBatchSize": 1, + "params": { + "corpus": "text" + }, + "primaryMetric": { + "score": 0.06993304894514706, + "scoreError": 0.012428937382961722, + "scoreConfidence": [ + 0.05750411156218534, + 0.08236198632810877 + ], + "scorePercentiles": { + "0.0": 0.060155878882352944, + "50.0": 0.0634497960625, + "90.0": 0.08588725383333333, + "95.0": 0.08624586358333333, + "99.0": 0.08624586358333333, + "99.9": 0.08624586358333333, + "99.99": 0.08624586358333333, + "99.999": 0.08624586358333333, + "99.9999": 0.08624586358333333, + "100.0": 0.08624586358333333 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 0.060155878882352944, + 0.06047350752941177, + 0.06041102294117647, + 0.06046983752941176, + 0.060362842588235294 + ], + [ + 0.08493959983333334, + 0.08484457791666666, + 0.08564818066666667, + 0.08546072075, + 0.08624586358333333 + ], + [ + 0.06015902294117647, + 0.06055583835294118, + 0.0634497960625, + 0.06794135146666666, + 0.06787769313333333 + ] + ] + }, + "secondaryMetrics": {} + }, + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "jvm": "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs": [], + "jdkVersion": "17.0.14", + "vmName": "OpenJDK 64-Bit Server VM", + "vmVersion": "17.0.14+1-b1367.22", + "warmupIterations": 3, + "warmupTime": "1 s", + "warmupBatchSize": 1, + "measurementIterations": 5, + "measurementTime": "1 s", + "measurementBatchSize": 1, + "params": { + "corpus": "model3D" + }, + "primaryMetric": { + "score": 6.769606591254372e-05, + "scoreError": 1.896985698416163e-06, + "scoreConfidence": [ + 6.579908021412755e-05, + 6.959305161095989e-05 + ], + "scorePercentiles": { + "0.0": 6.342663043753963e-05, + "50.0": 6.822538021828103e-05, + "90.0": 6.953005168173725e-05, + "95.0": 6.958730044531032e-05, + "99.0": 6.958730044531032e-05, + "99.9": 6.958730044531032e-05, + "99.99": 6.958730044531032e-05, + "99.999": 6.958730044531032e-05, + "99.9999": 6.958730044531032e-05, + "100.0": 6.958730044531032e-05 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 6.342663043753963e-05, + 6.413363150807899e-05, + 6.75012582669726e-05, + 6.743249794377402e-05, + 6.657319154742096e-05 + ], + [ + 6.958730044531032e-05, + 6.857982686505759e-05, + 6.836027286397813e-05, + 6.841834060747024e-05, + 6.800295553440304e-05 + ], + [ + 6.94918858393552e-05, + 6.832567481896433e-05, + 6.822538021828103e-05, + 6.918970121065376e-05, + 6.819244058089589e-05 + ] + ] + }, + "secondaryMetrics": {} + } +] diff --git a/performance/2026-09-09-match/before-jmh.json b/performance/2026-09-09-match/before-jmh.json new file mode 100644 index 0000000..7615387 --- /dev/null +++ b/performance/2026-09-09-match/before-jmh.json @@ -0,0 +1,380 @@ +[ + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "simpleText" + }, + "primaryMetric" : { + "score" : 2.7861177968744074E-5, + "scoreError" : 2.911922900505013E-6, + "scoreConfidence" : [ + 2.494925506823906E-5, + 3.077310086924909E-5 + ], + "scorePercentiles" : { + "0.0" : 2.6910095086907388E-5, + "50.0" : 2.7661463602168382E-5, + "90.0" : 2.881266400668357E-5, + "95.0" : 2.881266400668357E-5, + "99.0" : 2.881266400668357E-5, + "99.9" : 2.881266400668357E-5, + "99.99" : 2.881266400668357E-5, + "99.999" : 2.881266400668357E-5, + "99.9999" : 2.881266400668357E-5, + "100.0" : 2.881266400668357E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 2.7661463602168382E-5, + 2.881266400668357E-5, + 2.8417902909586862E-5, + 2.6910095086907388E-5, + 2.750376423837417E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "text" + }, + "primaryMetric" : { + "score" : 0.06041590843529412, + "scoreError" : 6.056857237638408E-4, + "scoreConfidence" : [ + 0.059810222711530275, + 0.06102159415905796 + ], + "scorePercentiles" : { + "0.0" : 0.06014622823529412, + "50.0" : 0.060454885588235294, + "90.0" : 0.060547520647058824, + "95.0" : 0.060547520647058824, + "99.0" : 0.060547520647058824, + "99.9" : 0.060547520647058824, + "99.99" : 0.060547520647058824, + "99.999" : 0.060547520647058824, + "99.9999" : 0.060547520647058824, + "100.0" : 0.060547520647058824 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.06014622823529412, + 0.060430179647058824, + 0.060454885588235294, + 0.060500728058823526, + 0.060547520647058824 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "model3D" + }, + "primaryMetric" : { + "score" : 6.686024726012978E-5, + "scoreError" : 4.189482418431631E-6, + "scoreConfidence" : [ + 6.267076484169815E-5, + 7.10497296785614E-5 + ], + "scorePercentiles" : { + "0.0" : 6.499838984923317E-5, + "50.0" : 6.746798745277928E-5, + "90.0" : 6.757348270503986E-5, + "95.0" : 6.757348270503986E-5, + "99.0" : 6.757348270503986E-5, + "99.9" : 6.757348270503986E-5, + "99.99" : 6.757348270503986E-5, + "99.999" : 6.757348270503986E-5, + "99.9999" : 6.757348270503986E-5, + "100.0" : 6.757348270503986E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 6.757348270503986E-5, + 6.748003926595602E-5, + 6.746798745277928E-5, + 6.678133702764053E-5, + 6.499838984923317E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Rainier.bmp" + }, + "primaryMetric" : { + "score" : 0.10832889366000001, + "scoreError" : 0.0016506001920435149, + "scoreConfidence" : [ + 0.1066782934679565, + 0.10997949385204352 + ], + "scorePercentiles" : { + "0.0" : 0.1079189768, + "50.0" : 0.108242564, + "90.0" : 0.1090366517, + "95.0" : 0.1090366517, + "99.0" : 0.1090366517, + "99.9" : 0.1090366517, + "99.99" : 0.1090366517, + "99.999" : 0.1090366517, + "99.9999" : 0.1090366517, + "100.0" : 0.1090366517 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.1090366517, + 0.108242564, + 0.1079189768, + 0.1083576889, + 0.1080885869 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Maltese.bmp" + }, + "primaryMetric" : { + "score" : 0.4779739153333333, + "scoreError" : 0.007987030924469857, + "scoreConfidence" : [ + 0.46998688440886344, + 0.4859609462578031 + ], + "scorePercentiles" : { + "0.0" : 0.476138847, + "50.0" : 0.477748715, + "90.0" : 0.481469577, + "95.0" : 0.481469577, + "99.0" : 0.481469577, + "99.9" : 0.481469577, + "99.99" : 0.481469577, + "99.999" : 0.481469577, + "99.9999" : 0.481469577, + "100.0" : 0.481469577 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.476735972, + 0.481469577, + 0.47777646566666665, + 0.477748715, + 0.476138847 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Sunrise.bmp" + }, + "primaryMetric" : { + "score" : 1.6730243644000002, + "scoreError" : 0.07340701551445698, + "scoreConfidence" : [ + 1.5996173488855432, + 1.7464313799144573 + ], + "scorePercentiles" : { + "0.0" : 1.644701101, + "50.0" : 1.67681155, + "90.0" : 1.697225124, + "95.0" : 1.697225124, + "99.0" : 1.697225124, + "99.9" : 1.697225124, + "99.99" : 1.697225124, + "99.999" : 1.697225124, + "99.9999" : 1.697225124, + "100.0" : 1.697225124 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 1.697225124, + 1.678261324, + 1.668122723, + 1.67681155, + 1.644701101 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "compressed_MVT.pbf" + }, + "primaryMetric" : { + "score" : 0.00450055958947036, + "scoreError" : 5.6866598483374845E-5, + "scoreConfidence" : [ + 0.004443692990986985, + 0.004557426187953735 + ], + "scorePercentiles" : { + "0.0" : 0.004483004799107143, + "50.0" : 0.004503572950672646, + "90.0" : 0.004517674288288288, + "95.0" : 0.004517674288288288, + "99.0" : 0.004517674288288288, + "99.9" : 0.004517674288288288, + "99.99" : 0.004517674288288288, + "99.999" : 0.004517674288288288, + "99.9999" : 0.004517674288288288, + "100.0" : 0.004517674288288288 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.004503572950672646, + 0.004487895139013453, + 0.004483004799107143, + 0.00451065077027027, + 0.004517674288288288 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-match/before-native.json b/performance/2026-09-09-match/before-native.json new file mode 100644 index 0000000..60f3caf --- /dev/null +++ b/performance/2026-09-09-match/before-native.json @@ -0,0 +1,317 @@ +[ + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "simpleText" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 6.720685135279937E-5, + "scoreError": 3.3549594139467894E-6, + "scoreConfidence" : [ + 6.385189193885258E-5, + 7.056181076674616E-5 + ], + "scorePercentiles" : { + "0.00" : 6.171752471202786E-5, + "25.00" : 6.381079249263327E-5, + "50.00" : 6.724683511920706E-5, + "75.00" : 7.058291832976158E-5, + "90.00" : 7.199218564157514E-5, + "99.00" : 7.199218564157514E-5, + "99.90" : 7.199218564157514E-5, + "99.99" : 7.199218564157514E-5, + "100.00" : 7.199218564157514E-5 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 6.724683511920706E-5, + 6.917365101794803E-5, + 7.199218564157514E-5, + 6.171752471202786E-5, + 6.590406027323868E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "text" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.0659089987857143, + "scoreError": 0.0019861599431220153, + "scoreConfidence" : [ + 0.06392283884259228, + 0.06789515872883631 + ], + "scorePercentiles" : { + "0.00" : 0.06471609614285714, + "25.00" : 0.06472032107142857, + "50.00" : 0.06505852021428572, + "75.00" : 0.06752291578571429, + "90.00" : 0.06994971657142857, + "99.00" : 0.06994971657142857, + "99.90" : 0.06994971657142857, + "99.99" : 0.06994971657142857, + "100.00" : 0.06994971657142857 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.06994971657142857, + 0.06505852021428572, + 0.064724546, + 0.06471609614285714, + 0.065096115 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "model3D" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 1.3130055219452886E-4, + "scoreError": 2.1915162304284084E-6, + "scoreConfidence" : [ + 1.2910903596410046E-4, + 1.3349206842495727E-4 + ], + "scorePercentiles" : { + "0.00" : 1.2796580376899696E-4, + "25.00" : 1.2916381386018238E-4, + "50.00" : 1.31299334224924E-4, + "75.00" : 1.3343789951367782E-4, + "90.00" : 1.3482815197568389E-4, + "99.00" : 1.3482815197568389E-4, + "99.90" : 1.3482815197568389E-4, + "99.99" : 1.3482815197568389E-4, + "100.00" : 1.3482815197568389E-4 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 1.2796580376899696E-4, + 1.3204764705167173E-4, + 1.3036182395136778E-4, + 1.31299334224924E-4, + 1.3482815197568389E-4 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Rainier.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.10360151070000001, + "scoreError": 2.7277753526385655E-4, + "scoreConfidence" : [ + 0.10332873316473615, + 0.10387428823526387 + ], + "scorePercentiles" : { + "0.00" : 0.1031688187, + "25.00" : 0.1033491087, + "50.00" : 0.1035378776, + "75.00" : 0.10388572925, + "90.00" : 0.1040068615, + "99.00" : 0.1040068615, + "99.90" : 0.1040068615, + "99.99" : 0.1040068615, + "100.00" : 0.1040068615 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.1040068615, + 0.1031688187, + 0.103764597, + 0.1035293987, + 0.1035378776 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Maltese.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.4465430449333333, + "scoreError": 0.0019431361166176357, + "scoreConfidence" : [ + 0.4445999088167157, + 0.4484861810499509 + ], + "scorePercentiles" : { + "0.00" : 0.4440350296666667, + "25.00" : 0.44433289249999997, + "50.00" : 0.446602363, + "75.00" : 0.44872353833333334, + "90.00" : 0.4490379473333333, + "99.00" : 0.4490379473333333, + "99.90" : 0.4490379473333333, + "99.99" : 0.4490379473333333, + "100.00" : 0.4490379473333333 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.4484091293333333, + 0.4440350296666667, + 0.4490379473333333, + 0.4446307553333333, + 0.446602363 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "Sunrise.bmp" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 1.2832512148, + "scoreError": 0.002688182145108722, + "scoreConfidence" : [ + 1.2805630326548911, + 1.2859393969451087 + ], + "scorePercentiles" : { + "0.00" : 1.27896847, + "25.00" : 1.280402455, + "50.00" : 1.283176469, + "75.00" : 1.2861373475, + "90.00" : 1.286690892, + "99.00" : 1.286690892, + "99.90" : 1.286690892, + "99.99" : 1.286690892, + "100.00" : 1.286690892 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 1.286690892, + 1.285583803, + 1.283176469, + 1.27896847, + 1.28183644 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "warmupIterations" : 3, + "warmupTime" : "1 sec", + "measurementIterations" : 5, + "measurementTime" : "1 sec", + "params" : { + "corpus" : "compressed_MVT.pbf" + }, + "advanced" : { + + }, + "primaryMetric" : { + "score": 0.003580525805614035, + "scoreError": 9.283029112755546E-5, + "scoreConfidence" : [ + 0.0034876955144864793, + 0.0036733560967415904 + ], + "scorePercentiles" : { + "0.00" : 0.003496575940350877, + "25.00" : 0.0035087866684210527, + "50.00" : 0.003555619301754386, + "75.00" : 0.003664718194736842, + "90.00" : 0.003763398649122807, + "99.00" : 0.003763398649122807, + "99.90" : 0.003763398649122807, + "99.99" : 0.003763398649122807, + "100.00" : 0.003763398649122807 + }, + "scoreUnit" : "sec/op", + "rawData" : [ + [ + 0.003763398649122807, + 0.003496575940350877, + 0.003520997396491228, + 0.003555619301754386, + 0.0035660377403508776 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-match/before-sizes.jsonl b/performance/2026-09-09-match/before-sizes.jsonl new file mode 100644 index 0000000..6b0a261 --- /dev/null +++ b/performance/2026-09-09-match/before-sizes.jsonl @@ -0,0 +1,70 @@ +{"corpus":"simpleText","level":0,"originalSizeBytes":100,"compressedSizeBytes":105,"singleRunMs":18.721607} +{"corpus":"simpleText","level":1,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":10.375607} +{"corpus":"simpleText","level":2,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.346866} +{"corpus":"simpleText","level":3,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.426491} +{"corpus":"simpleText","level":4,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.288781} +{"corpus":"simpleText","level":5,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.294199} +{"corpus":"simpleText","level":6,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.256687} +{"corpus":"simpleText","level":7,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.217747} +{"corpus":"simpleText","level":8,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.213022} +{"corpus":"simpleText","level":9,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.510794} +{"corpus":"text","level":0,"originalSizeBytes":1232923,"compressedSizeBytes":1233018,"singleRunMs":4.634060} +{"corpus":"text","level":1,"originalSizeBytes":1232923,"compressedSizeBytes":599813,"singleRunMs":54.476717} +{"corpus":"text","level":2,"originalSizeBytes":1232923,"compressedSizeBytes":581519,"singleRunMs":33.454095} +{"corpus":"text","level":3,"originalSizeBytes":1232923,"compressedSizeBytes":565252,"singleRunMs":34.883134} +{"corpus":"text","level":4,"originalSizeBytes":1232923,"compressedSizeBytes":531466,"singleRunMs":59.907435} +{"corpus":"text","level":5,"originalSizeBytes":1232923,"compressedSizeBytes":521837,"singleRunMs":61.611316} +{"corpus":"text","level":6,"originalSizeBytes":1232923,"compressedSizeBytes":506455,"singleRunMs":76.163221} +{"corpus":"text","level":7,"originalSizeBytes":1232923,"compressedSizeBytes":506097,"singleRunMs":78.619466} +{"corpus":"text","level":8,"originalSizeBytes":1232923,"compressedSizeBytes":513489,"singleRunMs":83.872443} +{"corpus":"text","level":9,"originalSizeBytes":1232923,"compressedSizeBytes":492523,"singleRunMs":220.517381} +{"corpus":"model3D","level":0,"originalSizeBytes":2478,"compressedSizeBytes":2483,"singleRunMs":0.054391} +{"corpus":"model3D","level":1,"originalSizeBytes":2478,"compressedSizeBytes":2169,"singleRunMs":0.236631} +{"corpus":"model3D","level":2,"originalSizeBytes":2478,"compressedSizeBytes":2168,"singleRunMs":0.159924} +{"corpus":"model3D","level":3,"originalSizeBytes":2478,"compressedSizeBytes":2166,"singleRunMs":0.143489} +{"corpus":"model3D","level":4,"originalSizeBytes":2478,"compressedSizeBytes":2165,"singleRunMs":0.133548} +{"corpus":"model3D","level":5,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.726203} +{"corpus":"model3D","level":6,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.277670} +{"corpus":"model3D","level":7,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.243557} +{"corpus":"model3D","level":8,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.184029} +{"corpus":"model3D","level":9,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.404074} +{"corpus":"Rainier.bmp","level":0,"originalSizeBytes":6220854,"compressedSizeBytes":6221329,"singleRunMs":4.097972} +{"corpus":"Rainier.bmp","level":1,"originalSizeBytes":6220854,"compressedSizeBytes":3387685,"singleRunMs":127.041113} +{"corpus":"Rainier.bmp","level":2,"originalSizeBytes":6220854,"compressedSizeBytes":3357387,"singleRunMs":101.260474} +{"corpus":"Rainier.bmp","level":3,"originalSizeBytes":6220854,"compressedSizeBytes":3345679,"singleRunMs":106.363578} +{"corpus":"Rainier.bmp","level":4,"originalSizeBytes":6220854,"compressedSizeBytes":3325593,"singleRunMs":100.669595} +{"corpus":"Rainier.bmp","level":5,"originalSizeBytes":6220854,"compressedSizeBytes":3313388,"singleRunMs":105.538266} +{"corpus":"Rainier.bmp","level":6,"originalSizeBytes":6220854,"compressedSizeBytes":3283450,"singleRunMs":113.997284} +{"corpus":"Rainier.bmp","level":7,"originalSizeBytes":6220854,"compressedSizeBytes":3282047,"singleRunMs":120.376039} +{"corpus":"Rainier.bmp","level":8,"originalSizeBytes":6220854,"compressedSizeBytes":3274905,"singleRunMs":118.865381} +{"corpus":"Rainier.bmp","level":9,"originalSizeBytes":6220854,"compressedSizeBytes":3258570,"singleRunMs":3625.149389} +{"corpus":"Maltese.bmp","level":0,"originalSizeBytes":16427390,"compressedSizeBytes":16428645,"singleRunMs":6.704834} +{"corpus":"Maltese.bmp","level":1,"originalSizeBytes":16427390,"compressedSizeBytes":8344362,"singleRunMs":287.839174} +{"corpus":"Maltese.bmp","level":2,"originalSizeBytes":16427390,"compressedSizeBytes":7762283,"singleRunMs":334.470960} +{"corpus":"Maltese.bmp","level":3,"originalSizeBytes":16427390,"compressedSizeBytes":7494606,"singleRunMs":371.202987} +{"corpus":"Maltese.bmp","level":4,"originalSizeBytes":16427390,"compressedSizeBytes":7272625,"singleRunMs":395.378098} +{"corpus":"Maltese.bmp","level":5,"originalSizeBytes":16427390,"compressedSizeBytes":7265831,"singleRunMs":509.528066} +{"corpus":"Maltese.bmp","level":6,"originalSizeBytes":16427390,"compressedSizeBytes":7158472,"singleRunMs":523.034253} +{"corpus":"Maltese.bmp","level":7,"originalSizeBytes":16427390,"compressedSizeBytes":7157735,"singleRunMs":526.984351} +{"corpus":"Maltese.bmp","level":8,"originalSizeBytes":16427390,"compressedSizeBytes":7125327,"singleRunMs":524.641283} +{"corpus":"Maltese.bmp","level":9,"originalSizeBytes":16427390,"compressedSizeBytes":7034092,"singleRunMs":1436.734506} +{"corpus":"Sunrise.bmp","level":0,"originalSizeBytes":52344054,"compressedSizeBytes":52348049,"singleRunMs":31.612486} +{"corpus":"Sunrise.bmp","level":1,"originalSizeBytes":52344054,"compressedSizeBytes":27793016,"singleRunMs":887.391514} +{"corpus":"Sunrise.bmp","level":2,"originalSizeBytes":52344054,"compressedSizeBytes":27471887,"singleRunMs":1064.576845} +{"corpus":"Sunrise.bmp","level":3,"originalSizeBytes":52344054,"compressedSizeBytes":27404419,"singleRunMs":1166.086238} +{"corpus":"Sunrise.bmp","level":4,"originalSizeBytes":52344054,"compressedSizeBytes":27107867,"singleRunMs":1250.581032} +{"corpus":"Sunrise.bmp","level":5,"originalSizeBytes":52344054,"compressedSizeBytes":27096750,"singleRunMs":1511.964986} +{"corpus":"Sunrise.bmp","level":6,"originalSizeBytes":52344054,"compressedSizeBytes":26838825,"singleRunMs":1479.025315} +{"corpus":"Sunrise.bmp","level":7,"originalSizeBytes":52344054,"compressedSizeBytes":26827604,"singleRunMs":1687.182227} +{"corpus":"Sunrise.bmp","level":8,"originalSizeBytes":52344054,"compressedSizeBytes":26728454,"singleRunMs":1866.351752} +{"corpus":"Sunrise.bmp","level":9,"originalSizeBytes":52344054,"compressedSizeBytes":26372269,"singleRunMs":12143.996321} +{"corpus":"compressed_MVT.pbf","level":0,"originalSizeBytes":146224,"compressedSizeBytes":146239,"singleRunMs":0.056884} +{"corpus":"compressed_MVT.pbf","level":1,"originalSizeBytes":146224,"compressedSizeBytes":95812,"singleRunMs":2.498114} +{"corpus":"compressed_MVT.pbf","level":2,"originalSizeBytes":146224,"compressedSizeBytes":94608,"singleRunMs":2.921274} +{"corpus":"compressed_MVT.pbf","level":3,"originalSizeBytes":146224,"compressedSizeBytes":94345,"singleRunMs":3.426504} +{"corpus":"compressed_MVT.pbf","level":4,"originalSizeBytes":146224,"compressedSizeBytes":93369,"singleRunMs":3.443246} +{"corpus":"compressed_MVT.pbf","level":5,"originalSizeBytes":146224,"compressedSizeBytes":93229,"singleRunMs":3.893521} +{"corpus":"compressed_MVT.pbf","level":6,"originalSizeBytes":146224,"compressedSizeBytes":92605,"singleRunMs":4.154555} +{"corpus":"compressed_MVT.pbf","level":7,"originalSizeBytes":146224,"compressedSizeBytes":92610,"singleRunMs":4.015288} +{"corpus":"compressed_MVT.pbf","level":8,"originalSizeBytes":146224,"compressedSizeBytes":92631,"singleRunMs":4.439951} +{"corpus":"compressed_MVT.pbf","level":9,"originalSizeBytes":146224,"compressedSizeBytes":91727,"singleRunMs":8.610094} diff --git a/performance/2026-09-09-match/native_bench.py b/performance/2026-09-09-match/native_bench.py new file mode 100644 index 0000000..3e56ce4 --- /dev/null +++ b/performance/2026-09-09-match/native_bench.py @@ -0,0 +1,37 @@ +import json +from pathlib import Path +import subprocess +import sys + +binary = str(Path(sys.argv[1]).resolve()) +directory = Path(sys.argv[2]).resolve() +directory.mkdir(parents=True, exist_ok=True) +config = directory / 'runner.cfg' +config.write_text('\n'.join([ + 'name:ratio', f'reportFile:{directory}/benchmark.json', + 'traceFormat:text', 'reportFormat:json', + 'include:.*CompressionBenchmarks.rawDeflateCompression', + f'warmups:{sys.argv[3] if len(sys.argv) > 3 else 3}', + f'iterations:{sys.argv[4] if len(sys.argv) > 4 else 5}', + 'iterationTime:1', 'iterationTimeUnit:sec', + 'outputTimeUnit:sec', 'mode:avgt', +])) + +def run(action, *args): + subprocess.run([binary, str(config), action, str(directory / 'trace.xml'), *map(str, args)], check=True) + +run('--list', directory) +configs = sorted(directory.glob('*.txt')) +assert len(configs) == 7, configs +results = [] +for benchmark_config in configs: + samples = benchmark_config.with_suffix('.samples') + run('--benchmark', benchmark_config, samples) + values = samples.read_text().strip() + assert values and 'null' not in values + results.append(f'{benchmark_config}: {values}') +combined = directory / 'results' +combined.write_text('\n'.join(results)) +run('--store-results', combined) +rows = json.loads((directory / 'benchmark.json').read_text()) +assert len(rows) == 7 diff --git a/performance/2026-09-09-match/source-sha256.json b/performance/2026-09-09-match/source-sha256.json new file mode 100644 index 0000000..21b95c6 --- /dev/null +++ b/performance/2026-09-09-match/source-sha256.json @@ -0,0 +1,3 @@ +{ + "kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt": "88bf2aef1eb7750849c2b3449d318a3abb09a0085067f3e39b2b4c25372f3fe2" +}