Mesa (master): util: use faster zlib's CRC32 implementaion

Grazvydas Ignotas notaz at kemper.freedesktop.org
Sun Jan 14 17:11:47 UTC 2018


Module: Mesa
Branch: master
Commit: 6acf22a17991e3e98c35596f0b1cedfaebed6ec3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6acf22a17991e3e98c35596f0b1cedfaebed6ec3

Author: Grazvydas Ignotas <notasas at gmail.com>
Date:   Fri Dec 29 02:05:05 2017 +0200

util: use faster zlib's CRC32 implementaion

zlib provides a faster slice-by-4 CRC32 implementation than the
traditional single byte lookup one used by mesa. As most supported
platforms now link zlib unconditionally, we can easily use it.

Improvement for a 1MB buffer (avg MB/s, n=100, zlib 1.2.8):

  i5-6600K                    C2D E4500
mesa zlib                    mesa zlib
 443 1443 225% +/- 2.1%       403 1175 191% +/- 0.9%

It has been verified the calculation results stay the same after this
change.

Signed-off-by: Grazvydas Ignotas <notasas at gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/util/crc32.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/util/crc32.c b/src/util/crc32.c
index f2e01c61e5..425046ab5f 100644
--- a/src/util/crc32.c
+++ b/src/util/crc32.c
@@ -33,6 +33,9 @@
  */
 
 
+#ifdef HAVE_ZLIB
+#include <zlib.h>
+#endif
 #include "crc32.h"
 
 
@@ -114,6 +117,16 @@ util_hash_crc32(const void *data, size_t size)
    const uint8_t *p = data;
    uint32_t crc = 0xffffffff;
  
+#ifdef HAVE_ZLIB
+   /* Prefer zlib's implementation for better performance.
+    * zlib's uInt is always "unsigned int" while size_t can be 64bit.
+    * Since 1.2.9 there's crc32_z that takes size_t, but use the more
+    * available function to avoid build system complications.
+    */
+   if ((uInt)size == size)
+      return ~crc32(0, data, size);
+#endif
+
    while (size--)
       crc = util_crc32_table[(crc ^ *p++) & 0xff] ^ (crc >> 8);
    




More information about the mesa-commit mailing list