Optimize UUID parse using SIMD - Mailing list pgsql-hackers

From Masahiko Sawada
Subject Optimize UUID parse using SIMD
Date
Msg-id CAD21AoCqeR4UQU77Q_yOMNNzJ7AVeiO5QZT+4HnzPm4Wm-e02Q@mail.gmail.com
Whole thread
Responses Re: Optimize UUID parse using SIMD
Re: Optimize UUID parse using SIMD
List pgsql-hackers
Hi all,

I'd like to propose the $subject.

Since commit ec8719ccbfcd made hex_decode_safe() SIMD-aware, decoding
a run of hex digits is now fast. The attached patch reuses
hex_decode_safe() in the UUID input function to speed up parsing.

We accept several textual forms of a UUID[1]. The fast path handles
the common ones: 32 hex digits, the canonical 8x-4x-4x-4x-12x form
(where "nx" means n hex digits), and either of those wrapped in
braces. Otherwise, it falls back to the ordinary scalar UUID parse.

I've benchmarked the parse speed using the following query:

CREATE TEMP TABLE u AS SELECT gen_random_uuid()::text AS t FROM
generate_series(1, 1000000);
EXPLAIN (ANALYZE, TIMING OFF) SELECT t::uuid FROM u;

I compared the execution time of the second query, which measures
uuid_in() alone, with/without SIMD optimization. Here are results (the
median of 5 runs):

HEAD: 208.879 ms
Patched: 40.983 ms

The improvements look promising to me. But in a realistic pipeline the
parse is a small fraction of the work, so end-to-end gains could be
much smaller.

Feedback is very welcome.

Regards,

[1] https://www.postgresql.org/docs/devel/datatype-uuid.html#DATATYPE-UUID

-- 
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachment

pgsql-hackers by date:

Previous
From: Bharath Rupireddy
Date:
Subject: Re: Handle concurrent drop when doing whole database vacuum
Next
From: Sami Imseih
Date:
Subject: Re: pg_stat_statements: Remove (errcode...) framing parentheses in erport(...)