[Zlib-devel] crc32 big/little endian
Török Edwin
edwintorok at gmail.com
Thu Apr 22 04:01:17 EDT 2010
On 04/22/2010 05:43 AM, Mark Adler wrote:
> John and Edwin,
>
> Thank you for all of the testing. My conclusion for now is just to
leave crc32 as is.
>
Yeah, it is very compiler/CPU dependent, see below.
On 04/22/2010 02:57 AM, John Bowler wrote:
> From: Joakim Tjernlund
>> gcc has always had a hard time optimizing crc32. I recently discovered that
>> -O1 was noticeable faster than -O2 with gcc 4.3.4 in some crc32 tests I was
>> doing a while back.
>
> Wow, you are correct. Silly me - I just blindly assumed that -O1 would be slightly worse than -O2 (and this is *true* on ARM gcc 3.4.4 where -O1 performs worse of all but still much better than -O0). Here's an updated BYFOUR table:
>
> buffer -O3 -Os -O2 -O1 -O0
> 64 18644 19035 18650 17279 40816
> 128 17060 17250 17080 17755 36057
> 256 16280 16366 16276 15802 34619
> 512 15874 15926 15890 14901 33596
> 1024 15902 15928 15903 14650 33742
> 2048 15722 15710 15699 14311 32548
> 4096 15586 15602 15586 14129 33543
> 8192 15624 15590 15587 14080 34835
> 16384 18162 18146 18149 17126 37775
Here are some comparisons on my x86-64 (Intel Core 2 Quad Q9550),
comparing only compilers, and optimization levels.
Buffer size is 16384 (8192 is slower for me (17120 vs 16700).
I used -march=native for all compilers.
The numbers are in percentages, 100% is slowest (18000), and 82.2% is
fastest (14800).
(uint64) -O1 -O2 -O3 -Os (uint32) -O1 -O2 -O3 -Os
gcc-4.4 86.7 92.8 92.8 98.9 90.0 92.8 92.8 100.0
gcc-4.5 93.9 92.8 92.8 98.9 92.2 92.8 92.8 99.4
clang 2.6 82.2 88.9 89.4 88.9 85.6 86.7 86.7 86.7
clang 2.7pre2 92.2 90.6 92.2 90.6 86.1 85.6 87.2 84.4
The absolute best is clang 2.6 -O1, 64-bit crc32.
The second best is clang 2.7pre2 -Os, 32-bit crc32.
I can post the generated assembly, if anybody is interested in it.
So it looks like gcc generates better code with 64-bit crc32, and clang
with 32-bit crc32 (except clang 2.6 -O1, which is interesting).
Best regards,
--Edwin
More information about the Zlib-devel
mailing list