vectorization_logic.cpp File Reference
#include "main.h"
#include <typeinfo>

Classes

struct  vectorization_logic< Scalar, Enable >
 
struct  vectorization_logic< Scalar, false >
 
struct  vectorization_logic_half< Scalar, Enable >
 
struct  vectorization_logic_half< Scalar, false >
 

Macros

#define EIGEN_DEBUG_ASSIGN
 

Functions

template<typename Dst , typename Src >
bool test_assign (const Dst &, const Src &, int traversal, int unrolling)
 
template<typename Dst , typename Src >
bool test_assign (int traversal, int unrolling)
 
template<typename Xpr >
bool test_redux (const Xpr &, int traversal, int unrolling)
 
 EIGEN_DECLARE_TEST (vectorization_logic)
 

Macro Definition Documentation

◆ EIGEN_DEBUG_ASSIGN

#define EIGEN_DEBUG_ASSIGN

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( vectorization_logic  )
441  {
442 #ifdef EIGEN_VECTORIZE
443 
447  CALL_SUBTEST(vectorization_logic<std::complex<float> >::run());
448  CALL_SUBTEST(vectorization_logic<std::complex<double> >::run());
449 
453  CALL_SUBTEST(vectorization_logic_half<std::complex<float> >::run());
454  CALL_SUBTEST(vectorization_logic_half<std::complex<double> >::run());
455 
456  if (internal::packet_traits<float>::Vectorizable) {
458  internal::packet_traits<float>::Vectorizable && EIGEN_UNALIGNED_VECTORIZE
460  : LinearTraversal,
462 
464  internal::packet_traits<float>::Vectorizable && EIGEN_UNALIGNED_VECTORIZE
466  : LinearTraversal,
468  }
469 
470  if (internal::packet_traits<double>::Vectorizable) {
472  internal::packet_traits<double>::Vectorizable && EIGEN_UNALIGNED_VECTORIZE
474  : LinearTraversal,
476 
478  internal::packet_traits<double>::Vectorizable && EIGEN_UNALIGNED_VECTORIZE
480  : LinearTraversal,
482  }
483 #endif // EIGEN_VECTORIZE
484 }
#define EIGEN_UNALIGNED_VECTORIZE
Definition: ConfigureVectorization.h:173
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
@ LinearVectorizedTraversal
Definition: Constants.h:287
@ LinearTraversal
Definition: Constants.h:281
@ CompleteUnrolling
Definition: Constants.h:306
#define VERIFY(a)
Definition: main.h:362
#define CALL_SUBTEST(FUNC)
Definition: main.h:382
Definition: vectorization_logic.cpp:289
Definition: vectorization_logic.cpp:107
void run(const string &dir_name, LinearSolver *linear_solver_pt, const unsigned nel_1d, bool mess_up_order)
Definition: two_d_poisson_compare_solvers.cc:317
bool test_redux(const Xpr &, int traversal, int unrolling)
Definition: vectorization_logic.cpp:88
bool test_assign(const Dst &, const Src &, int traversal, int unrolling)
Definition: vectorization_logic.cpp:38

References CALL_SUBTEST, Eigen::CompleteUnrolling, EIGEN_UNALIGNED_VECTORIZE, Eigen::LinearTraversal, Eigen::LinearVectorizedTraversal, run(), test_assign(), test_redux(), and VERIFY.

◆ test_assign() [1/2]

