11 #ifndef EIGEN_JACOBI_H
12 #define EIGEN_JACOBI_H
37 template <
typename Scalar>
72 template <
typename Derived>
92 template <
typename Scalar>
129 template <
typename Scalar>
130 template <
typename Derived>
151 template <
typename Scalar>
157 template <
typename Scalar>
185 m_s = -qs *
conj(
ps) * (m_c / p2);
206 template <
typename Scalar>
248 template <
typename VectorX,
typename VectorY,
typename OtherScalar>
259 template <
typename Derived>
260 template <
typename OtherScalar>
274 template <
typename Derived>
275 template <
typename OtherScalar>
285 template <
typename Scalar,
typename OtherScalar,
int SizeAtCompileTime,
int MinAlignment,
bool Vectorizable>
300 template <
typename Scalar,
typename OtherScalar,
int SizeAtCompileTime,
int MinAlignment>
307 constexpr
int RequiredAlignment =
312 if (
size >= 2 * PacketSize && SizeAtCompileTime ==
Dynamic && ((incrx == 1 && incry == 1) || PacketSize == 1)) {
314 constexpr
Index Peeling = 2;
317 Index alignedEnd = alignedStart + ((
size - alignedStart) / PacketSize) * PacketSize;
319 const OtherPacket
pc = pset1<OtherPacket>(
c);
320 const OtherPacket
ps = pset1<OtherPacket>(
s);
324 for (
Index i = 0;
i < alignedStart; ++
i) {
335 for (
Index i = alignedStart;
i < alignedEnd;
i += PacketSize) {
344 Index peelingEnd = alignedStart + ((
size - alignedStart) / (Peeling * PacketSize)) * (Peeling * PacketSize);
345 for (
Index i = alignedStart;
i < peelingEnd;
i += Peeling * PacketSize) {
347 Packet xi1 = ploadu<Packet>(
px + PacketSize);
349 Packet yi1 = pload<Packet>(
py + PacketSize);
354 px += Peeling * PacketSize;
355 py += Peeling * PacketSize;
357 if (alignedEnd != peelingEnd) {
358 Packet xi = ploadu<Packet>(
x + peelingEnd);
359 Packet yi = pload<Packet>(
y + peelingEnd);
374 else if (SizeAtCompileTime !=
Dynamic && MinAlignment >= RequiredAlignment) {
375 const OtherPacket
pc = pset1<OtherPacket>(
c);
376 const OtherPacket
ps = pset1<OtherPacket>(
s);
399 template <
typename VectorX,
typename VectorY,
typename OtherScalar>
408 Index incrx = xpr_x.derived().innerStride();
409 Index incry = xpr_y.derived().innerStride();
414 OtherScalar
c =
j.c();
415 OtherScalar
s =
j.s();
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar conj(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:133
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Matrix4d pm
Definition: HessenbergDecomposition_packedMatrix.cpp:4
G makeGivens(v.x(), v.y())
#define EIGEN_RESTRICT
Definition: Macros.h:1067
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
Vector3f p1
Definition: MatrixBase_all.cpp:2
RowVector3d w
Definition: Matrix_resize_int.cpp:3
float * p
Definition: Tutorial_Map_using.cpp:9
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
internal::packet_traits< Scalar >::type Packet
Definition: benchmark-blocking-sizes.cpp:54
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:44
Rotation given by a cosine-sine pair.
Definition: Jacobi.h:38
EIGEN_DEVICE_FUNC Scalar & s()
Definition: Jacobi.h:50
EIGEN_DEVICE_FUNC void makeGivens(const Scalar &p, const Scalar &q, Scalar *r=0)
Definition: Jacobi.h:152
EIGEN_DEVICE_FUNC JacobiRotation transpose() const
Definition: Jacobi.h:61
Scalar m_c
Definition: Jacobi.h:82
EIGEN_DEVICE_FUNC Scalar c() const
Definition: Jacobi.h:49
EIGEN_DEVICE_FUNC JacobiRotation operator*(const JacobiRotation &other)
Definition: Jacobi.h:54
NumTraits< Scalar >::Real RealScalar
Definition: Jacobi.h:40
EIGEN_DEVICE_FUNC JacobiRotation()
Definition: Jacobi.h:43
EIGEN_DEVICE_FUNC Scalar & c()
Definition: Jacobi.h:48
EIGEN_DEVICE_FUNC JacobiRotation adjoint() const
Definition: Jacobi.h:67
EIGEN_DEVICE_FUNC Scalar s() const
Definition: Jacobi.h:51
EIGEN_DEVICE_FUNC JacobiRotation(const Scalar &c, const Scalar &s)
Definition: Jacobi.h:46
Scalar m_s
Definition: Jacobi.h:82
EIGEN_DEVICE_FUNC bool makeJacobi(const MatrixBase< Derived > &, Index p, Index q)
Definition: Jacobi.h:131
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:52
void applyOnTheLeft(const EigenBase< OtherDerived > &other)
Definition: MatrixBase.h:532
void applyOnTheRight(const EigenBase< OtherDerived > &other)
Definition: MatrixBase.h:521
Base::RowXpr RowXpr
Definition: MatrixBase.h:89
Base::ColXpr ColXpr
Definition: MatrixBase.h:90
internal::traits< Derived >::Scalar Scalar
Definition: PlainObjectBase.h:127
float real
Definition: datatypes.h:10
#define min(a, b)
Definition: datatypes.h:22
#define max(a, b)
Definition: datatypes.h:23
const unsigned int PacketAccessBit
Definition: Constants.h:97
RealScalar RealScalar * px
Definition: level1_cplx_impl.h:27
Scalar * y
Definition: level1_cplx_impl.h:128
RealScalar s
Definition: level1_cplx_impl.h:130
int RealScalar int RealScalar int RealScalar RealScalar * ps
Definition: level1_cplx_impl.h:124
int RealScalar int RealScalar * py
Definition: level1_cplx_impl.h:124
int RealScalar int RealScalar int RealScalar * pc
Definition: level1_cplx_impl.h:124
int * m
Definition: level2_cplx_impl.h:294
EIGEN_DEVICE_FUNC Packet padd(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:318
const Scalar & y
Definition: RandomImpl.h:36
static Index first_default_aligned(const DenseBase< Derived > &m)
Definition: DenseCoeffsBase.h:539
EIGEN_DEVICE_FUNC void pstore(Scalar *to, const Packet &from)
Definition: GenericPacketMath.h:891
EIGEN_DEVICE_FUNC void apply_rotation_in_the_plane(DenseBase< VectorX > &xpr_x, DenseBase< VectorY > &xpr_y, const JacobiRotation< OtherScalar > &j)
Definition: Jacobi.h:400
EIGEN_DEVICE_FUNC void pstoreu(Scalar *to, const Packet &from)
Definition: GenericPacketMath.h:911
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:337
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_zero(const X &x)
Definition: Meta.h:592
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_one(const X &x)
Definition: Meta.h:601
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition: MathFunctions.h:1102
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
const AutoDiffScalar< DerType > & conj(const AutoDiffScalar< DerType > &x)
Definition: AutoDiffScalar.h:482
const int Dynamic
Definition: Constants.h:25
int c
Definition: calibrate.py:100
Definition: Eigen_Colamd.h:49
list x
Definition: plotDoE.py:28
t
Definition: plotPSD.py:36
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
static void run(Scalar *x, Index incrx, Scalar *y, Index incry, Index size, OtherScalar c, OtherScalar s)
Definition: Jacobi.h:303
static EIGEN_DEVICE_FUNC void run(Scalar *x, Index incrx, Scalar *y, Index incry, Index size, OtherScalar c, OtherScalar s)
Definition: Jacobi.h:287
Definition: ConjHelper.h:71
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ResultType pmul(const LhsType &x, const RhsType &y) const
Definition: ConjHelper.h:79
Definition: CoreEvaluators.h:104
Definition: GenericPacketMath.h:108
Definition: GenericPacketMath.h:134
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2
Definition: ZVector/PacketMath.h:50