| #pragma once | |
| #if (ENABLE_VECTORIZATION > 0) && !defined(_DEBUG) && !defined(DEBUG) | |
| #if defined(__clang__) && (__clang_major__ > 7) | |
| #define IS_SANITIZER \ | |
| ((__has_feature(address_sanitizer) == 1) || \ | |
| (__has_feature(memory_sanitizer) == 1) || \ | |
| (__has_feature(thread_sanitizer) == 1) || \ | |
| (__has_feature(undefined_sanitizer) == 1)) | |
| #if IS_SANITIZER == 0 | |
| #define VECTOR_LOOP _Pragma("clang loop vectorize(enable)") | |
| #define FAST_MATH _Pragma("clang fp contract(fast)") | |
| #define VECTORIZED_KERNEL 1 | |
| #endif | |
| #elif defined(_OPENMP) && (_OPENMP >= 201511) | |
| // Support with OpenMP4.5 and above | |
| #define VECTOR_LOOP _Pragma("omp for simd") | |
| #define VECTORIZED_KERNEL 1 | |
| #define FAST_MATH | |
| #endif | |
| #endif | |
| #ifndef VECTOR_LOOP | |
| // Not supported | |
| #define VECTOR_LOOP | |
| #define FAST_MATH | |
| #endif |