<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Intel MKL PARDISO : reordering once, factorizing multiple times in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1253109#M30832</link>
    <description>&lt;P&gt;Hi all,&lt;/P&gt;
&lt;P&gt;I have been using MKL PARDISO for two months now to solve linear systems within a Fortran-coded non-linear Finite Element software. At the moment I try to optimize the code and in particular the calls to MKL PARDISO.&lt;/P&gt;
&lt;P&gt;In my problem, the coefficient matrix (tangent stiffness matrix) has a constant sparsity pattern, however the coefficients values change at each nonlinear iteration.&lt;/P&gt;
&lt;P&gt;If I am correct, in this case it makes sense to reorder and symbolically factorize (phase 11) only once -at the beginning- and then factorize (phase 22) each time the coefficients change.&lt;/P&gt;
&lt;P&gt;If I do so, I get no errors but the results become wrong after the first iteration.&lt;/P&gt;
&lt;P&gt;Conversely, the results are correct if I perform the two phases 11+22 at each nonlinear iteration.&lt;/P&gt;
&lt;P&gt;Is my hypothesis fundamentally wrong, to want to perform phase 11 only once? Or is there something else going on here that I do not see?&lt;/P&gt;
&lt;P&gt;Thank you very much for your help!&lt;/P&gt;
&lt;P&gt;ML&lt;/P&gt;
&lt;P&gt;PS: I am NOT using the DSS interface&lt;/P&gt;
&lt;P&gt;PPS: I have already tried to set iparm(5)=2 to save the permutation vector computed in phase 11&lt;/P&gt;</description>
    <pubDate>Thu, 04 Feb 2021 11:37:44 GMT</pubDate>
    <dc:creator>mlucio89</dc:creator>
    <dc:date>2021-02-04T11:37:44Z</dc:date>
    <item>
      <title>Intel MKL PARDISO : reordering once, factorizing multiple times</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1253109#M30832</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;
&lt;P&gt;I have been using MKL PARDISO for two months now to solve linear systems within a Fortran-coded non-linear Finite Element software. At the moment I try to optimize the code and in particular the calls to MKL PARDISO.&lt;/P&gt;
&lt;P&gt;In my problem, the coefficient matrix (tangent stiffness matrix) has a constant sparsity pattern, however the coefficients values change at each nonlinear iteration.&lt;/P&gt;
&lt;P&gt;If I am correct, in this case it makes sense to reorder and symbolically factorize (phase 11) only once -at the beginning- and then factorize (phase 22) each time the coefficients change.&lt;/P&gt;
&lt;P&gt;If I do so, I get no errors but the results become wrong after the first iteration.&lt;/P&gt;
&lt;P&gt;Conversely, the results are correct if I perform the two phases 11+22 at each nonlinear iteration.&lt;/P&gt;
&lt;P&gt;Is my hypothesis fundamentally wrong, to want to perform phase 11 only once? Or is there something else going on here that I do not see?&lt;/P&gt;
&lt;P&gt;Thank you very much for your help!&lt;/P&gt;
&lt;P&gt;ML&lt;/P&gt;
&lt;P&gt;PS: I am NOT using the DSS interface&lt;/P&gt;
&lt;P&gt;PPS: I have already tried to set iparm(5)=2 to save the permutation vector computed in phase 11&lt;/P&gt;</description>
      <pubDate>Thu, 04 Feb 2021 11:37:44 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1253109#M30832</guid>
      <dc:creator>mlucio89</dc:creator>
      <dc:date>2021-02-04T11:37:44Z</dc:date>
    </item>
    <item>
      <title>Re: Intel MKL PARDISO : reordering once, factorizing multiple times</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1253638#M30848</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;Your general line of thinking is correct but there are important details to understand.&lt;/P&gt;
