Re: define pg_structiszero(addr, s, r)
David Rowley <dgrowleyml@gmail.com>
From: David Rowley <dgrowleyml@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>,
Peter Smith <smithpb2250@gmail.com>, Peter Eisentraut <peter@eisentraut.org>,
Heikki Linnakangas <hlinnaka@iki.fi>, pgsql-hackers@lists.postgresql.org
Date: 2024-11-01T07:19:39Z
Lists: pgsql-hackers
Attachments
- allzeros_v2.c (text/plain)
On Fri, 1 Nov 2024 at 19:27, Michael Paquier <michael@paquier.xyz> wrote: > Under gcc -O2 or -O3, the single-byte check or the 8-byte check don't > make a difference. Please see the attached (allzeros.txt) for a quick > check if you want to check by yourself. With 1M iterations, both > average around 3ms for 1M iterations on my laptop (not the fastest > thing around). > > Under -O0, though, the difference is noticeable: > - 1-byte check: 3.52s for 1M iterations, averaging one check at > 3.52ns. > - 8-byte check: 0.46s for 1M iterations, averaging one check at > 0.46ns. > > Even for that, I doubt that this is going to be noticeable in > practice, still the difference exists. The reason you're not seeing the slowdown with -O2 and -O3 is because your compiler didn't think there was anything to do so didn't emit the code you were trying to benchmark. Try looking at allzeros.s after doing "gcc allzeros.c -S -O2". I've attached an updated version for you to try. I used a volatile bool and assigned the function result to it to prevent the compiler from optimising out the test. $ gcc allzeros.c -O2 -o allzeros $ ./allzeros char: done in 1607800 nanoseconds size_t: done in 208800 nanoseconds (7.70019 times faster) $ gcc allzeros.c -O3 -o allzeros $ ./allzeros char: done in 1584500 nanoseconds size_t: done in 225700 nanoseconds (7.02038 times faster) David
Commits
-
Use pg_memory_is_all_zeros() in PageIsVerifiedExtended()
- 03a42c9652f8 18.0 landed
-
Optimize pg_memory_is_all_zeros() in memutils.h
- 5be1dabd2ae0 18.0 landed
-
Remove use of pg_memory_is_all_zeros() in bufpage.c
- e819bbb7c82a 18.0 landed
-
Add pg_memory_is_all_zeros() in memutils.h
- 07e9e28b56db 18.0 landed