Cyan4973 / Cyan4973/xxHash

Optimize xxh32 and xxh64 with ARM SVE instructions

Closed
#737 6 comments 4 reactions 0 assignees View on GitHub
Dominant language
C
Stars
11.2k
Forks
913
Avg merge
2h 57m
Merged PRs (30d)
17

Description

With pull request #713 , XXH3 is optimized by ARM SVE instructions. Since data is divided in blocks in XXH3, and vector instructions could handle data in parallel.

For XXH32 & XXH64, data is fetched with stream. So a new method (multi-buffer) could be used to adopt vector instructions. The implementation is in https://github.com/hzhuang1/isa-l_crypto/tree/debug_xxh32. Multi-buffer also means multiple jobs. With multiple jobs running in parallel, vector instructions could be used to accelerate.
![Screenshot from 2022-09-07 14-22-59](https://user-images.githubusercontent.com/534660/188803867-d4ab9968-3f63-4688-9dc9-c44eb808ef83.png)

The performance data fetched from two machines is above. One is SVE512 (fujitsu), and the other is SVE256 (AWS).

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reviewing pull request #713 for the existing ARM SVE optimization approach and the linked isa-l_crypto debug_xxh32 implementation. Adapt the multi-buffer approach to XXH32 and XXH64, then compare performance on SVE256 and SVE512 systems against the reported results.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
performance
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.