From f48cf77c4d4acb9c277ed98ed62e61dbb1c8edc8 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Tue, 14 May 2024 18:15:30 +0200 Subject: [PATCH] (array, experimental) Add benchmark results for quicksort --- code/libraries/array/cpp/readme.md | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/code/libraries/array/cpp/readme.md b/code/libraries/array/cpp/readme.md index 9d401bda..7bb7ca5f 100644 --- a/code/libraries/array/cpp/readme.md +++ b/code/libraries/array/cpp/readme.md @@ -1,12 +1,29 @@ -# Array C++ Helpers +# LongArray C++ Helpers This package contains helper functions for working with LongArray objects, as native C++ calls. The helpers are only built on Linux, and if they are absent, Java substitutes should be used instead. -Note that the C++ helpers are compiled with march=native, so they are not portable +Library loading and access is available through the +[NativeAlgos](java/nu/marginalia/NativeAlgos.java) class. + +Note that the C++ helpers are compiled with march=native by default, so they are not portable between different CPU architectures. -This provides a speedup for some operations, especially when using MemorySegment's -get methods and not Unsafe. Library loading and access is available through the -[NativeAlgos](java/nu/marginalia/NativeAlgos.java) class. +This provides a speedup for some operations, especially when compared to using MemorySegment's +get methods and not Unsafe. + +## Benchmarks + +JMH benchmark results for 64 bit quicksort N=2^10, 25 trials, graalvm 21.0.3: + +| Implementation | Throughput ops/s | Error p=99% | +|----------------|------------------|-------------| +| native | 114.877 | 4.216 | +| unsafe | 98.443 | 2.723 | +| memorysegment | 72.492 | 1.980 | + +Note that odds are stacked in favor of the native implementation +since the dataset is fairly large, meaning the call overhead is +less significant. For smaller datasets, the overhead of native +calls may be a bigger factor. \ No newline at end of file