<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Releases on Eigen: A C&#43;&#43; template library for linear algebra</title>
    <link>https://libeigen.gitlab.io/releases/</link>
    <description>Recent content in Releases on Eigen: A C&#43;&#43; template library for linear algebra</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Tue, 30 Sep 2025 15:26:52 +0000</lastBuildDate>
    <atom:link href="https://libeigen.gitlab.io/releases/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Eigen 5.0</title>
      <link>https://libeigen.gitlab.io/releases/5.0/</link>
      <pubDate>Tue, 30 Sep 2025 15:26:52 +0000</pubDate>
      <guid>https://libeigen.gitlab.io/releases/5.0/</guid>
      <description>&lt;p&gt;Eigen 5.0.0 was released on September 30 2025. It can be downloaded from&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/releases/5.0.0&#34;&gt;Gitlab&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;summary&#34;&gt;Summary&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#summary&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Eigen 5.0 provides many new features, performance enhancements, and bugfixes throughout Eigen’s core template expression infrastructure and linear algebra facilities.  The full set of changes and related issues are too large to list here, but can be accessed via the release milestone &lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/milestones/10&#34;&gt;%5.0&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is the last major release to support the C++14 language standard. The master branch and subsequent releases will require support for C++17.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eigen 3.4</title>
      <link>https://libeigen.gitlab.io/releases/3.4/</link>
      <pubDate>Thu, 14 Oct 2021 15:26:52 +0000</pubDate>
      <guid>https://libeigen.gitlab.io/releases/3.4/</guid>
      <description>&lt;p&gt;Eigen 3.4 was released on August 18 2021. It can be downloaded from the&#xA;Download section on the &lt;a href=&#34;https://libeigen.gitlab.io/&#34;&gt;Main&#xA;Page&lt;/a&gt; or from&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/releases/3.4.0&#34;&gt;Gitlab&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Notice:&lt;/strong&gt; that 3.4.x will be the last major release series of Eigen&#xA;that will support c++03. The master branch will drop c++03 support after&#xA;this release.&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes-to-supported-modules&#34;&gt;Changes to supported modules&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#changes-to-supported-modules&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;changes-that-might-break-existing-code&#34;&gt;Changes that might break existing code&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#changes-that-might-break-existing-code&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using float or double for indexing matrices, vectors and arrays will&#xA;now fail to compile, ex.:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MatrixXd &lt;span style=&#34;color:#a6e22e&#34;&gt;A&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt; one &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; a11 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; A(one,&lt;span style=&#34;color:#ae81ff&#34;&gt;1.&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// compilation error here&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;new-major-features-in-core&#34;&gt;New Major Features in Core&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#new-major-features-in-core&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add c++11 &lt;strong&gt;initializer_list constructors&lt;/strong&gt; to Matrix and Array&#xA;&lt;a href=&#34;https://libeigen.gitlab.io/eigen/docs-3.4/group__TutorialMatrixClass.html#title3&#34;&gt;[doc&lt;/a&gt;]:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MatrixXi a {      &lt;span style=&#34;color:#75715e&#34;&gt;// construct a 2x3 matrix&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      {&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;},    &lt;span style=&#34;color:#75715e&#34;&gt;// first row&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      {&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;}     &lt;span style=&#34;color:#75715e&#34;&gt;// second row&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VectorXd v{{&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;}};    &lt;span style=&#34;color:#75715e&#34;&gt;// construct a dynamic-size vector with 5 elements&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Array&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; a{&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;}; &lt;span style=&#34;color:#75715e&#34;&gt;// initialize a fixed-size 1D array of size 5.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Add STL-compatible &lt;strong&gt;iterators&lt;/strong&gt; for dense expressions&#xA;&lt;a href=&#34;https://libeigen.gitlab.io/eigen/docs-3.4/group__TutorialSTL.html&#34;&gt;[doc&lt;/a&gt;].&#xA;Some examples:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VectorXd v &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ...;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MatrixXd A &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ...;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// range for loop over all entries of v then A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;auto&lt;/span&gt; x : v) { cout &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;auto&lt;/span&gt; x : A.reshaped()) { cout &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// sort v then each column of A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;std&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;sort(v.begin(), v.end());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;auto&lt;/span&gt; c : A.colwise())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    std&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;sort(c.begin(), c.end());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;New versatile API for sub-matrices, &lt;strong&gt;slices&lt;/strong&gt;, and &lt;strong&gt;indexed views&lt;/strong&gt;&#xA;&lt;a href=&#34;https://libeigen.gitlab.io/eigen/docs-3.4/group__TutorialSlicingIndexing.html&#34;&gt;[doc&lt;/a&gt;].&#xA;It basically extends &lt;code&gt;A(.,.)&lt;/code&gt; to let it accept anything that&#xA;looks-like a sequence of indices with random access. To make it usable&#xA;this new feature comes with new symbols: &lt;code&gt;Eigen::indexing::all&lt;/code&gt;,&#xA;&lt;code&gt;Eigen::indexing::last&lt;/code&gt;, and functions generating arithmetic&#xA;sequences: &lt;code&gt;Eigen::seq(first,last[,incr])&lt;/code&gt;,&#xA;&lt;code&gt;Eigen::seqN(first,size[,incr])&lt;/code&gt;, &lt;code&gt;Eigen::lastN(size[,incr])&lt;/code&gt;. Here is&#xA;an example picking even rows but the first and last ones, and a subset&#xA;of indexed columns:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MatrixXd A &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ...;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;std&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;vector&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; col_ind{&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MatrixXd B &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; A(seq(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,last&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,fix&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;), col_ind);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Add C++11 &lt;strong&gt;template aliases&lt;/strong&gt; for Matrix, Vector, and Array of common&#xA;sizes, including generic &lt;code&gt;Vector&amp;lt;Type,Size&amp;gt;&lt;/code&gt; and&#xA;&lt;code&gt;RowVector&amp;lt;Type,Size&amp;gt;&lt;/code&gt; aliases&#xA;&lt;a href=&#34;https://libeigen.gitlab.io/eigen/docs-3.4/group__matrixtypedefs.html&#34;&gt;[doc&lt;/a&gt;].&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MatrixX&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; M;  &lt;span style=&#34;color:#75715e&#34;&gt;// Instead of MatrixXd or Matrix&amp;lt;Dynamic, Dynamic, double&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Vector4&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;MyType&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; V;  &lt;span style=&#34;color:#75715e&#34;&gt;// Instead of Vector&amp;lt;4, MyType&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;New support for &lt;code&gt;bfloat16&lt;/code&gt;. The 16-bit &lt;a href=&#34;https://en.wikipedia.org/wiki/Bfloat16_floating-point_format&#34;&gt;Brain floating point&#xA;format&lt;/a&gt;&#xA;is now available as &lt;code&gt;Eigen::bfloat16&lt;/code&gt;. The constructor must be called&#xA;explicitly, but it can otherwise be used as any other scalar type. To&#xA;convert back-and-forth between &lt;code&gt;uint16_t&lt;/code&gt; to extract the bit&#xA;representation, use &lt;code&gt;Eigen::numext::bit_cast&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  bfloat16 &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0.25&lt;/span&gt;);                                 &lt;span style=&#34;color:#75715e&#34;&gt;// explicit construction&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;uint16_t&lt;/span&gt; s_bits &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; numext&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;bit_cast&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;uint16_t&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;(s);  &lt;span style=&#34;color:#75715e&#34;&gt;// bit representation&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; MatrixBf16 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Matrix&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;bfloat16, Dynamic, Dynamic&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  MatrixBf16 X &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; MatrixBf16&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Random(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;new-backends&#34;&gt;New backends&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#new-backends&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Arm SVE:&lt;/strong&gt; Eigen now supports Arm&amp;rsquo;s &lt;a href=&#34;https://developer.arm.com/documentation/101726/0300/Learn-about-the-Scalable-Vector-Extension--SVE-/What-is-the-Scalable-Vector-Extension-&#34;&gt;Scalable Vector Extension&#xA;(SVE)&lt;/a&gt;.&#xA;Currently only fixed-length SVE vectors for &lt;code&gt;uint32_t&lt;/code&gt; and &lt;code&gt;float&lt;/code&gt; are&#xA;available.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MIPS MSA:&lt;/strong&gt; Eigen now supports the &lt;a href=&#34;https://en.wikipedia.org/wiki/MIPS_architecture#MIPS_SIMD_architecture_%28MSA%29&#34;&gt;MIPS SIMD Architecture&#xA;(MSA)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;AMD ROCm/HIP:&lt;/strong&gt; Eigen now contains a generic GPU backend that&#xA;unifies support for&#xA;&lt;a href=&#34;https://developer.nvidia.com/cuda-toolkit&#34;&gt;NVIDIA/CUDA&lt;/a&gt; and&#xA;&lt;a href=&#34;https://rocmdocs.amd.com/en/latest/&#34;&gt;AMD/HIP&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Power 10 MMA Backend:&lt;/strong&gt; Eigen now has initial support for &lt;a href=&#34;https://arxiv.org/pdf/2104.03142.pdf&#34;&gt;Power 10&#xA;matrix multiplication assist&#xA;instructions&lt;/a&gt; for float32 and&#xA;float64, real and complex.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;improvements-to-eigen-core&#34;&gt;Improvements to Eigen Core&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#improvements-to-eigen-core&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eigen now uses the c++11 &lt;strong&gt;alignas&lt;/strong&gt; keyword for static alignment.&#xA;Users targeting C++17 only and recent compilers (e.g., GCC&amp;gt;=7,&#xA;clang&amp;gt;=5, MSVC&amp;gt;=19.12) will thus be able to completely forget about&#xA;all&#xA;&lt;a href=&#34;https://libeigen.gitlab.io/eigen/docs-3.4/group__TopicUnalignedArrayAssert.html&#34;&gt;issues&lt;/a&gt;&#xA;related to static alignment, including&#xA;&lt;code&gt;EIGEN_MAKE_ALIGNED_OPERATOR_NEW&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Various performance improvements for products and Eigen&amp;rsquo;s GEBP and&#xA;GEMV kernels have been implemented:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By using half- and quater-packets the performance of matrix&#xA;multiplications of small to medium sized matrices has been improved&lt;/li&gt;&#xA;&lt;li&gt;Eigen&amp;rsquo;s GEMM now falls back to GEMV if it detects that a matrix is a&#xA;run-time vector&lt;/li&gt;&#xA;&lt;li&gt;The performance of matrix products using Arm Neon has been&#xA;drastically improved (up to 20%)&lt;/li&gt;&#xA;&lt;li&gt;Performance of many special cases of matrix products has been&#xA;improved&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Large speed up from blocked algorithm for &lt;code&gt;.transposeInPlace&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Speed up misc. operations by propagating compile-time sizes&#xA;(col/row-wise reverse, PartialPivLU, and others)&lt;/li&gt;&#xA;&lt;li&gt;Faster specialized SIMD kernels for small fixed-size inverse, LU&#xA;decomposition, and determinant.&lt;/li&gt;&#xA;&lt;li&gt;Improved or added vectorization of partial or slice reductions along&#xA;the outer-dimension, for instance: &lt;code&gt;colmajor_mat.rowwise().mean()&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;elementwise-math-functions&#34;&gt;Elementwise math functions&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#elementwise-math-functions&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Many functions are now implemented and vectorized in generic&#xA;(backend-agnostic) form.&lt;/li&gt;&#xA;&lt;li&gt;Many improvements to correctness, accuracy, and compatibility with c++&#xA;standard library.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Much improved implementation of &lt;code&gt;ldexp&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Misc. fixes for corner cases, NaN/Inf inputs and singular points of&#xA;many functions.&lt;/li&gt;&#xA;&lt;li&gt;New implementation of the Payne-Hanek for argument reduction&#xA;algorithm for &lt;code&gt;sin&lt;/code&gt; and &lt;code&gt;cos&lt;/code&gt; with huge arguments.&lt;/li&gt;&#xA;&lt;li&gt;New faithfully rounded algorithm for &lt;code&gt;pow(x,y)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Speedups from (new or improved) vectorized versions of&#xA;&lt;code&gt;pow, log, sin, cos, arg, pow, log2&lt;/code&gt;, complex&#xA;&lt;code&gt;sqrt, erf, expm1, logp1, logistic, rint, gamma&lt;/code&gt; and &lt;code&gt;bessel&lt;/code&gt;&#xA;functions, and more.&lt;/li&gt;&#xA;&lt;li&gt;Improved special function support (Bessel and gamma functions,&#xA;&lt;code&gt;ndtri, erfc&lt;/code&gt;, inverse hyperbolic functions and more)&lt;/li&gt;&#xA;&lt;li&gt;New elementwise functions for &lt;code&gt;absolute_difference&lt;/code&gt;, &lt;code&gt;rint&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;dense-matrix-decompositions-and-solvers&#34;&gt;Dense matrix decompositions and solvers&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#dense-matrix-decompositions-and-solvers&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All dense linear solvers (i.e., Cholesky, *LU, *QR,&#xA;CompleteOrthogonalDecomposition, *SVD) now inherit SolverBase and&#xA;thus support &lt;code&gt;.transpose()&lt;/code&gt;, &lt;code&gt;.adjoint()&lt;/code&gt; and &lt;code&gt;.solve()&lt;/code&gt; APIs.&lt;/li&gt;&#xA;&lt;li&gt;SVD implementations now have an &lt;code&gt;info()&lt;/code&gt; method for checking&#xA;convergence.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;Eigen/SVD&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  MatrixXf m &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; MatrixXf&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Random(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  JacobiSVD&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;MatrixXf&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; svd(m, ComputeThinU &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; ComputeThinV);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (svd.info() &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; ComputationInfo&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Success) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// SVD computation was successful.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    VectorXf x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; svd.solve(b);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Most decompositions now fail quickly when invalid inputs are detected.&lt;/li&gt;&#xA;&lt;li&gt;Optimized the product of a &lt;code&gt;HouseholderSequence&lt;/code&gt; with the identity, as&#xA;well as the evaluation of a &lt;code&gt;HouseholderSequence&lt;/code&gt; to a dense matrix&#xA;using faster blocked product.&lt;/li&gt;&#xA;&lt;li&gt;Fixed aliasing issues with in-place small matrix inversions.&lt;/li&gt;&#xA;&lt;li&gt;Fixed several edge-cases with empty or zero inputs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;sparse-matrix-support-decompositions-and-solvers&#34;&gt;Sparse matrix support, decompositions and solvers&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sparse-matrix-support-decompositions-and-solvers&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enabled assignment and addition with diagonal matrix expressions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  SparseMatrix&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; A(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  VectorXf x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; VectorXf&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Random(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  A &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; x.asDiagonal();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  A &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; x.asDiagonal();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Support added for SuiteSparse KLU routines via the &lt;code&gt;KLUSupport&lt;/code&gt;&#xA;module. SuiteSparse must be installed to use this module.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;Eigen/KLUSupport&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.makeCompressed();   &lt;span style=&#34;color:#75715e&#34;&gt;// Recommendation is to compress input before calling sparse solvers.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  KLU&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;SparseMatrix&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; klu(A);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (klu.info() &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; ComputationInfo&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Success) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    VectorXf x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; klu.solve(b);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;SparseCholesky&lt;/code&gt; now works with row-major matrices.&lt;/li&gt;&#xA;&lt;li&gt;Various bug fixes and performance improvements.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;type-support&#34;&gt;Type support&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#type-support&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Improved support for &lt;code&gt;half&lt;/code&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Native support added for ARM &lt;code&gt;__fp16&lt;/code&gt;, CUDA/HIP &lt;code&gt;__half&lt;/code&gt;, and &lt;code&gt;F16C&lt;/code&gt;&#xA;conversion intrinsics.&lt;/li&gt;&#xA;&lt;li&gt;Better vectorization support added across all backends.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Improved bool support&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Partial vectorization support added for boolean operations.&lt;/li&gt;&#xA;&lt;li&gt;Significantly improved performance (x25) for logical operations with&#xA;&lt;code&gt;Matrix&lt;/code&gt; or &lt;code&gt;Tensor&lt;/code&gt; of &lt;code&gt;bool&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Improved support for custom types&#xA;&lt;ul&gt;&#xA;&lt;li&gt;More custom types work out-of-the-box (see&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/issues/2201&#34;&gt;#2201&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;improved-geometry-module&#34;&gt;Improved Geometry Module&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#improved-geometry-module&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Behavioral change:&lt;/strong&gt; &lt;code&gt;Transform::computeRotationScaling()&lt;/code&gt; and&#xA;&lt;code&gt;Transform::computeScalingRotation()&lt;/code&gt; are now more continuous across&#xA;degeneracies (see&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/merge_requests/349&#34;&gt;!349&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;New partial vectorization support added for &lt;code&gt;Quaternion&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Generic vectorized 4x4 matrix inversion.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;backend-specific-improvements&#34;&gt;Backend-specific improvements&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#backend-specific-improvements&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Arm NEON&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Now provides vectorization for &lt;code&gt;uint64_t&lt;/code&gt;, &lt;code&gt;int64_t&lt;/code&gt;, &lt;code&gt;uint32_t&lt;/code&gt;,&#xA;&lt;code&gt;int16_t&lt;/code&gt;, &lt;code&gt;uint16_t&lt;/code&gt;, &lt;code&gt;int16_t&lt;/code&gt;, &lt;code&gt;int8_t&lt;/code&gt;, and &lt;code&gt;uint8_t&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Emulates &lt;code&gt;bfloat16&lt;/code&gt; support when using &lt;code&gt;Eigen::bfloat16&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Supports emulated and native &lt;code&gt;float16&lt;/code&gt; when using &lt;code&gt;Eigen::half&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SSE/AVX/AVX512&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;General performance improvements and bugfixes.&lt;/li&gt;&#xA;&lt;li&gt;Enabled AVX512 instructions by default if available.&lt;/li&gt;&#xA;&lt;li&gt;New &lt;code&gt;std::complex&lt;/code&gt;, &lt;code&gt;half&lt;/code&gt;, and &lt;code&gt;bfloat16&lt;/code&gt; vectorization support&#xA;added.&lt;/li&gt;&#xA;&lt;li&gt;Many missing packet functions added.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Altivec/Power&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;General performance improvement and bugfixes.&lt;/li&gt;&#xA;&lt;li&gt;Enhanced vectorization of real and complex scalars.&lt;/li&gt;&#xA;&lt;li&gt;Changes to the &lt;code&gt;gebp_kernel&lt;/code&gt; specific to Altivec, using VSX&#xA;implementation of the MMA instructions that gain speed improvements&#xA;up to 4x for matrix-matrix products.&lt;/li&gt;&#xA;&lt;li&gt;Dynamic dispatch for GCC greater than 10 enabling selection of MMA&#xA;or VSX instructions based on &lt;code&gt;__builtin_cpu_supports&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GPU (CUDA and HIP)&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Several optimized math functions added, better support for&#xA;&lt;code&gt;std::complex&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Added option to disable CUDA entirely by defining &lt;code&gt;EIGEN_NO_CUDA&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Many more functions can now be used in device code (e.g.&#xA;comparisons, small matrix inversion).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ZVector&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vectorized &lt;code&gt;float&lt;/code&gt; and &lt;code&gt;std::complex&lt;/code&gt;&lt;float&gt; support added.&lt;/li&gt;&#xA;&lt;li&gt;Added z14 support.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SYCL&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Redesigned SYCL implementation for use with the&#xA;&lt;a href=&#34;https://libeigen.gitlab.io/eigen/docs-nightly/unsupported/eigen_tensors.html&#34;&gt;Tensor&lt;/a&gt;&#xA;module, which can be enabled by defining &lt;code&gt;EIGEN_USE_SYCL&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;New generic memory model introduced used by &lt;code&gt;TensorDeviceSycl&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Better integration with OpenCL devices.&lt;/li&gt;&#xA;&lt;li&gt;Added many math function specializations.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;miscellaneous-api-changes&#34;&gt;Miscellaneous API Changes&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#miscellaneous-api-changes&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;New &lt;code&gt;setConstant(...)&lt;/code&gt; methods for preserving one dimension of a&#xA;matrix by passing in &lt;code&gt;NoChange&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  MatrixXf &lt;span style=&#34;color:#a6e22e&#34;&gt;A&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;);               &lt;span style=&#34;color:#75715e&#34;&gt;// 10x5  matrix.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.setConstant(NoChange, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;);  &lt;span style=&#34;color:#75715e&#34;&gt;// 10x10 matrix of 2s.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.setConstant(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, NoChange, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;);   &lt;span style=&#34;color:#75715e&#34;&gt;//  5x10 matrix of 3s.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.setZero(NoChange, &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;);         &lt;span style=&#34;color:#75715e&#34;&gt;//  5x20 matrix of 0s.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.setZero(&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;, NoChange);         &lt;span style=&#34;color:#75715e&#34;&gt;// 20x20 matrix of 0s.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.setOnes(NoChange, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;);          &lt;span style=&#34;color:#75715e&#34;&gt;// 20x5  matrix of 1s.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.setOnes(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, NoChange);          &lt;span style=&#34;color:#75715e&#34;&gt;//  5x5  matrix of 1s.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.setRandom(NoChange, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);       &lt;span style=&#34;color:#75715e&#34;&gt;//  5x10 random matrix.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.setRandom(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, NoChange);       &lt;span style=&#34;color:#75715e&#34;&gt;// 10x10 random matrix.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Added &lt;code&gt;setUnit(Index i)&lt;/code&gt; for vectors that sets the &lt;em&gt;i&lt;/em&gt; th coefficient&#xA;to one and all others to zero.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  VectorXf &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  v.setUnit(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;);   &lt;span style=&#34;color:#75715e&#34;&gt;// { 0, 0, 0, 1, 0}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Added &lt;code&gt;transpose()&lt;/code&gt;, &lt;code&gt;adjoint()&lt;/code&gt;, &lt;code&gt;conjugate()&lt;/code&gt; methods to&#xA;&lt;code&gt;SelfAdjointView&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Added &lt;code&gt;shiftLeft&lt;/code&gt;&lt;N&gt;&lt;code&gt;()&lt;/code&gt; and &lt;code&gt;shiftRight&lt;/code&gt;&lt;N&gt;&lt;code&gt;()&lt;/code&gt; coefficient-wise&#xA;arithmetic shift functions to Arrays.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ArrayXXi A &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ArrayXXi&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Random(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ArrayXXi B &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; A.shiftRight&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ArrayXXi C &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; A.shiftLeft&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Enabled adding and subtracting of diagonal expressions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  VectorXf x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; VectorXf&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Random(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  VectorXf y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; VectorXf&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Random(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  MatrixXf A &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; MatrixXf&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Identity(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  A &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; x.asDiagonal() &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; y.asDiagonal();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Allow user-defined default cache sizes via defining&#xA;&lt;code&gt;EIGEN_DEFAULT_L1_CACHE_SIZE&lt;/code&gt;, &amp;hellip;, &lt;code&gt;EIGEN_DEFAULT_L3_CACHE_SIZE&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Added &lt;code&gt;EIGEN_ALIGNOF(X)&lt;/code&gt; macro for determining alignment of a provided&#xA;variable.&lt;/li&gt;&#xA;&lt;li&gt;Allow plugins for &lt;code&gt;VectorwiseOp&lt;/code&gt; by defining a file&#xA;&lt;code&gt;EIGEN_VECTORWISEOP_PLUGIN&lt;/code&gt; (e.g.&#xA;&lt;code&gt;-DEIGEN_VECTORWISEOP_PLUGIN=my_vectorwise_op_plugins.h&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Allow disabling of IO operations by defining &lt;code&gt;EIGEN_NO_IO&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;improvement-to-nan-propagation&#34;&gt;Improvement to NaN propagation&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#improvement-to-nan-propagation&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Improvements to NaN correctness for elementwise functions.&lt;/li&gt;&#xA;&lt;li&gt;New &lt;code&gt;NaNPropagation&lt;/code&gt; template argument to control whether NaNs are&#xA;propagated or suppressed in elementwise &lt;code&gt;min/max&lt;/code&gt; and corresponding&#xA;reductions on &lt;code&gt;Array&lt;/code&gt;, &lt;code&gt;Matrix&lt;/code&gt;, and &lt;code&gt;Tensor&lt;/code&gt;. Example for max:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Elementwise maximum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Eigen&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;MatrixXf left, right, r0, r1, r2;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;r0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; left.cwiseMax(right); &lt;span style=&#34;color:#75715e&#34;&gt;// Implementation defined behavior.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Propagate NaN if either argument is NaN.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;r1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; left.&lt;span style=&#34;color:#66d9ef&#34;&gt;template&lt;/span&gt; cwiseMax&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;PropagateNaN&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;(right);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Suppress NaN if at least one argument is not a NaN.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;r2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; left.&lt;span style=&#34;color:#66d9ef&#34;&gt;template&lt;/span&gt; cwiseMax&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;PropagateNumbers&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;(right);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Max reductions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Eigen&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;MatrixXf m;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt; nan_or_max &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; m.maxCoeff(); &lt;span style=&#34;color:#75715e&#34;&gt;// Implementation defined behavior.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt; nan_if_any_or_max &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; m.&lt;span style=&#34;color:#66d9ef&#34;&gt;template&lt;/span&gt; maxCoeff&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;PropagateNaN&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt; nan_if_all_or_max &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; m.&lt;span style=&#34;color:#66d9ef&#34;&gt;template&lt;/span&gt; maxCoeff&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;PropagateNumbers&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;changes-to-unsupported-modules&#34;&gt;Changes to unsupported modules&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#changes-to-unsupported-modules&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;new-low-latency-non-blocking-threadpool-module&#34;&gt;New low-latency non-blocking ThreadPool module&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#new-low-latency-non-blocking-threadpool-module&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Originally a part of the Tensor module, &lt;code&gt;Eigen::ThreadPool&lt;/code&gt; is now&#xA;separate and more portable, and forms the basis for multi-threading in&#xA;TensorFlow, for example. Example:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;Eigen/CXX11/ThreadPool&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; num_threads &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Eigen&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;ThreadPool tp(num_threads);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;auto&lt;/span&gt; do_stuff &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []() { ... };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  tp.Schedule(do_stuff);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;changes-to-tensor-module&#34;&gt;Changes to Tensor module&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#changes-to-tensor-module&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Support for c++03 was officially dropped in Tensor module, since most&#xA;of the code was written in c++11 anyway. This will prevent building&#xA;the code for CUDA with older version of &lt;code&gt;nvcc&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Performance optimizations of Tensor contraction&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Speed up &amp;ldquo;outer-product-like&amp;rdquo; operations by parallelizing over the&#xA;contraction dimension, using thread_local buffers and recursive work&#xA;splitting.&lt;/li&gt;&#xA;&lt;li&gt;Improved threading heuristics.&lt;/li&gt;&#xA;&lt;li&gt;Support for fusing element-wise operations into contraction during&#xA;evaluation. Example:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// This example applies std::sqrt to all output elements from a tensor contraction. &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// The optional OutputKernel argument to the contraction in this example is a functor over a &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 2-dimensional buffer. The functor is called once for each output block of the contraction &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// result, to perform the elementwise sqrt operation while the block is hot in cache.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SqrtOutputKernel&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;template&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;typename&lt;/span&gt; Index, &lt;span style=&#34;color:#66d9ef&#34;&gt;typename&lt;/span&gt; Scalar&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  EIGEN_ALWAYS_INLINE &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;operator&lt;/span&gt;()(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; internal&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;blas_data_mapper&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Scalar, Index, ColMajor&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; output_mapper,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; TensorContractionParams&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;, Index, Index, Index num_rows,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      Index num_cols) &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; num_rows; &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;i) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; j &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; j &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; num_cols; &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;j) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        output_mapper(i, j) &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; std&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;sqrt(output_mapper(i, j));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Tensor&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, DataLayout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; left(&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Tensor&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, DataLayout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; right(&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Tensor&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, DataLayout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; result(&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Eigen&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;array&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;DimPair, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; dims({{DimPair(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;), DimPair(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)}});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;result &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; left.contract(right, dims, SqrtOutputKernel());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Performance optimizations of other Tensor operator&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Speedups from improved vectorization, block evaluation, and&#xA;multi-threading for most operators.&lt;/li&gt;&#xA;&lt;li&gt;Significant speedup to broadcasting.&lt;/li&gt;&#xA;&lt;li&gt;Reduction of index computation overhead, e.g. using fast divisors in&#xA;TensorGenerator, squeezing dimensions in TensorPadding.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Complete rewrite of the block (tiling) evaluation framework for tensor&#xA;expressions lead to significant speedups and reduced number of memory&#xA;allocations.&lt;/li&gt;&#xA;&lt;li&gt;Added new API for asynchronous evaluation of tensor expressions.&#xA;Example:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Tensor&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; in1(&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;70&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Tensor&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; in2(&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;70&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Tensor&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; out(&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;70&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Eigen&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;ThreadPool tp(internal&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;random&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Eigen&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;ThreadPoolDevice thread_pool_device(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;tp, internal&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;random&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Eigen&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Barrier b(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;auto&lt;/span&gt; done &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;b]() { b.Notify(); };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  out.device(thread_pool_device, std&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;move(done)) &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; in1 &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; in2 &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3.14f&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  b.Wait();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Misc. minor behavior changes &amp;amp; fixes:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fix const correctness for TensorMap.&lt;/li&gt;&#xA;&lt;li&gt;Modify tensor argmin/argmax to always return first occurrence.&lt;/li&gt;&#xA;&lt;li&gt;More numerically stable tree reduction.&lt;/li&gt;&#xA;&lt;li&gt;Improve randomness of the tensor random generator.&lt;/li&gt;&#xA;&lt;li&gt;Update the padding computation for PADDING_SAME to be consistent&#xA;with TensorFlow.&lt;/li&gt;&#xA;&lt;li&gt;Support static dimensions (aka IndexList) in&#xA;resizing/reshape/broadcast.&lt;/li&gt;&#xA;&lt;li&gt;Improved accuracy of Tensor FFT.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;improvements-to-fft-module&#34;&gt;Improvements to FFT module&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#improvements-to-fft-module&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Faster and more accurate twiddle factor computation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;improvements-to-eulerangles&#34;&gt;Improvements to EulerAngles&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#improvements-to-eulerangles&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EulerAngles can now be directly constructed from 3D vectors&lt;/li&gt;&#xA;&lt;li&gt;EulerAngles now provide &lt;code&gt;isApprox()&lt;/code&gt; and &lt;code&gt;cast()&lt;/code&gt; functions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;changes-to-sparse-iterative-solvers&#34;&gt;Changes to sparse iterative solvers&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#changes-to-sparse-iterative-solvers&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added new IDRS iterative linear solver.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;unsupported/Eigen/IterativeSolvers&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  A.makeCompressed();   &lt;span style=&#34;color:#75715e&#34;&gt;// Recommendation is to compress input before calling sparse solvers.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  IDRS&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;SparseMatrix&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;, DiagonalPreconditioner&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; idrs(A);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  VectorXf x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; idrs.solve(b);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; success &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (idrs.info() &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; ComputationInfo&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;Success);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;improvements-to-polynomials&#34;&gt;Improvements to Polynomials&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#improvements-to-polynomials&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PolynomialSolver can now be used with complex numbers&lt;/li&gt;&#xA;&lt;li&gt;The solver will automatically choose between &lt;code&gt;EigenSolver&lt;/code&gt; and&#xA;&lt;code&gt;ComplexEigenSolver&lt;/code&gt; depending on the scalar type used&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;other-relevant-changes&#34;&gt;Other relevant changes&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#other-relevant-changes&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eigen now provides an option to test with an external BLAS library&lt;/li&gt;&#xA;&lt;li&gt;Eigen can now be used with the &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Portland_Group&#34;&gt;PGI&#xA;Compiler&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Printing when using GDB has been improved&lt;/li&gt;&#xA;&lt;li&gt;Eigen can now detect if a platform supports &lt;code&gt;int128&lt;/code&gt; intrinsics&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;testing&#34;&gt;Testing&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#testing&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The full Eigen test suite was built and run successfully (in c++03 and&#xA;c++11 mode) with the following compiler/platform/OS combinations:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eigen 3.3</title>
      <link>https://libeigen.gitlab.io/releases/3.3/</link>
      <pubDate>Wed, 06 Sep 2017 09:56:42 +0000</pubDate>
      <guid>https://libeigen.gitlab.io/releases/3.3/</guid>
      <description>&lt;p&gt;Eigen 3.3 has been released on November 10, 2016. It can be downloaded&#xA;from the &lt;a href=&#34;https://libeigen.gitlab.io/#download&#34;&gt;Download&lt;/a&gt; section on the &lt;a href=&#34;https://libeigen.gitlab.io/&#34;&gt;Main&#xA;Page&lt;/a&gt;. Since Eigen 3.2, the 3.3 development branch&#xA;received more than 3500 commits [1] representing numerous major&#xA;changes.&lt;/p&gt;&#xA;&lt;p&gt;Release history:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eigen 3.3 alpha-1 was released on September 4, 2015. It includes about&#xA;1660 commits since 3.2. It includes all bug-fixes and improvements of&#xA;the 3.2 branch up to the 3.2.5 version, as detailed in the respective&#xA;change-logs: &lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#321---2014-02-26&#34;&gt;3.2.1&lt;/a&gt;,&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#322---2014-08-04&#34;&gt;3.2.2&lt;/a&gt;,&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#323---2014-12-16&#34;&gt;3.2.3&lt;/a&gt;,&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#324---2015-01-21&#34;&gt;3.2.4&lt;/a&gt;,&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#325---2015-06-16&#34;&gt;3.2.5&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Eigen 3.3 beta-1 was released on December 16, 2015. It includes about&#xA;350 commits since 3.3 alpha1, as detailed in the respective&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#33-beta1---2015-12-16&#34;&gt;change-log&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Eigen 3.3 beta-2 was released on July 26, 2016. It includes more that&#xA;1000 commits since 3.3 beta1, as detailed in the respective&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#33-beta2---2016-08-26&#34;&gt;change-log&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Eigen 3.3 rc-1 was released on September 22, 2016. It includes more&#xA;that 300 commits since 3.3 beta2, as detailed in the respective&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#33-rc1---2016-09-22&#34;&gt;change-log&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Eigen 3.3 rc-2 was released on November 04, 2016. It includes more&#xA;that 90 commits since 3.3 rc1, as detailed in the respective&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/master/CHANGELOG.md#33-rc2---2016-11-04&#34;&gt;change-log&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The major changes since 3.2 are summarized below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eigen 3.0</title>
      <link>https://libeigen.gitlab.io/releases/3.0/</link>
      <pubDate>Fri, 04 Jan 2013 09:45:05 +0000</pubDate>
      <guid>https://libeigen.gitlab.io/releases/3.0/</guid>
      <description>&lt;p&gt;Eigen 3.0 was released on March 19, 2011.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eigen 2</title>
      <link>https://libeigen.gitlab.io/releases/2.0/</link>
      <pubDate>Sun, 17 Jan 2010 20:30:36 +0000</pubDate>
      <guid>https://libeigen.gitlab.io/releases/2.0/</guid>
      <description>&lt;p&gt;This page is about the &lt;strong&gt;outdated&lt;/strong&gt; version 2 of Eigen.&lt;/p&gt;&#xA;&lt;p&gt;We highly recommended to port any existing code which is still using&#xA;Eigen 2 to Eigen 3. To this end, follow our &lt;a href=&#34;https://libeigen.gitlab.io/eigen/docs-3.3/Eigen2ToEigen3.html&#34;&gt;porting&#xA;guide&lt;/a&gt;. Morover,&#xA;note that the &lt;Eigen2Support&gt; module and compatibility modes will be&#xA;removed in Eigen 3.3.&lt;/p&gt;&#xA;&lt;p&gt;Useful links:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eigen 2.0.17 downloads:&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/archive/2.0.17/eigen-2.0.17.tar.bz2&#34;&gt;tar.bz2&lt;/a&gt;,&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/archive/2.0.17/eigen-2.0.17.tar.gz&#34;&gt;tar.gz&lt;/a&gt;,&#xA;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/archive/2.0.17/eigen-2.0.17.zip&#34;&gt;zip&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gitlab.com/libeigen/eigen/-/blob/nightly/CHANGELOG.md#2017---2011-12-06&#34;&gt;Eigen 2.0.17 Changelog.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://libeigen.gitlab.io/eigen/docs-2.0&#34;&gt;Eigen 2 documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
