[dpdk-dev] [PATCH v6 0/7] rte_hash_crc reworked to be platform-independent

Neil Horman nhorman at tuxdriver.com
Sun Feb 1 15:13:56 CET 2015


On Thu, Jan 29, 2015 at 02:48:11PM +0600, Yerden Zhumabekov wrote:
> This is a rework of my previous patches improving performance of rte_hash_crc.
> 
> Summary of changes:
> * software implementation of CRC32 introduced;
> * in the runtime, algorithm can fall back to software version if CPU doesn't support SSE4.2;
> * best available algorithm is automatically detected upon application startup;
> * redundant compile checks removed from test utilities;
> * assembly code for emitting SSE4.2 instructions is used instead of built-in intrinsics;
> * rte_hash_crc() function performance significantly improved.
> 
> v6 changes:
> * added 'const' qualifier to crc32c lookup tables declaration.
> 
> v5 changes:
> * given up gcc's builtin SSE4.2 intrinsics;
> * add assembly code for emitting SSE4.2 instructions.
> 
> v4 changes:
> * icc-specific compile checks removed.
> 
> v3 changes:
> * setting default algorithm implementation as a constructor while application startup;
> * crc32 software implementation improved;
> * removed compile-time checks from test_hash_perf and test_hash.
> 
> v2 changes:
> * added CRC32 software implementation;
> * added rte_hash_crc_set_alg() function to control availability of SSE4.2;
> * added fallback to sw crc32 in case SSE4.2 is not available, or if SSE4.2 is intentionally disabled.
> 
> Initial version (v1) changes:
> * 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.
> 
> 
> Yerden Zhumabekov (7):
>   hash: add software CRC32 implementation
>   hash: add assembly implementation of CRC32 intrinsics
>   hash: replace built-in functions implementing SSE4.2
>   hash: add rte_hash_crc_8byte function
>   hash: add fallback to software CRC32 implementation
>   hash: rte_hash_crc() slices data into 8-byte pieces
>   test: remove redundant compile checks
> 
>  app/test/test_hash.c           |    7 -
>  app/test/test_hash_perf.c      |   11 -
>  lib/librte_hash/rte_hash_crc.h |  459 +++++++++++++++++++++++++++++++++++++++-
>  3 files changed, 448 insertions(+), 29 deletions(-)
> 
> -- 
> 1.7.9.5
> 
> 
Just to be clear, this does build if you compile it against the "default"
machine type, correct?
Neil



More information about the dev mailing list