mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Use pg_bitutils for HyperLogLog.
Using pg_leftmost_one_post32() yields substantial performance benefits. Backpatching to version 13 because HLL is used for HashAgg improvements in 9878b643, which was also backpatched to 13. Reviewed-by: Peter Geoghegan Discussion: https://postgr.es/m/CAH2-WzkGvDKVDo+0YvfvZ+1CE=iCi88DCOGFF3i1hTGGaxcKPw@mail.gmail.com Backpatch-through: 13
This commit is contained in:
parent
f1af75c5f2
commit
fd734f387d
@ -49,6 +49,7 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "lib/hyperloglog.h"
|
#include "lib/hyperloglog.h"
|
||||||
|
#include "port/pg_bitutils.h"
|
||||||
|
|
||||||
#define POW_2_32 (4294967296.0)
|
#define POW_2_32 (4294967296.0)
|
||||||
#define NEG_POW_2_32 (-4294967296.0)
|
#define NEG_POW_2_32 (-4294967296.0)
|
||||||
@ -242,11 +243,13 @@ rho(uint32 x, uint8 b)
|
|||||||
{
|
{
|
||||||
uint8 j = 1;
|
uint8 j = 1;
|
||||||
|
|
||||||
while (j <= b && !(x & 0x80000000))
|
if (x == 0)
|
||||||
{
|
return b + 1;
|
||||||
j++;
|
|
||||||
x <<= 1;
|
j = 32 - pg_leftmost_one_pos32(x);
|
||||||
}
|
|
||||||
|
if (j > b)
|
||||||
|
return b + 1;
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user