diff --git a/Eigen/Core b/Eigen/Core index 1ec749452c..e6ef4abbee 100644 --- a/Eigen/Core +++ b/Eigen/Core @@ -137,6 +137,14 @@ #ifdef __FMA__ #define EIGEN_VECTORIZE_FMA #endif + #ifdef __AVX512F__ + #define EIGEN_VECTORIZE_AVX512 + #define EIGEN_VECTORIZE_AVX + #define EIGEN_VECTORIZE_FMA + #ifdef __AVX512DQ__ + #define EIGEN_VECTORIZE_AVX512DQ + #endif + #endif // include files @@ -167,7 +175,7 @@ #ifdef EIGEN_VECTORIZE_SSE4_2 #include #endif - #ifdef EIGEN_VECTORIZE_AVX + #if defined(EIGEN_VECTORIZE_AVX) || defined(EIGEN_VECTORIZE_AVX512) #include #endif #endif @@ -245,7 +253,9 @@ namespace Eigen { inline static const char *SimdInstructionSetsInUse(void) { -#if defined(EIGEN_VECTORIZE_AVX) +#if defined(EIGEN_VECTORIZE_AVX512) + return "AVX512, AVX SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2"; +#elif defined(EIGEN_VECTORIZE_AVX) return "AVX SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2"; #elif defined(EIGEN_VECTORIZE_SSE4_2) return "SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2"; @@ -302,7 +312,11 @@ using std::ptrdiff_t; #include "src/Core/MathFunctions.h" #include "src/Core/GenericPacketMath.h" -#if defined EIGEN_VECTORIZE_AVX +#if defined EIGEN_VECTORIZE_AVX512 + #include "src/Core/arch/SSE/PacketMath.h" + #include "src/Core/arch/AVX/PacketMath.h" + #include "src/Core/arch/AVX512/PacketMath.h" +#elif defined EIGEN_VECTORIZE_AVX // Use AVX for floats and doubles, SSE for integers #include "src/Core/arch/SSE/PacketMath.h" #include "src/Core/arch/SSE/Complex.h" diff --git a/Eigen/src/Core/arch/AVX512/CMakeLists.txt b/Eigen/src/Core/arch/AVX512/CMakeLists.txt new file mode 100644 index 0000000000..3b2160b6d3 --- /dev/null +++ b/Eigen/src/Core/arch/AVX512/CMakeLists.txt @@ -0,0 +1,6 @@ +FILE(GLOB Eigen_Core_arch_AVX512_SRCS "*.h") + +INSTALL(FILES + ${Eigen_Core_arch_AVX512_SRCS} + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen/src/Core/arch/AVX512 COMPONENT Devel +) diff --git a/Eigen/src/Core/arch/AVX512/PacketMath.h b/Eigen/src/Core/arch/AVX512/PacketMath.h new file mode 100644 index 0000000000..9ea228c9b1 --- /dev/null +++ b/Eigen/src/Core/arch/AVX512/PacketMath.h @@ -0,0 +1,14 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2014 Benoit Steiner (benoit.steiner.goog@gmail.com) +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_PACKET_MATH_AVX512_H +#define EIGEN_PACKET_MATH_AVX512_H + + +#endif // EIGEN_PACKET_MATH_AVX512_H diff --git a/Eigen/src/Core/arch/CMakeLists.txt b/Eigen/src/Core/arch/CMakeLists.txt index 42b0b486e1..da9793ecaf 100644 --- a/Eigen/src/Core/arch/CMakeLists.txt +++ b/Eigen/src/Core/arch/CMakeLists.txt @@ -1,5 +1,6 @@ ADD_SUBDIRECTORY(AltiVec) ADD_SUBDIRECTORY(AVX) +ADD_SUBDIRECTORY(AVX512) ADD_SUBDIRECTORY(CUDA) ADD_SUBDIRECTORY(Default) ADD_SUBDIRECTORY(NEON)