mirror of
https://github.com/facebookresearch/faiss.git
synced 2026-10-12 02:13:36 +00:00
Remove bare simdlib type aliases from simdlib_dispatch.h (#5069)
Summary: Pull Request resolved: https://github.com/facebookresearch/faiss/pull/5069 Remove the 10 global bare-name using declarations (simd16uint16, simd32uint8, simd8uint32, simd8float32, simd256bit, simd512bit, simd32uint16, simd64uint8, simd16float32) from simdlib_dispatch.h. These aliases resolved through SINGLE_SIMD_LEVEL which is NONE in DD mode, creating a trap where per-ISA TU code accidentally uses scalar emulation. Each file that needs the aliases now declares its own using with an explicit SIMD level, making the dependency visible. Behavior-preserving: all files use the same SINGLE_SIMD_LEVEL they used before, but now explicitly. Reviewed By: mdouze Differential Revision: D100033901 fbshipit-source-id: 2db034c2868de275a5f018d886264762776548c5
This commit is contained in:
committed by
meta-codesync[bot]
parent
4a63c9e415
commit
c4efc42219
@@ -190,6 +190,9 @@ void IndexIVFPQFastScan::encode_vectors(
|
||||
* Look-Up Table functions
|
||||
*********************************************************/
|
||||
|
||||
// Explicit SIMD-level alias (no global bare aliases).
|
||||
using simd8float32 = simd8float32_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
|
||||
void fvec_madd_simd(
|
||||
size_t n,
|
||||
const float* a,
|
||||
|
||||
@@ -213,6 +213,9 @@ IVFRaBitQHeapHandler<C, SL>::IVFRaBitQHeapHandler(
|
||||
}
|
||||
}
|
||||
|
||||
// Explicit alias — must match SIMDResultHandler::handle() signature.
|
||||
using simd16uint16 = simd16uint16_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
|
||||
template <class C, SIMDLevel SL>
|
||||
void IVFRaBitQHeapHandler<C, SL>::handle(
|
||||
size_t q,
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
|
||||
namespace faiss {
|
||||
|
||||
// Explicit SIMD-level aliases for this file (no global bare aliases).
|
||||
using simd16uint16 = simd16uint16_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
using simd32uint8 = simd32uint8_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
|
||||
/*
|
||||
* Multi-BB variant: accumulates NQ queries x BB*32 database elements.
|
||||
* Used by the search_1 path (bbs > 32).
|
||||
|
||||
@@ -14,6 +14,10 @@
|
||||
|
||||
namespace faiss {
|
||||
|
||||
// Explicit SIMD-level aliases for this file (no global bare aliases).
|
||||
using simd32uint16 = simd32uint16_tpl<SINGLE_SIMD_LEVEL_512>;
|
||||
using simd64uint8 = simd64uint8_tpl<SINGLE_SIMD_LEVEL_512>;
|
||||
|
||||
// NQ=1 specialization: processes 512-bit chunks aggressively.
|
||||
// a special version for NQ=1.
|
||||
// Despite the function being large in the text form, it compiles to a very
|
||||
|
||||
@@ -83,6 +83,9 @@ inline void for_each_block(
|
||||
|
||||
} // namespace
|
||||
|
||||
// Explicit SIMD-level alias for the virtual interface below.
|
||||
using simd16uint16 = simd16uint16_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
|
||||
struct SIMDResultHandler {
|
||||
// used to dispatch templates
|
||||
bool is_CMax = false;
|
||||
|
||||
@@ -38,23 +38,7 @@
|
||||
|
||||
#endif
|
||||
|
||||
// Convenience aliases: bare names resolve to the current TU's SIMD level.
|
||||
// Generic code uses SINGLE_SIMD_LEVEL (= NONE in DD, compiled-in in static).
|
||||
// Per-SIMD TUs should define their own aliases with the concrete level.
|
||||
|
||||
namespace faiss {
|
||||
|
||||
// 256-bit
|
||||
using simd256bit = simd256bit_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
using simd16uint16 = simd16uint16_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
using simd32uint8 = simd32uint8_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
using simd8uint32 = simd8uint32_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
using simd8float32 = simd8float32_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
|
||||
// 512-bit (AVX512_SPR maps to AVX512 — same 512-bit integer ops)
|
||||
using simd512bit = simd512bit_tpl<SINGLE_SIMD_LEVEL_512>;
|
||||
using simd32uint16 = simd32uint16_tpl<SINGLE_SIMD_LEVEL_512>;
|
||||
using simd64uint8 = simd64uint8_tpl<SINGLE_SIMD_LEVEL_512>;
|
||||
using simd16float32 = simd16float32_tpl<SINGLE_SIMD_LEVEL_512>;
|
||||
|
||||
} // namespace faiss
|
||||
// No global bare-name aliases (simd16uint16, simd32uint8, etc.) — each file
|
||||
// that needs them must declare its own `using` with an explicit SIMD level.
|
||||
// This prevents per-ISA TUs from accidentally picking up SINGLE_SIMD_LEVEL
|
||||
// (= NONE in DD mode) when they should use THE_SIMD_LEVEL.
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
|
||||
namespace faiss {
|
||||
|
||||
// Explicit SIMD-level aliases for this file (no global bare aliases).
|
||||
using simd8uint32 = simd8uint32_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
using simd16uint16 = simd16uint16_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
|
||||
// HeapWithBucketsForHamming32 uses simd8uint32 under the
|
||||
// hood.
|
||||
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
|
||||
using namespace faiss;
|
||||
|
||||
// Explicit SIMD-level aliases (no global bare aliases).
|
||||
using simd8float32 = simd8float32_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
using simd8uint32 = simd8uint32_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
using simd16uint16 = simd16uint16_tpl<SINGLE_SIMD_LEVEL_256>;
|
||||
|
||||
TEST(TestSIMDLib, TestCmpltAndBlendInplace) {
|
||||
simd8float32 lowestValues(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
simd8uint32 lowestIndices(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
|
||||
Reference in New Issue
Block a user