Compare commits

...

3 Commits

Author SHA1 Message Date
Andrew Kane
e9d5a0b1aa Improved check [skip ci] 2024-04-17 18:19:03 -07:00
Andrew Kane
52a81b3b9d Improved check [skip ci] 2024-04-17 18:16:58 -07:00
Andrew Kane
c5372e493b Improved check [skip ci] 2024-04-17 18:13:58 -07:00

View File

@@ -19,6 +19,7 @@
#endif
#endif
float (*HalfvecL2SquaredDistance) (int dim, half * ax, half * bx);
float (*HalfvecInnerProduct) (int dim, half * ax, half * bx);
double (*HalfvecCosineSimilarity) (int dim, half * ax, half * bx);
@@ -192,13 +193,20 @@ HalfvecCosineSimilarityF16cFma(int dim, half * ax, half * bx)
#endif
#ifdef HALFVEC_DISPATCH
#define CPU_FEATURE_FMA (1 << 12)
#define CPU_FEATURE_F16C (1 << 29)
#define CPU_FEATURE_FMA (1 << 12)
#define CPU_FEATURE_OSXSAVE (1 << 27)
#define CPU_FEATURE_AVX (1 << 28)
#define CPU_FEATURE_F16C (1 << 29)
static bool
#ifdef _MSC_VER
#define TARGET_XSAVE
#else
#define TARGET_XSAVE __attribute__((target("xsave")))
#endif
TARGET_XSAVE static bool
SupportsCpuFeature(unsigned int feature)
{
/* TODO Fix check */
unsigned int exx[4] = {0, 0, 0, 0};
#if defined(HAVE__GET_CPUID)
@@ -207,6 +215,12 @@ SupportsCpuFeature(unsigned int feature)
__cpuid(exx, 1);
#endif
if ((exx[2] & CPU_FEATURE_OSXSAVE) != CPU_FEATURE_OSXSAVE)
return false;
if ((_xgetbv(0) & 6) != 6)
return false;
return (exx[2] & feature) == feature;
}
#endif
@@ -223,7 +237,7 @@ HalfvecInit(void)
HalfvecCosineSimilarity = HalfvecCosineSimilarityDefault;
#ifdef HALFVEC_DISPATCH
if (SupportsCpuFeature(CPU_FEATURE_FMA | CPU_FEATURE_F16C))
if (SupportsCpuFeature(CPU_FEATURE_AVX | CPU_FEATURE_FMA | CPU_FEATURE_F16C))
{
HalfvecL2SquaredDistance = HalfvecL2SquaredDistanceF16cFma;
HalfvecInnerProduct = HalfvecInnerProductF16cFma;