mirror of
https://gitlab.com/libeigen/eigen.git
synced 2024-12-21 07:19:46 +08:00
5ca10480b0
See <https://stackoverflow.com/questions/59709148/ensuring-that-eigen-uses-avx-vectorization-for-a-certain-operation> for an explanation of the problem this solves. In short, for some reason, before this commit the half-packet is selected when the array / matrix size is not a multiple of `unpacket_traits<PacketType>::size`, where `PacketType` starts out being the full Packet. For example, for some data of 100 `float`s, `Packet4f` will be selected rather than `Packet8f`, because 100 is not a multiple of 8, the size of `Packet8f`. This commit switches to selecting the half-packet if the size is less than the packet size, which seems to make more sense. As I stated in the SO post I'm not sure that I'm understanding the issue correctly, but this fix resolves the issue in my program. Moreover, `make check` passes, with the exception of line 614 and 616 in `test/packetmath.cpp`, which however also fail on master on my machine: CHECK_CWISE1_IF(PacketTraits::HasBessel, numext::bessel_i0, internal::pbessel_i0); ... CHECK_CWISE1_IF(PacketTraits::HasBessel, numext::bessel_i1, internal::pbessel_i1); |
||
---|---|---|
bench | ||
blas | ||
cmake | ||
debug | ||
demos | ||
doc | ||
Eigen | ||
failtest | ||
lapack | ||
scripts | ||
test | ||
unsupported | ||
.gitignore | ||
.hgeol | ||
CMakeLists.txt | ||
COPYING.BSD | ||
COPYING.GPL | ||
COPYING.LGPL | ||
COPYING.MINPACK | ||
COPYING.MPL2 | ||
COPYING.README | ||
CTestConfig.cmake | ||
CTestCustom.cmake.in | ||
eigen3.pc.in | ||
INSTALL | ||
README.md | ||
signature_of_eigen3_matrix_library |
Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.
For more information go to http://eigen.tuxfamily.org/.
For pull request, bug reports, and feature requests, go to https://gitlab.com/libeigen/eigen.