Re: [PATCH] Hex-coding optimizations using SVE on ARM.
John Naylor <johncnaylorls@gmail.com>
From: John Naylor <johncnaylorls@gmail.com>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: "Chiranmoy.Bhattacharya@fujitsu.com" <Chiranmoy.Bhattacharya@fujitsu.com>, "Devanga.Susmitha@fujitsu.com" <Devanga.Susmitha@fujitsu.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>, "Ragesh.Hajela@fujitsu.com" <Ragesh.Hajela@fujitsu.com>
Date: 2025-01-14T05:27:30Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Optimize hex_encode() and hex_decode() using SIMD.
- ec8719ccbfcd 19 (unreleased) landed
-
Speed up hex_encode with bytewise lookup
- e24d77080b36 18.0 landed
Attachments
- v2-byte-lookup.patch (text/x-patch) patch v2
On Sat, Jan 11, 2025 at 3:46 AM Nathan Bossart <nathandbossart@gmail.com> wrote:
>
> I was able to get auto-vectorization to take effect on Apple clang 16 with
> the following addition to src/backend/utils/adt/Makefile:
>
> encode.o: CFLAGS += ${CFLAGS_VECTORIZE} -mllvm -force-vector-width=8
>
> This gave the following results with your hex_encode_test() function:
>
> buf | HEAD | patch | % diff
> -------+-------+-------+--------
> 16 | 21 | 16 | 24
> 64 | 54 | 41 | 24
> 256 | 138 | 100 | 28
> 1024 | 441 | 300 | 32
> 4096 | 1671 | 1106 | 34
> 16384 | 6890 | 4570 | 34
> 65536 | 27393 | 18054 | 34
We can do about as well simply by changing the nibble lookup to a byte
lookup, which works on every compiler and architecture:
select hex_encode_test(1000000, 1024);
master:
Time: 1158.700 ms
v2:
Time: 777.443 ms
If we need to do much better than this, it seems better to send the
data to the client as binary, if possible.
--
John Naylor
Amazon Web Services