template<typename Dst , typename Src >
bool test_assign ( const Dst &  ,
const Src &  ,
int  traversal,
int  unrolling 
)
38  {
40  typedef internal::copy_using_evaluator_traits<internal::evaluator<Dst>, internal::evaluator<Src>,
41  internal::assign_op<typename Dst::Scalar, typename Src::Scalar> >
42  traits;
43  // If traversal or unrolling are negative, ignore.
44  bool res = traversal > -1 ? traits::Traversal == traversal : true;
45  if (unrolling > -1) {
46  if (unrolling == InnerUnrolling + CompleteUnrolling) {
47  res = res && (int(traits::Unrolling) == InnerUnrolling || int(traits::Unrolling) == CompleteUnrolling);
48  } else {
49  res = res && int(traits::Unrolling) == unrolling;
50  }
51  }
52  if (!res) {
53  std::cerr << "Src: " << demangle_flags(Src::Flags) << std::endl;
54  std::cerr << " " << demangle_flags(internal::evaluator<Src>::Flags) << std::endl;
55  std::cerr << "Dst: " << demangle_flags(Dst::Flags) << std::endl;
56  std::cerr << " " << demangle_flags(internal::evaluator<Dst>::Flags) << std::endl;
57  traits::debug();
58  std::cerr << " Expected Traversal == " << demangle_traversal(traversal) << " got "
59  << demangle_traversal(traits::Traversal) << "\n";
60  std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling) << " got "
61  << demangle_unrolling(traits::Unrolling) << "\n";
62  }
63  return res;
64 }
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
#define EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(TYPE0, TYPE1)
Definition: StaticAssert.h:79
@ InnerUnrolling
Definition: Constants.h:303
return int(ret)+1

References Eigen::CompleteUnrolling, EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE, Eigen::InnerUnrolling, int(), and res.

Referenced by EIGEN_DECLARE_TEST(), vectorization_logic< Scalar, Enable >::run(), and vectorization_logic_half< Scalar, Enable >::run().

◆ test_assign() [2/2]

template<typename Dst , typename Src >
bool test_assign ( int  traversal,
int  unrolling 
)
67  {
69  typedef internal::copy_using_evaluator_traits<internal::evaluator<Dst>, internal::evaluator<Src>,
70  internal::assign_op<typename Dst::Scalar, typename Src::Scalar> >
71  traits;
72  bool res = traits::Traversal == traversal && traits::Unrolling == unrolling;
73  if (!res) {
74  std::cerr << "Src: " << demangle_flags(Src::Flags) << std::endl;
75  std::cerr << " " << demangle_flags(internal::evaluator<Src>::Flags) << std::endl;
76  std::cerr << "Dst: " << demangle_flags(Dst::Flags) << std::endl;
77  std::cerr << " " << demangle_flags(internal::evaluator<Dst>::Flags) << std::endl;
78  traits::debug();
79  std::cerr << " Expected Traversal == " << demangle_traversal(traversal) << " got "
80  << demangle_traversal(traits::Traversal) << "\n";
81  std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling) << " got "
82  << demangle_unrolling(traits::Unrolling) << "\n";
83  }
84  return res;
85 }

References EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE, and res.

◆ test_redux()

template<typename Xpr >
bool test_redux ( const Xpr &  ,
int  traversal,
int  unrolling 
)
88  {
89  typedef typename Xpr::Scalar Scalar;
90  typedef internal::redux_traits<internal::scalar_sum_op<Scalar, Scalar>, internal::redux_evaluator<Xpr> > traits;
91 
92  bool res = traits::Traversal == traversal && traits::Unrolling == unrolling;
93  if (!res) {
94  std::cerr << demangle_flags(Xpr::Flags) << std::endl;
95  std::cerr << demangle_flags(internal::evaluator<Xpr>::Flags) << std::endl;
96  traits::debug();
97 
98  std::cerr << " Expected Traversal == " << demangle_traversal(traversal) << " got "
99  << demangle_traversal(traits::Traversal) << "\n";
100  std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling) << " got "
101  << demangle_unrolling(traits::Unrolling) << "\n";
102  }
103  return res;
104 }
SCALAR Scalar
Definition: bench_gemm.cpp:45

References res.

Referenced by EIGEN_DECLARE_TEST(), vectorization_logic< Scalar, Enable >::run(), and vectorization_logic_half< Scalar, Enable >::run().