From: | Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> |
---|---|
To: | "Andrey M(dot) Borodin" <x4mmm(at)yandex-team(dot)ru> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Sort functions with specialized comparators |
Date: | 2024-05-19 00:15:11 |
Message-ID: | CAEudQArTw7Kh38M9_2rVg1LpVPZ+1ZY=qZWDwhmRnDZrpnwEvA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Em sáb., 18 de mai. de 2024 às 15:52, Andrey M. Borodin <
x4mmm(at)yandex-team(dot)ru> escreveu:
> Hi!
>
> In a thread about sorting comparators[0] Andres noted that we have
> infrastructure to help compiler optimize sorting. PFA attached PoC
> implementation. I've checked that it indeed works on the benchmark from
> that thread.
>
> postgres=# CREATE TABLE arrays_to_sort AS
> SELECT array_shuffle(a) arr
> FROM
> (SELECT ARRAY(SELECT generate_series(1, 1000000)) a),
> generate_series(1, 10);
>
> postgres=# SELECT (sort(arr))[1] FROM arrays_to_sort; -- original
> Time: 990.199 ms
> postgres=# SELECT (sort(arr))[1] FROM arrays_to_sort; -- patched
> Time: 696.156 ms
>
> The benefit seems to be on the order of magnitude with 30% speedup.
>
> There's plenty of sorting by TransactionId, BlockNumber, OffsetNumber, Oid
> etc. But this sorting routines never show up in perf top or something like
> that.
>
> Seems like in most cases we do not spend much time in sorting. But
> specialization does not cost us much too, only some CPU cycles of a
> compiler. I think we can further improve speedup by converting inline
> comparator to value extractor: more compilers will see what is actually
> going on. But I have no proofs for this reasoning.
>
> What do you think?
>
Makes sense.
Regarding the patch.
You could change the style to:
+sort_int32_asc_cmp(const int32 *a, const int32 *b)
+sort_int32_desc_cmp(const int32 *a, const int32 *b)
We must use const in all parameters that can be const.
best regards,
Ranier Vilela
From | Date | Subject | |
---|---|---|---|
Next Message | David Rowley | 2024-05-19 00:39:24 | Re: generic plans and "initial" pruning |
Previous Message | Josh Snyder | 2024-05-18 23:54:52 | PATCH: Add query for operators unusable with RLS to documentation |