28.11.2014 3:04, Thomas Monjalon ?????: > 2014-11-20 11:15, Yerden Zhumabekov: >> These patches bring a fallback mechanism to ensure that CRC32 hash is >> calculated regardless of hardware support from CPU (i.e. SSE4.2 intrinsics). >> Performance is also improved by slicing data in 8 bytes. >> >> Patches were tested on machines either with and without SSE4.2 support. >> >> Software implementation seems to be about 4-5 times slower than >> SSE4.2-enabled one. Of course, they return identical results. >> >> Summary of changes: >> * added CRC32 software implementation, which is used as a fallback in case >> SSE4.2 is not available, or if SSE4.2 is intentionally disabled. >> * added rte_hash_crc_set_alg() function to control availability of SSE4.2. >> * added rte_hash_crc_8byte() function to calculate CRC32 on 8-byte operand. >> * reworked rte_hash_crc() function which leverages both versions of CRC32 >> hash calculation functions with 4 and 8-byte operands. >> * removed compile-time checks from test_hash_perf and test_hash. >> * setting default algorithm implementation as a constructor while >> application startup. >> * SSE4.2 intrinsics are implemented through inline assembly code. >> * added additional run-time check for 64-bit support. > So you don't want to use the target attribute as suggested by Konstantin? > > Why the discussion ended without any acknowledgement? >
I decided to emit SSE4.2 instruction right from the code, because: * it is supported by gcc 4.3; * use of target attribute (in a way suggested by Konstantin) presumably still requires us to use #ifdef which we want to avoid. Actually then, I didn't investigate it further. I'm quite happy with last revision, but I'm open for ideas and discussion. I made new patch series with solely change of crc32c tables declaration using 'const' just as Stephen suggested, and I may post it. But I'd like to see a confirmation for what I've done so far. -- Sincerely, Yerden Zhumabekov State Technical Service Astana, KZ