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:
Gergely Szilvasy
2026-04-09 04:19:54 -07:00
committed by meta-codesync[bot]
parent 4a63c9e415
commit c4efc42219
8 changed files with 30 additions and 20 deletions
+3
View File
@@ -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,
+3
View File
@@ -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,
+4
View File
@@ -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).
+4
View File
@@ -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;
+4 -20
View File
@@ -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.
+5
View File
@@ -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);