<?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 Calling Pardiso in parallel loop in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Calling-Pardiso-in-parallel-loop/m-p/973613#M16905</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am using Pardiso for a little while and I am happy with it. It works fine in parallel and I can use all the cores on my machine. Recently I wanted to call pardiso in a for loop to solve different equation systems. The for loop itself is parllelized using openmp (#pragma omp parallel). Now the problem is wheh I call pardiso in this loop it only runs with one single core! The code is as the following&amp;nbsp;&lt;/P&gt;
&lt;P&gt;.........&lt;/P&gt;
&lt;P&gt;njbs = 8;&lt;/P&gt;
&lt;P&gt;nthr = 6;&lt;BR /&gt;N is the number of equation systems&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;#pragma omp parallel for num_threads(njbs) schedule(dynamic,1)&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;N; i++)&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B = get_equation _system_number(i); /* B is the handle to the corresponding equation system number i*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; init(B); /*set all the pointers and corresponding parameters in B. set pt = 0 for this solver*/&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; omp_set_num_threads(nthr);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; B.iparm[2]=omp_get_max_threads(); /*B.iparm[2] is 6 now*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B-&amp;gt;phase = 11;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PARDISO (pt, &amp;amp;(B-&amp;gt;maxfct), &amp;amp;(B-&amp;gt;mnum), &amp;amp;(B-&amp;gt;mtype), &amp;amp;(B-&amp;gt;phase), &lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;amp;B-&amp;gt;n,&amp;nbsp; B-&amp;gt;a, B-&amp;gt;ia, B-&amp;gt;ja, &amp;amp;(B-&amp;gt;idum), &amp;amp;(B-&amp;gt;nrhs),&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; B-&amp;gt;iparm, &amp;amp;(B-&amp;gt;msglvl),&amp;amp;(B-&amp;gt;ddum), &amp;amp;(B-&amp;gt;ddum), &amp;amp;(B-&amp;gt;error));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;when msglvl is activated to show statistics, I get&lt;/P&gt;
&lt;P&gt;&amp;lt; Parallel Direct Factorization with number of processors: &amp;gt; 1&lt;/P&gt;
&lt;P&gt;Now the question is why does pardiso run in serial? Do I do something wrong or do I have missed something?&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;Meysam&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
    <pubDate>Mon, 04 Nov 2013 10:09:48 GMT</pubDate>
    <dc:creator>Meysam_J_</dc:creator>
    <dc:date>2013-11-04T10:09:48Z</dc:date>
    <item>
      <title>Calling Pardiso in parallel loop</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Calling-Pardiso-in-parallel-loop/m-p/973613#M16905</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am using Pardiso for a little while and I am happy with it. It works fine in parallel and I can use all the cores on my machine. Recently I wanted to call pardiso in a for loop to solve different equation systems. The for loop itself is parllelized using openmp (#pragma omp parallel). Now the problem is wheh I call pardiso in this loop it only runs with one single core! The code is as the following&amp;nbsp;&lt;/P&gt;
&lt;P&gt;.........&lt;/P&gt;
&lt;P&gt;njbs = 8;&lt;/P&gt;
&lt;P&gt;nthr = 6;&lt;BR /&gt;N is the number of equation systems&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;#pragma omp parallel for num_threads(njbs) schedule(dynamic,1)&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;N; i++)&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B = get_equation _system_number(i); /* B is the handle to the corresponding equation system number i*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; init(B); /*set all the pointers and corresponding parameters in B. set pt = 0 for this solver*/&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; omp_set_num_threads(nthr);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; B.iparm[2]=omp_get_max_threads(); /*B.iparm[2] is 6 now*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B-&amp;gt;phase = 11;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PARDISO (pt, &amp;amp;(B-&amp;gt;maxfct), &amp;amp;(B-&amp;gt;mnum), &amp;amp;(B-&amp;gt;mtype), &amp;amp;(B-&amp;gt;phase), &lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;amp;B-&amp;gt;n,&amp;nbsp; B-&amp;gt;a, B-&amp;gt;ia, B-&amp;gt;ja, &amp;amp;(B-&amp;gt;idum), &amp;amp;(B-&amp;gt;nrhs),&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; B-&amp;gt;iparm, &amp;amp;(B-&amp;gt;msglvl),&amp;amp;(B-&amp;gt;ddum), &amp;amp;(B-&amp;gt;ddum), &amp;amp;(B-&amp;gt;error));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;when msglvl is activated to show statistics, I get&lt;/P&gt;
&lt;P&gt;&amp;lt; Parallel Direct Factorization with number of processors: &amp;gt; 1&lt;/P&gt;
&lt;P&gt;Now the question is why does pardiso run in serial? Do I do something wrong or do I have missed something?&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;Meysam&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2013 10:09:48 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Calling-Pardiso-in-parallel-loop/m-p/973613#M16905</guid>
      <dc:creator>Meysam_J_</dc:creator>
      <dc:date>2013-11-04T10:09:48Z</dc:date>
    </item>
    <item>
      <title>I have found the solution.</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Calling-Pardiso-in-parallel-loop/m-p/973614#M16906</link>
      <description>&lt;P&gt;I have found the solution. mkl_set_dynamic(0) does the job.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-341B837A-9381-451D-B2BE-C049969CF545.htm" target="_blank"&gt;http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-341B837A-9381-451D-B2BE-C049969CF545.htm&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 05 Nov 2013 08:27:59 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Calling-Pardiso-in-parallel-loop/m-p/973614#M16906</guid>
      <dc:creator>Meysam_J_</dc:creator>
      <dc:date>2013-11-05T08:27:59Z</dc:date>
    </item>
  </channel>
</rss>

