@@ -86,27 +86,34 @@ TEST(DeglibRegressionIP, DistanceRecallAllVariantsSameDataset)
8686 EXPECT_EQ (recall, 1.0 ) << " Distance recall between scalar and " << name << " InnerProduct must be exactly 1.0" ;
8787 };
8888
89- // All variants compile now — test them all regardless of compile-time flags
90- check_variant (" InnerProductFloat16Ext_AVX512" , [](const void * a, const void * b, const void * qty)
91- { return deglib::distances::fp32_ip::InnerProductFloat16Ext_AVX512::compare (a, b, qty); });
92- check_variant (" InnerProductFloat16Ext_AVX2" , [](const void * a, const void * b, const void * qty)
93- { return deglib::distances::fp32_ip::InnerProductFloat16Ext_AVX2::compare (a, b, qty); });
94- check_variant (" InnerProductFloat16Ext_SSE" , [](const void * a, const void * b, const void * qty)
95- { return deglib::distances::fp32_ip::InnerProductFloat16Ext_SSE::compare (a, b, qty); });
96- check_variant (" InnerProductFloat8Ext_AVX2" , [](const void * a, const void * b, const void * qty)
97- { return deglib::distances::fp32_ip::InnerProductFloat8Ext_AVX2::compare (a, b, qty); });
98- check_variant (" InnerProductFloat8Ext_SSE" , [](const void * a, const void * b, const void * qty)
99- { return deglib::distances::fp32_ip::InnerProductFloat8Ext_SSE::compare (a, b, qty); });
100- check_variant (" InnerProductFloat4Ext_SSE" , [](const void * a, const void * b, const void * qty)
101- { return deglib::distances::fp32_ip::InnerProductFloat4Ext_SSE::compare (a, b, qty); });
102- check_variant (" InnerProductFloat16ExtResiduals_AVX512" , [](const void * a, const void * b, const void * qty)
103- { return deglib::distances::fp32_ip::InnerProductFloat16ExtResiduals_AVX512::compare (a, b, qty); });
104- check_variant (" InnerProductFloat16ExtResiduals_AVX2" , [](const void * a, const void * b, const void * qty)
105- { return deglib::distances::fp32_ip::InnerProductFloat16ExtResiduals_AVX2::compare (a, b, qty); });
106- check_variant (" InnerProductFloat16ExtResiduals_SSE" , [](const void * a, const void * b, const void * qty)
107- { return deglib::distances::fp32_ip::InnerProductFloat16ExtResiduals_SSE::compare (a, b, qty); });
108- check_variant (" InnerProductFloat4ExtResiduals_SSE" , [](const void * a, const void * b, const void * qty)
109- { return deglib::distances::fp32_ip::InnerProductFloat4ExtResiduals_SSE::compare (a, b, qty); });
89+ #if defined(DEGLIB_X86)
90+ if (deglib::cpu::has_avx512 ()) {
91+ check_variant (" InnerProductFloat16Ext_AVX512" , [](const void * a, const void * b, const void * qty)
92+ { return deglib::distances::fp32_ip::InnerProductFloat16Ext_AVX512::compare (a, b, qty); });
93+ check_variant (" InnerProductFloat16ExtResiduals_AVX512" , [](const void * a, const void * b, const void * qty)
94+ { return deglib::distances::fp32_ip::InnerProductFloat16ExtResiduals_AVX512::compare (a, b, qty); });
95+ }
96+ if (deglib::cpu::has_avx2 ()) {
97+ check_variant (" InnerProductFloat16Ext_AVX2" , [](const void * a, const void * b, const void * qty)
98+ { return deglib::distances::fp32_ip::InnerProductFloat16Ext_AVX2::compare (a, b, qty); });
99+ check_variant (" InnerProductFloat8Ext_AVX2" , [](const void * a, const void * b, const void * qty)
100+ { return deglib::distances::fp32_ip::InnerProductFloat8Ext_AVX2::compare (a, b, qty); });
101+ check_variant (" InnerProductFloat16ExtResiduals_AVX2" , [](const void * a, const void * b, const void * qty)
102+ { return deglib::distances::fp32_ip::InnerProductFloat16ExtResiduals_AVX2::compare (a, b, qty); });
103+ }
104+ if (deglib::cpu::has_sse42 ()) {
105+ check_variant (" InnerProductFloat16Ext_SSE" , [](const void * a, const void * b, const void * qty)
106+ { return deglib::distances::fp32_ip::InnerProductFloat16Ext_SSE::compare (a, b, qty); });
107+ check_variant (" InnerProductFloat8Ext_SSE" , [](const void * a, const void * b, const void * qty)
108+ { return deglib::distances::fp32_ip::InnerProductFloat8Ext_SSE::compare (a, b, qty); });
109+ check_variant (" InnerProductFloat4Ext_SSE" , [](const void * a, const void * b, const void * qty)
110+ { return deglib::distances::fp32_ip::InnerProductFloat4Ext_SSE::compare (a, b, qty); });
111+ check_variant (" InnerProductFloat16ExtResiduals_SSE" , [](const void * a, const void * b, const void * qty)
112+ { return deglib::distances::fp32_ip::InnerProductFloat16ExtResiduals_SSE::compare (a, b, qty); });
113+ check_variant (" InnerProductFloat4ExtResiduals_SSE" , [](const void * a, const void * b, const void * qty)
114+ { return deglib::distances::fp32_ip::InnerProductFloat4ExtResiduals_SSE::compare (a, b, qty); });
115+ }
116+ #endif
110117 check_variant (" InnerProductFloat" , [](const void * a, const void * b, const void * qty)
111118 { return deglib::distances::fp32_ip::InnerProductFloat::compare (a, b, qty); });
112119}
0 commit comments