From d6285fb771f5599c284d4ab033da085720ede5fd Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Tue, 23 Oct 2018 18:13:16 +0800 Subject: [PATCH] throw error when mismatch cpu version test=develop --- paddle/fluid/platform/init.cc | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/paddle/fluid/platform/init.cc b/paddle/fluid/platform/init.cc index ab91ca53450..17d3af7bee5 100644 --- a/paddle/fluid/platform/init.cc +++ b/paddle/fluid/platform/init.cc @@ -131,6 +131,44 @@ void InitDevices(bool init_p2p, const std::vector devices) { LOG(WARNING) << "AVX is available, Please re-compile on local machine"; #endif } + +// Throw some informations when CPU instructions mismatch. +#define AVX_GUIDE(compiletime, runtime) \ + LOG(FATAL) \ + << "This version is compiled on higher instruction(" #compiletime \ + ") system, you may encounter illegal instruction error running on" \ + " your local CPU machine. Please reinstall the " #runtime \ + " version or compile from source code." + +#ifdef __AVX512F__ + if (!platform::jit::MayIUse(platform::jit::avx512f)) { + if (platform::jit::MayIUse(platform::jit::avx2)) { + AVX_GUIDE(AVX512, AVX2); + } else if (platform::jit::MayIUse(platform::jit::avx)) { + AVX_GUIDE(AVX512, AVX); + } else { + AVX_GUIDE(AVX512, NonAVX); + } + } +#endif + +#ifdef __AVX2__ + if (!platform::jit::MayIUse(platform::jit::avx2)) { + if (platform::jit::MayIUse(platform::jit::avx)) { + AVX_GUIDE(AVX2, AVX); + } else { + AVX_GUIDE(AVX2, NonAVX); + } + } +#endif + +#ifdef __AVX__ + if (!platform::jit::MayIUse(platform::jit::avx)) { + AVX_GUIDE(AVX, NonAVX); + } +#endif + +#undef AVX_GUIDE } void InitGLOG(const std::string &prog_name) { -- GitLab