#3.0.1
#3.1.1
#3.2.0
3.2.4
#5745:37f59e65eb6c
5891:d8652709345d  # introduce AVX
#5893:24b4dc92c6d3  # merge
5895:997c2ef9fc8b  # introduce FMA
#5904:e1eafd14eaa1  # complex and AVX
5908:f8ee3c721251  # improve packing with ptranspose
#5921:ca808bb456b0  # merge
#5927:8b1001f9e3ac
5937:5a4ca1ad8c53  # New gebp kernel handling up to 3 packets x 4 register-level blocks
#5949:f3488f4e45b2  # merge
#5969:e09031dccfd9  # Disable 3pX4 kernel on Altivec
#5992:4a429f5e0483  # merge
before-evaluators
#6334:f6a45e5b8b7c  # Implement evaluator for sparse outer products
#6639:c9121c60b5c7
#6655:06f163b5221f  # Properly detect FMA support on ARM
#6677:700e023044e7   # FMA has been wrongly disabled
#6681:11d31dafb0e3
#6699:5e6e8e10aad1   # merge default to tensors
#6726:ff2d2388e7b9   # merge default to tensors
#6742:0cbd6195e829   # merge default to tensors
#6747:853d2bafeb8f   # Generalized the gebp apis
6765:71584fd55762   # Made the blocking computation aware of the l3 cache; Also optimized the blocking parameters to take into account the number of threads used for a computation
6781:9cc5a931b2c6   # generalized gemv
6792:f6e1daab600a   # ensured that contractions that can be reduced to a matrix vector product
#6844:039efd86b75c   # merge tensor
6845:7333ed40c6ef   # change prefetching in gebp
#6856:b5be5e10eb7f   # merge index conversion
6893:c3a64aba7c70   # clean blocking size computation
6899:877facace746   # rotating kernel for ARM only
#6904:c250623ae9fa   # result_of
6921:915f1b1fc158   # fix prefetching change for ARM
6923:9ff25f6dacc6   # prefetching
6933:52572e60b5d3   # blocking size strategy
6937:c8c042f286b2   # avoid redundant pack_rhs
6981:7e5d6f78da59   # dynamic loop swapping
6984:45f26866c091   # rm dynamic loop swapping, adjust lhs's micro panel height to fully exploit L1 cache
6986:a675d05b6f8f   # blocking heuristic: block on the rhs in L1 if the lhs fit in L1.
7013:f875e75f07e5   # organize a little our default cache sizes, and use a saner default L1 outside of x86 (10% faster on Nexus 5)
7015:8aad8f35c955   # Refactor computeProductBlockingSizes to make room for the possibility of using lookup tables
7016:a58d253e8c91   # Polish lookup tables generation
7018:9b27294a8186   # actual_panel_rows computation should always be resilient to parameters not consistent with the known L1 cache size, see comment
7019:c758b1e2c073   # Provide a empirical lookup table for blocking sizes measured on a Nexus 5. Only for float, only for Android on ARM 32bit for now.
7085:627e039fba68   # Bug 986: add support for coefficient-based product with 0 depth.
7098:b6f1db9cf9ec   # Bug 992: don't select a 3p GEMM path with non-vectorizable scalar types, this hits unsupported paths in symm/triangular products code
7591:09a8e2186610   # 3.3-alpha1
7650:b0f3c8f43025   # help clang inlining
7708:dfc6ab9d9458   # Improve numerical accuracy in LLT and triangular solve by using true scalar divisions (instead of x * (1/y))
#8744:74b789ada92a   # Improved the matrix multiplication blocking in the case where mr is not a power of 2 (e.g on Haswell CPUs)
8789:efcb912e4356   # Made the index type a template parameter to evaluateProductBlockingSizes. Use numext::mini and numext::maxi instead of std::min/std::max to compute blocking sizes
8972:81d53c711775   # Don't optimize the processing of the last rows of a matrix matrix product in cases that violate the assumptions made by the optimized code path
8985:d935df21a082   # Remove the rotating kernel.
8988:6c2dc56e73b3   # Bug 256: enable vectorization with unaligned loads/stores.
9148:b8b8c421e36c   # Relax mixing-type constraints for binary coefficient-wise operators
9174:d228bc282ac9   # merge
9175:abc7a3600098   # Include the cost of stores in unrolling
9212:c90098affa7b   # Fix performance regression introduced in changeset 8aad8f35c955
9213:9f1c14e4694b   # Fix performance regression in dgemm introduced by changeset 81d53c711775
9361:69d418c06999   # 3.3-beta2
9445:f27ff0ad77a3   # Optimize expression matching "d?=a-b*c" as "d?=a; d?=b*c;"
9583:bef509908b9d   # 3.3-rc1
9593:2f24280cf59a   # Bug 1311: fix alignment logic in some cases of (scalar*small).lazyProduct(small)
9722:040d861b88b5   # Disabled part of the matrix matrix peeling code that's incompatible with 512 bit registers
9792:26667be4f70b   # 3.3.0
9891:41260bdfc23b   # Fix a performance regression in (mat*mat)*vec for which mat*mat was evaluated multiple times.
9942:b1d3eba60130   # Operators += and -= do not resize!
9943:79bb9887afd4   # Ease compiler job to generate clean and efficient code in mat*vec
9946:2213991340ea   # Complete rewrite of column-major-matrix * vector product to deliver higher performance of modern CPU.
9955:630471c3298c   # Improve performance of row-major-dense-matrix * vector products for recent CPUs. (this is the next changeset fixing a typo)
9975:2eeed9de710c   # Revert vec/y to vec*(1/y) in row-major TRSM
10442:e3f17da72a40  # Bug 1435: fix aliasing issue in exressions like: A = C - B*A;
10735:6913f0cf7d06  # Adds missing EIGEN_STRONG_INLINE to support MSVC properly inlining small vector calculations
10943:4db388d946bd  # Bug 1562: optimize evaluation of small products of the form s*A*B by rewriting them as: s*(A.lazyProduct(B)) to save a costly temporary. Measured speedup from 2x to 5x.
10961:5007ff66c9f6  # Introduce the macro ei_declare_local_nested_eval to help allocating on the stack local temporaries via alloca, and let outer-products makes a good use of it.
11083:30a528a984bb  # Bug 1578: Improve prefetching in matrix multiplication on MIPS.
11533:71609c41e9f8  # PR 526: Speed up multiplication of small, dynamically sized matrices
11535:6d348dc9b092  # Vectorize row-by-row gebp loop iterations on 16 packets as well
11568:efda481cbd7a  # Bug 1624: improve matrix-matrix product on ARM 64, 20% speedup
11596:b8d3f548a9d9  # do not read buffers out of bounds
11628:22f9cc0079bd  # Implement AVX512 vectorization of std::complex<float/double>
11638:81172653b67b  # Bug 1515: disable gebp's 3pX4 micro kernel for MSVC<=19.14 because of register spilling.
11659:b500fef42ced  # Artificially increase l1-blocking size for AVX512. +10% speedup with current kernels.

