Value type sorting
Doug Lea
dl at cs.oswego.edu
Wed Aug 8 19:43:27 UTC 2018
On 08/08/2018 03:34 PM, Remi Forax wrote:
> Hi Doug,
> the example of CVal in CVSorter is weird,
>
> * <pre> {@code
> * __ByValue class CVal {
> * final long field1;
> * final long field2;
> * public CVal(long f2, long f2) { field1 = f1; field2 = f2; }
Thanks. I fixed typo: first f2 should be f1
> why do you have two long fields instead of one, it doesn't seem to be a fair comparison.
It's not fair for comparing vs plain long[] (and is not the version used
for that), but shows a typical case in which not all fields are used in
comparator.
-Doug
>
> ----- Mail original -----
>> De: "Doug Lea" <dl at cs.oswego.edu>
>> À: "valhalla-dev" <valhalla-dev at openjdk.java.net>
>> Envoyé: Mercredi 8 Août 2018 20:33:01
>> Objet: Value type sorting
>
>> I've been exploring sorting algorithms (mainly parallel but also
>> sequential) that should apply well to value types. Even though Valhalla
>> is not yet at a state where you can use generic by-value Comparables,
>> I've been trying things out by manually plugging in various types, in
>> part to scope out future issues. Sorting is the most famous example of a
>> problem for which no algorithm is always best. Among other things,
>> performance varies with element comparison vs copying cost, parallelism
>> support, workspace overhead, and trade-offs of average vs worst case
>> behavior. I placed a snapshot of the current Goldilocks candidate
>> balancing these for value types at:
>> http://gee.cs.oswego.edu/dl/wwwtmp/CVSorter.java
>> The internal documentation describes some of the algorithmic choices.
>> As the instruction near the top indicate, for now you need to plug in
>> any __ByValue class named "CVal". This compiles and runs using current
>> (build zero) early access (http://jdk.java.net/valhalla/).
>>
>> Just for comparison, there's also an otherwise identical version for
>> long[] arrays at:
>> http://gee.cs.oswego.edu/dl/wwwtmp/LongSorter.java
>> When using a __ByValue type just emulating a single long, CVSorter seems
>> to be only 5% or so slower than LongSorter sorting 100 million elements,
>> which is pretty good for using something labeled build zero. But
>> CVSorter also works well with various small or medium-sized value types.
>>
>> Any feedback would be welcome. It would be especially nice to hear from
>> anyone who has actual data and types that need sorting. There are a lot
>> of synthetic loads available (it does well on most), but having some
>> actual cases that anyone might be dealing with in the future would be
>> helpful.
>>
>> -Doug
>
More information about the valhalla-dev
mailing list