From 8818cfc6006f05b5e40d1cb3043e78691641eb28 Mon Sep 17 00:00:00 2001 From: Robert Maynard Date: Wed, 16 Mar 2016 12:43:33 -0400 Subject: [PATCH] Disable vectorization when building with ICC 14.0 We have found that ICC 14.0 produces bad simd code that causes vtkm worklets to throw SIGBUS signals. This issue was resolved in ICC 15.0 --- CMake/VTKmCompilerOptimizations.cmake | 5 +++++ vtkm/internal/Configure.h.in | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CMake/VTKmCompilerOptimizations.cmake b/CMake/VTKmCompilerOptimizations.cmake index c9aae979c..7743fc0d3 100644 --- a/CMake/VTKmCompilerOptimizations.cmake +++ b/CMake/VTKmCompilerOptimizations.cmake @@ -116,6 +116,11 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") set(avx2_flags -xCORE-AVX2) if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0) + message(STATUS "While Intel ICC 14.0 and lower support #pragma simd") + message(STATUS "The code that is generated in testing has caused SIGBUS") + message(STATUS "runtime signals to be thrown. We recommend you upgrade") + message(STATUS "or disable vectorization.") + elseif (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0) list(APPEND vec_levels avx avx2) else() list(APPEND vec_levels avx avx2 avx512 knl) diff --git a/vtkm/internal/Configure.h.in b/vtkm/internal/Configure.h.in index 58c73adf8..fc2892432 100644 --- a/vtkm/internal/Configure.h.in +++ b/vtkm/internal/Configure.h.in @@ -170,8 +170,12 @@ //Determine if current compiler supports vectorization pragma's //if so set the define VTKM_COMPILER_SUPPORTS_VECTOR_PRAGMAS +// +//While ICC 14 does support simd pragma, in testing we find that the +//simd code produces SIGBUS and isn't safe to use. +// #if ( defined(VTKM_GCC) && ( __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9) ) ) || \ - ( defined(VTKM_ICC) && (__INTEL_COMPILER >= 1400) ) || \ + ( defined(VTKM_ICC) && (__INTEL_COMPILER >= 1500) ) || \ ( defined(VTKM_CLANG) && defined(__apple_build_version__) && (__apple_build_version__ >= 7000000) ) || \ ( defined(VTKM_CLANG) && !defined(__apple_build_version__) && (__clang_major__ > 3) ) || \ ( defined(VTKM_CLANG) && !defined(__apple_build_version__) && (__clang_major__ == 3 && __clang_minor__ >= 5) )