Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add: AVX2 acceleration #69

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions include/stringzilla/stringzilla.h
Original file line number Diff line number Diff line change
Expand Up @@ -778,6 +778,9 @@ SZ_PUBLIC sz_cptr_t sz_find_from_set_serial(sz_cptr_t text, sz_size_t length, sz
/** @copydoc sz_find_from_set */
SZ_PUBLIC sz_cptr_t sz_find_from_set_avx512(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set);

/** @copydoc sz_find_from_set */
SZ_PUBLIC sz_cptr_t sz_find_from_set_avx2(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set);

/** @copydoc sz_find_from_set */
SZ_PUBLIC sz_cptr_t sz_find_from_set_neon(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set);

Expand All @@ -804,6 +807,9 @@ SZ_PUBLIC sz_cptr_t sz_find_last_from_set_serial(sz_cptr_t text, sz_size_t lengt
/** @copydoc sz_find_last_from_set */
SZ_PUBLIC sz_cptr_t sz_find_last_from_set_avx512(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set);

/** @copydoc sz_find_last_from_set */
SZ_PUBLIC sz_cptr_t sz_find_last_from_set_avx2(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set);

/** @copydoc sz_find_last_from_set */
SZ_PUBLIC sz_cptr_t sz_find_last_from_set_neon(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set);

Expand Down Expand Up @@ -2807,6 +2813,14 @@ SZ_PUBLIC sz_cptr_t sz_find_last_avx2(sz_cptr_t h, sz_size_t h_length, sz_cptr_t
return sz_find_last_serial(h, h_length, n, n_length);
}

SZ_PUBLIC sz_cptr_t sz_find_from_set_avx2(sz_cptr_t h, sz_size_t h_length, sz_u8_set_t const *set) {
return sz_find_from_set_serial(h, h_length, set);
}

SZ_PUBLIC sz_cptr_t sz_find_last_from_set_avx2(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set) {
return sz_find_last_from_set_serial(text, length, set);
}

#endif
#pragma endregion

Expand Down Expand Up @@ -3767,6 +3781,10 @@ SZ_PUBLIC sz_cptr_t sz_find_last(sz_cptr_t haystack, sz_size_t h_length, sz_cptr
SZ_PUBLIC sz_cptr_t sz_find_from_set(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set) {
#if SZ_USE_X86_AVX512
return sz_find_from_set_avx512(text, length, set);
#elif SZ_USE_X86_AVX2
return sz_find_from_set_avx2(text, length, set);
#elif SZ_USE_ARM_NEON
return sz_find_from_set_neon(text, length, set);
#else
return sz_find_from_set_serial(text, length, set);
#endif
Expand All @@ -3775,6 +3793,10 @@ SZ_PUBLIC sz_cptr_t sz_find_from_set(sz_cptr_t text, sz_size_t length, sz_u8_set
SZ_PUBLIC sz_cptr_t sz_find_last_from_set(sz_cptr_t text, sz_size_t length, sz_u8_set_t const *set) {
#if SZ_USE_X86_AVX512
return sz_find_last_from_set_avx512(text, length, set);
#elif SZ_USE_X86_AVX2
return sz_find_last_from_set_avx2(text, length, set);
#elif SZ_USE_ARM_NEON
return sz_find_last_from_set_neon(text, length, set);
#else
return sz_find_last_from_set_serial(text, length, set);
#endif
Expand Down
8 changes: 4 additions & 4 deletions scripts/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
// Those parameters must never be explicitly set during releases,
// but they come handy during development, if you want to validate
// different ISA-specific implementations.
// #define SZ_USE_X86_AVX2 0
// #define SZ_USE_X86_AVX512 0
// #define SZ_USE_ARM_NEON 0
// #define SZ_USE_ARM_SVE 0
#define SZ_USE_X86_AVX2 1
#define SZ_USE_X86_AVX512 0
#define SZ_USE_ARM_NEON 0
#define SZ_USE_ARM_SVE 0
#define SZ_DEBUG 1

#include <string> // Baseline
Expand Down