aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2015-12-10 15:34:57 -0800
committerGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2015-12-10 15:34:57 -0800
commit9a415fb1e2970e18ba19c11a83ec52743faeb74f (patch)
tree21955c37c65aac7446b53220f5e7c37cdc8e547a /Eigen
parent22dd368ea059586de26ceebe77eaf52f3cae02e8 (diff)
Preliminary support for AVX512
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/Core20
-rw-r--r--Eigen/src/Core/arch/AVX512/CMakeLists.txt6
-rw-r--r--Eigen/src/Core/arch/AVX512/PacketMath.h14
-rw-r--r--Eigen/src/Core/arch/CMakeLists.txt1
4 files changed, 38 insertions, 3 deletions
diff --git a/Eigen/Core b/Eigen/Core
index 1ec749452..e6ef4abbe 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 <nmmintrin.h>
#endif
- #ifdef EIGEN_VECTORIZE_AVX
+ #if defined(EIGEN_VECTORIZE_AVX) || defined(EIGEN_VECTORIZE_AVX512)
#include <immintrin.h>
#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 000000000..3b2160b6d
--- /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 000000000..9ea228c9b
--- /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 42b0b486e..da9793eca 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)