diff options
| author | Heikki Linnakangas | 2015-02-10 08:54:40 +0000 |
|---|---|---|
| committer | Heikki Linnakangas | 2015-02-10 08:54:40 +0000 |
| commit | 025c02420de990c15a90e9e3f86fcfbc5b59ee88 (patch) | |
| tree | 6846db66dc802c4f4a955b887866c13ddcb1cebc /configure | |
| parent | cc761b170c5e7b4ef22ed918f4785ec1fabe62cd (diff) | |
Speed up CRC calculation using slicing-by-8 algorithm.
This speeds up WAL generation and replay. The new algorithm is
significantly faster with large inputs, like full-page images or when
inserting wide rows. It is slower with tiny inputs, i.e. less than 10 bytes
or so, but the speedup with longer inputs more than make up for that. Even
small WAL records at least have 24 byte header in the front.
The output is identical to the current byte-at-a-time computation, so this
does not affect compatibility. The new algorithm is only used for the
CRC-32C variant, not the legacy version used in tsquery or the
"traditional" CRC-32 used in hstore and ltree. Those are not as performance
critical, and are usually only applied over small inputs, so it seems
better to not carry around the extra lookup tables to speed up those rare
cases.
Abhijit Menon-Sen
Diffstat (limited to 'configure')
| -rwxr-xr-x | configure | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/configure b/configure index 8490eb7cf0b..fa271fe4ebe 100755 --- a/configure +++ b/configure @@ -10333,6 +10333,36 @@ if test x"$pgac_cv__types_compatible" = xyes ; then $as_echo "#define HAVE__BUILTIN_TYPES_COMPATIBLE_P 1" >>confdefs.h fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_bswap32" >&5 +$as_echo_n "checking for __builtin_bswap32... " >&6; } +if ${pgac_cv__builtin_bswap32+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +static unsigned long int x = __builtin_bswap32(0xaabbccdd); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + pgac_cv__builtin_bswap32=yes +else + pgac_cv__builtin_bswap32=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__builtin_bswap32" >&5 +$as_echo "$pgac_cv__builtin_bswap32" >&6; } +if test x"$pgac_cv__builtin_bswap32" = xyes ; then + +$as_echo "#define HAVE__BUILTIN_BSWAP32 1" >>confdefs.h + +fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_constant_p" >&5 $as_echo_n "checking for __builtin_constant_p... " >&6; } if ${pgac_cv__builtin_constant_p+:} false; then : |
