Micro-optimize pg_lfind32().

This commit improves the performance of pg_lfind32() in many cases
by modifying it to process the remaining "tail" of elements with
SIMD instructions instead of processing them one-by-one.  Since the
SIMD code processes a large block of elements, this means that we
will process a subset of elements more than once, but that won't
affect the correctness of the result, and testing has shown that
this helps more cases than it regresses.  With this change, the
standard one-by-one linear search code is only used for small
arrays and for platforms without SIMD support.

Suggested-by: John Naylor
Reviewed-by: John Naylor
Discussion: https://postgr.es/m/20231129171526.GA857928%40nathanxps13

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/7644a7340c8a7764f1b20b34e1273b41347cbfcb

Modified Files
--------------
src/include/port/pg_lfind.h | 114 +++++++++++++++++++++++++++++---------------
1 file changed, 76 insertions(+), 38 deletions(-)

Reply via email to