Fix a problem with faiss simdlib use #153
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
related issue: #149
The problem is very tricky.
FAISS contain several implementations of
simdlib
, an utility that wraps SIMD register into a kinda platform-independent entity. There are several implementations, which depend on the platform, such asutils/simdlib_avx2.h
orutils/simdlib_neon.h
, and I will addutils/simdlib_avx512.h
at certain moment :) If no specialized version for a platform is found, thenutils/simdlib_emulated.h
is going to be used. It is slow, but it works.I've been seen completely unexplainable SIGSEGV problems which make zero sense. For example,
It was found that the problem is related to the usage of
simdlib
implementations for different platforms in the same project. At least, the provided SIGSEGV above was seen whensimdlib_emulated
was used together withsimdlib_avx2
. This could be somewhat mitigated by moving operators ofsimdlib
classes to friend operators. But the provided fix is much cleaner: I'm bringing back PQFastScan from AVX2 to baseline.Technically, PQFastScan works correctly without AVX2, it just will be slow and not practical.
/kind improvement