diff --git a/comparison/README.md b/comparison/README.md index 5bd5f11dc..73b6b73d0 100644 --- a/comparison/README.md +++ b/comparison/README.md @@ -19,15 +19,15 @@ graphs are boring flat lines, so a table is used instead. | Implementation | Throughput (GiB/s) | |----------------|--------------------| -| Rust | 13.5 | -| C | 13.5 | +| Rust | 13.4 | +| C | 13.4 | ## x86_64 | Implementation | Throughput (GiB/s) | |----------------|--------------------| -| Rust | 16.5 | -| C | 16.5 | +| Rust | 16.7 | +| C | 16.6 | ## Streaming data @@ -75,7 +75,6 @@ Compares the **time taken** to hash 0 to 32 bytes of data. /> - # xxHash3 (64-bit) ## Oneshot hashing @@ -88,20 +87,21 @@ graphs are boring flat lines, so a table is used instead. | Implementation | Throughput (GiB/s) | |----------------|--------------------| -| Rust | 35.2 | +| Rust | 35.0 | | C | 35.0 | | C (scalar) | 21.2 | -| C (NEON) | 35.1 | +| C (NEON) | 35.0 | ### x86_64 | Implementation | Throughput (GiB/s) | |----------------|--------------------| -| Rust | 58.6 | -| C | 25.0 | -| C (scalar) | 7.5 | +| Rust | 58.9 | +| C | 25.1 | +| C (scalar) | 7.6 | | C (SSE2) | 25.1 | -| C (AVX2) | 57.8 | +| C (AVX2) | 58.4 | + ## Streaming data @@ -150,6 +150,78 @@ cluttering the graph and wasting benchmarking time. /> +# xxHash3 (128-bit) + +## Oneshot hashing + +Compares the **speed** of hashing an entire buffer of data in one +function call. Data sizes from 256 KiB to 4 MiB are tested. These +graphs are boring flat lines, so a table is used instead. + +| Implementation | Throughput (GiB/s) | +|----------------|--------------------| +| Rust | 34.4 | +| C | 34.8 | +| C (scalar) | 21.3 | +| C (NEON) | 34.6 | + +### x86_64 + +| Implementation | Throughput (GiB/s) | +|----------------|--------------------| +| Rust | 58.3 | +| C | 25.6 | +| C (scalar) | 7.6 | +| C (SSE2) | 25.5 | +| C (AVX2) | 57.4 | + +## Streaming data + +Compares the **speed** of hashing a 1 MiB buffer of data split into +various chunk sizes. + +### aarch64 + + + xxHash3, 128-bit, streaming data, on an aarch64 processor + + +### x86_64 + + + xxHash3, 128-bit, streaming data, on an x86_64 processor + + +## Small amounts of data + +Compares the **time taken** to hash 0 to 230 bytes of +data. Representative samples are taken from similar times to avoid +cluttering the graph and wasting benchmarking time. + +### aarch64 + + + xxHash3, 128-bit, small data, on an aarch64 processor + + +### x86_64 + + + xxHash3, 128-bit, small data, on an x86_64 processor + + # Benchmark machines ## Overview @@ -159,7 +231,7 @@ cluttering the graph and wasting benchmarking time. | Apple M1 Max | 64 GiB | clang 16.0.0 | | AMD Ryzen 9 3950X | 32 GiB | cl.exe 19.41.34120 | -Tests were run with `rustc 1.81.0 (eeb90cda1 2024-09-04)`. +Tests were run with `rustc 1.82.0 (f6e511eec 2024-10-15)`. ## Details diff --git a/comparison/results/xxhash3_128-streaming-aarch64.svg b/comparison/results/xxhash3_128-streaming-aarch64.svg new file mode 100644 index 000000000..15cb7e2ce --- /dev/null +++ b/comparison/results/xxhash3_128-streaming-aarch64.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 MiB/sec + 16 MiB/sec + 32 MiB/sec + 64 MiB/sec + 128 MiB/sec + 256 MiB/sec + 512 MiB/sec + 1 GiB/sec + 2 GiB/sec + 4 GiB/sec + 8 GiB/sec + 16 GiB/sec + 32 GiB/sec + 64 GiB/sec + + 1 B + 2 B + 4 B + 8 B + 16 B + 32 B + 64 B + 128 B + 256 B + 512 B + 1 KiB + 2 KiB + 4 KiB + 8 KiB + 16 KiB + 32 KiB + 64 KiB + 128 KiB + 256 KiB + 512 KiB + 1 MiB + 2 MiB + Chunk Size + Throughput + + Implementation + + + + + + + + + + + + + Rust + C + C (scalar) + C (NEON) + aarch64 (Apple M1 Max) + [xxhash3_128] Throughput of a 1 MiB buffer by chunk size (higher is better) + + diff --git a/comparison/results/xxhash3_128-streaming-x86_64.svg b/comparison/results/xxhash3_128-streaming-x86_64.svg new file mode 100644 index 000000000..7ec2719a4 --- /dev/null +++ b/comparison/results/xxhash3_128-streaming-x86_64.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 MiB/sec + 16 MiB/sec + 32 MiB/sec + 64 MiB/sec + 128 MiB/sec + 256 MiB/sec + 512 MiB/sec + 1 GiB/sec + 2 GiB/sec + 4 GiB/sec + 8 GiB/sec + 16 GiB/sec + 32 GiB/sec + 64 GiB/sec + + 1 B + 2 B + 4 B + 8 B + 16 B + 32 B + 64 B + 128 B + 256 B + 512 B + 1 KiB + 2 KiB + 4 KiB + 8 KiB + 16 KiB + 32 KiB + 64 KiB + 128 KiB + 256 KiB + 512 KiB + 1 MiB + 2 MiB + Chunk Size + Throughput + + Implementation + + + + + + + + + + + + + + + + Rust + C + C (scalar) + C (SSE2) + C (AVX2) + x86_64 (AMD Ryzen 9 3950X) + [xxhash3_128] Throughput of a 1 MiB buffer by chunk size (higher is better) + + diff --git a/comparison/results/xxhash3_128-tiny_data-aarch64.svg b/comparison/results/xxhash3_128-tiny_data-aarch64.svg new file mode 100644 index 000000000..8d66f2958 --- /dev/null +++ b/comparison/results/xxhash3_128-tiny_data-aarch64.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10ns + 20ns + + 0 B + 50 B + 100 B + 150 B + 200 B + Size + Time + + Implementation + + + + + + + + + + + + + Rust + C + C (scalar) + C (NEON) + aarch64 (Apple M1 Max) + [xxhash3_128] Hashing small amounts of bytes (lower is better) + + diff --git a/comparison/results/xxhash3_128-tiny_data-x86_64.svg b/comparison/results/xxhash3_128-tiny_data-x86_64.svg new file mode 100644 index 000000000..a16135f96 --- /dev/null +++ b/comparison/results/xxhash3_128-tiny_data-x86_64.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10ns + 20ns + + 0 B + 50 B + 100 B + 150 B + 200 B + Size + Time + + Implementation + + + + + + + + + + + + + + + + Rust + C + C (scalar) + C (SSE2) + C (AVX2) + x86_64 (AMD Ryzen 9 3950X) + [xxhash3_128] Hashing small amounts of bytes (lower is better) + + diff --git a/comparison/results/xxhash3_64-streaming-aarch64.svg b/comparison/results/xxhash3_64-streaming-aarch64.svg index dc46b30db..a8075662e 100644 --- a/comparison/results/xxhash3_64-streaming-aarch64.svg +++ b/comparison/results/xxhash3_64-streaming-aarch64.svg @@ -21,94 +21,94 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 MiB/sec diff --git a/comparison/results/xxhash3_64-streaming-x86_64.svg b/comparison/results/xxhash3_64-streaming-x86_64.svg index 6a3997ed9..938d03d94 100644 --- a/comparison/results/xxhash3_64-streaming-x86_64.svg +++ b/comparison/results/xxhash3_64-streaming-x86_64.svg @@ -21,116 +21,116 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 MiB/sec diff --git a/comparison/results/xxhash3_64-tiny_data-aarch64.svg b/comparison/results/xxhash3_64-tiny_data-aarch64.svg index 753a36cc5..d4154de35 100644 --- a/comparison/results/xxhash3_64-tiny_data-aarch64.svg +++ b/comparison/results/xxhash3_64-tiny_data-aarch64.svg @@ -20,80 +20,79 @@ - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 4ns - 8ns - 12ns - 16ns - 20ns - + 4ns + 8ns + 12ns + 16ns + 0 B 50 B 100 B diff --git a/comparison/results/xxhash3_64-tiny_data-x86_64.svg b/comparison/results/xxhash3_64-tiny_data-x86_64.svg index 81b4fc317..a29058139 100644 --- a/comparison/results/xxhash3_64-tiny_data-x86_64.svg +++ b/comparison/results/xxhash3_64-tiny_data-x86_64.svg @@ -20,96 +20,95 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - 4ns - 8ns - 12ns - 16ns - 20ns - + 4ns + 8ns + 12ns + 16ns + 0 B 50 B 100 B diff --git a/comparison/results/xxhash64-streaming-aarch64.svg b/comparison/results/xxhash64-streaming-aarch64.svg index 1f58161a6..ba0b061e3 100644 --- a/comparison/results/xxhash64-streaming-aarch64.svg +++ b/comparison/results/xxhash64-streaming-aarch64.svg @@ -20,63 +20,62 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 128 MiB/sec - 256 MiB/sec - 512 MiB/sec - 1 GiB/sec - 2 GiB/sec - 4 GiB/sec - 8 GiB/sec - 16 GiB/sec + 256 MiB/sec + 512 MiB/sec + 1 GiB/sec + 2 GiB/sec + 4 GiB/sec + 8 GiB/sec + 16 GiB/sec 32 GiB/sec - + 1 B 2 B 4 B diff --git a/comparison/results/xxhash64-streaming-x86_64.svg b/comparison/results/xxhash64-streaming-x86_64.svg index 064188466..a2223dac3 100644 --- a/comparison/results/xxhash64-streaming-x86_64.svg +++ b/comparison/results/xxhash64-streaming-x86_64.svg @@ -20,63 +20,62 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 128 MiB/sec - 256 MiB/sec - 512 MiB/sec - 1 GiB/sec - 2 GiB/sec - 4 GiB/sec - 8 GiB/sec - 16 GiB/sec + 256 MiB/sec + 512 MiB/sec + 1 GiB/sec + 2 GiB/sec + 4 GiB/sec + 8 GiB/sec + 16 GiB/sec 32 GiB/sec - + 1 B 2 B 4 B diff --git a/comparison/results/xxhash64-tiny_data-aarch64.svg b/comparison/results/xxhash64-tiny_data-aarch64.svg index df15121a7..34b041ab4 100644 --- a/comparison/results/xxhash64-tiny_data-aarch64.svg +++ b/comparison/results/xxhash64-tiny_data-aarch64.svg @@ -20,84 +20,83 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 0 - 2ns - 4ns - 6ns - 8ns - + 0 + 2ns + 4ns + 6ns + 0 B 10 B 20 B diff --git a/comparison/results/xxhash64-tiny_data-x86_64.svg b/comparison/results/xxhash64-tiny_data-x86_64.svg index ca5185f8c..8ea93460b 100644 --- a/comparison/results/xxhash64-tiny_data-x86_64.svg +++ b/comparison/results/xxhash64-tiny_data-x86_64.svg @@ -20,84 +20,83 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 0 - 2ns - 4ns - 6ns - 8ns - + 0 + 2ns + 4ns + 6ns + 0 B 10 B 20 B