&lt;P&gt;1) If you use matching or scaling, then the result of phase 1 actually depends on your matrix values. So it is almost impossible (and PARDISO cannot do it now) re-use the phase 1's information in this case. So, you need to turn off these features.&lt;/P&gt;
&lt;P&gt;2) Second, without special notification PARDISO cannot work like you tried, with calling phase 22 once, then "silently" changing the matrix values and then calling phase 22 again.&lt;/P&gt;
&lt;P&gt;3) What PARDISO can do for you is three things. &lt;BR /&gt;First, if you want to keep older matrices and the number of different matrices is small, you can use mnum/maxfct parameters to force PARDISO store multiple factorizations in a single handle. &lt;STRONG&gt;I believe though it is not your case.&lt;/STRONG&gt;&lt;BR /&gt;Second, there is so called "low rank" feature of PARDISO, see &lt;A href="https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top/sparse-solver-routines/onemkl-pardiso-parallel-direct-sparse-solver-interface.html" target="_blank"&gt;https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top/sparse-solver-routines/onemkl-pardiso-parallel-direct-sparse-solver-interface.html&lt;/A&gt;&amp;nbsp;(section "Low Rank Update"). You can specify which part of matrix values change (possibly, all of them) and then call phase 22 with this information. Then factorization will be re-computed only for the part which changed. &lt;STRONG&gt;But you need to know the location of the changes. If the changes are for all matrix values, it won't bring any benefit.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Third, if the matrix values are changing smoothly and not much, you can only do iterative refinement (essentially, use the previous matrix factors as a good approximation to the inverse). Then you only call phase 33 with iterative refinement, without re-doing factorization at all. For exmaple, you can re-compute factorization from scratch once you matrix changes are too large and not every nonlinear iteration. Just set the number of iteration steps to be reasonable (iparm(8)).&lt;/P&gt;
&lt;P&gt;I hope there is something useful for you in my reply.&lt;/P&gt;
&lt;P&gt;Best,&lt;BR /&gt;Kirill&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 06 Feb 2021 00:02:47 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1253638#M30848</guid>
      <dc:creator>Kirill_V_Intel</dc:creator>
      <dc:date>2021-02-06T00:02:47Z</dc:date>
    </item>
    <item>
      <title>Re: Intel MKL PARDISO : reordering once, factorizing multiple times</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1254441#M30867</link>
      <description>&lt;P&gt;Hi &lt;a href="https://community.intel.com/t5/user/viewprofilepage/user-id/111125"&gt;@Kirill_V_Intel&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;
&lt;P&gt;Thank you very much for your answer. As you pointed out, I think my only option for the moment is probably to perform phase 1 and 2 together, each time.&lt;/P&gt;
&lt;P&gt;However, I'll give iterative refinement a thought for the future.&lt;/P&gt;
&lt;P&gt;Have a nice day,&lt;/P&gt;
&lt;P&gt;ML&lt;/P&gt;</description>
      <pubDate>Tue, 09 Feb 2021 12:29:19 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1254441#M30867</guid>
      <dc:creator>mlucio89</dc:creator>
      <dc:date>2021-02-09T12:29:19Z</dc:date>
    </item>
    <item>
      <title>Re:Intel MKL PARDISO : reordering once, factorizing multiple times</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1256284#M30900</link>
      <description>&lt;P&gt;Hi Marco,&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Thanks for the confirmation.&lt;/P&gt;&lt;P&gt;As your issue has been resolved, we are closing this thread. If you require additional assistance from Intel, please start a new thread. Any further interaction in this thread will be considered community only&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Prasanth&lt;/P&gt;&lt;BR /&gt;</description>
      <pubDate>Tue, 16 Feb 2021 05:32:51 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Intel-MKL-PARDISO-reordering-once-factorizing-multiple-times/m-p/1256284#M30900</guid>
      <dc:creator>PrasanthD_intel</dc:creator>
      <dc:date>2021-02-16T05:32:51Z</dc:date>
    </item>
  </channel>
</rss>

