From 18bcba45d08bcc0d5b64334b4b6ea2188a17b4f8 Mon Sep 17 00:00:00 2001 From: Kenneth Heafield Date: Sat, 1 May 2021 17:57:17 +0100 Subject: Fix MSVC getenv Microsoft likes to break all the standard functions. --- intgemm/intgemm.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/intgemm/intgemm.cc b/intgemm/intgemm.cc index e604ead..9b38e08 100644 --- a/intgemm/intgemm.cc +++ b/intgemm/intgemm.cc @@ -78,8 +78,15 @@ CPUType RealCPUID() { } CPUType EnvironmentCPUID() { +#if defined(_MSC_VER) + char env_override[11]; + size_t len = 0; + if (getenv_s(&len, env_override, sizeof(env_override), "INTGEMM_CPUID")) return CPUType::AVX512VNNI; + if (!len) return CPUType::AVX512VNNI; +#else const char *env_override = getenv("INTGEMM_CPUID"); if (!env_override) return CPUType::AVX512VNNI; /* This will be capped to actual ID */ +#endif if (!strcmp(env_override, "AVX512VNNI")) return CPUType::AVX512VNNI; if (!strcmp(env_override, "AVX512BW")) return CPUType::AVX512BW; if (!strcmp(env_override, "AVX2")) return CPUType::AVX2; @@ -92,10 +99,12 @@ CPUType EnvironmentCPUID() { } // namespace CPUType GetCPUID() { - static const CPUType kCPU = std::min(RealCPUID(), EnvironmentCPUID()); - return kCPU; + static const CPUType kLocalCPU = std::min(RealCPUID(), EnvironmentCPUID()); + return kLocalCPU; } +const CPUType kCPU = GetCPUID(); + float Unsupported_MaxAbsolute(const float * /*begin*/, const float * /*end*/) { throw UnsupportedCPU(); } @@ -134,8 +143,6 @@ void (*Int8Shift::QuantizeU)(const float *input, uint8_t *output, float quant_mu const char *const Int8Shift::kName = ChooseCPU(AVX512VNNI::Kernels8::kName, AVX512BW::Kernels8::kName, AVX2::Kernels8::kName, SSSE3::Kernels8::kName, Unsupported_8bit::kName, Unsupported_8bit::kName); -const CPUType kCPU = ChooseCPU(CPUType::AVX512VNNI, CPUType::AVX512BW, CPUType::AVX2, CPUType::SSSE3, CPUType::SSE2, CPUType::UNSUPPORTED); - #if !defined(INTGEMM_COMPILER_SUPPORTS_AVX2) namespace AVX2{ using SSE2::MaxAbsolute; -- cgit v1.2.3