<?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 After check and correct, I in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168489#M28383</link>
    <description>&lt;P&gt;After check and correct, I only have one question to ask:&lt;/P&gt;&lt;P&gt;Parallel Direct Factorization is running on 1 OpenMP&lt;/P&gt;&lt;P&gt;It should be&amp;nbsp;Parallel Direct Factorization is running on 8&amp;nbsp;OpenMP I guess if I want to accelerate the backup substitution procedure, So what iparm should I set?&lt;/P&gt;</description>
    <pubDate>Sat, 01 Dec 2018 08:55:48 GMT</pubDate>
    <dc:creator>wen_qiang_z_</dc:creator>
    <dc:date>2018-12-01T08:55:48Z</dc:date>
    <item>
      <title>How to achieve Parallel back substitution when using Pardiso?</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168487#M28381</link>
      <description>&lt;P&gt;I want to speed up the procedure of back substitution, but I did not figure out what should I do.&lt;/P&gt;&lt;P&gt;I used to use OpenMp simply, but the reason differs.&lt;/P&gt;&lt;P&gt;!$OMP parallel do&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;do j = 1,sub(i)%Nob&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;call Inver(par,pa(j)%Righthand,pa(j)%solt,2)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;end do&lt;/P&gt;&lt;P&gt;&amp;nbsp;!$OMP end parallel do&lt;/P&gt;&lt;P&gt;where par is pardiso_par_t type as follows&lt;/P&gt;&lt;P&gt;type pardiso_par_t&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;type(mkl_pardiso_handle),dimension(64) :: pt&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;integer :: maxfct,mnum,mtype,phase,n,nrhs,error,msglvl&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;integer,dimension(64) :: iparm&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;integer,allocatable,dimension(:) :: ia,ja&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;complex(kind=8),allocatable,dimension(:) :: a&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;integer,dimension(1) :: idum&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;complex(kind=8),dimension(1) :: ddum&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end type pardiso_par_t&lt;/P&gt;&lt;P&gt;and subroutine INVER is&lt;/P&gt;&lt;P&gt;subroutine Inver(left,right,solution,info)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;use MKL_PARDISO&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;use MeshDefMod&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;implicit none&lt;BR /&gt;!------------------------------------------&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;type(pardiso_par_t),intent(inout) :: left&lt;/P&gt;&lt;P&gt;!righthand&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;complex(kind=8),allocatable,dimension(:),intent(inout) :: right&lt;/P&gt;&lt;P&gt;!solution&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;complex(kind=8),allocatable,dimension(:),intent(inout) :: solution&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;integer(kind=4),intent(in) :: info&lt;BR /&gt;!------------------------------------------&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(info == 1) then&lt;BR /&gt;!Reordering and Symbolic Factorization,this step also allocates&lt;BR /&gt;!all memory that is necessary for the factorization&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%phase = 11 &amp;nbsp;!only reordering and symbolic factorization&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;call pardiso (left%pt, left%maxfct, left%mnum, left%mtype, left%phase, &amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%n, left%a, left%ia, left%ja,left%idum, left%nrhs, left%iparm,&amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%msglvl, left%ddum, left%ddum, left%error)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;write(*,*) 'Reordering completed...'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(left%error /= 0) then&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;write(*,*) 'The following ERROR was detected :',left%error&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;!stop 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;end if&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;write(*,*) 'Number of Nonzeros in factors = ', left%iparm(18)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;write(*,*) 'Number of factorization MFLOPS = ',left%iparm(19)&lt;BR /&gt;!Factorization&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%phase = 22 &amp;nbsp;!only factorizatin&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;call pardiso (left%pt, left%maxfct, left%mnum, left%mtype, left%phase,&amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%n, left%a, left%ia, left%ja,left%idum, left%nrhs, left%iparm,&amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%msglvl, left%ddum, left%ddum, left%error)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;write(*,*) 'Factorization completed...'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(left%error /= 0) then&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;write(*,*) 'The following ERROR was detected :',left%error&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;stop&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;end if&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if(info == 2) then&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;!left%phase = 33 !only factorization&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;!left%iparm(8) =0 !max number of iterative refinement steps&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;call pardiso (left%pt, left%maxfct, left%mnum, left%mtype, left%phase,&amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%n, left%a, left%ia, left%ja,left%idum, left%nrhs, left%iparm,&amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%msglvl, right, solution, left%error)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;!write(*,*) 'Solve completed...'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if(info == 3) then&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;!Termination and release of memory&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%phase = -1&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;call pardiso (left%pt, left%maxfct, left%mnum, left%mtype, left%phase,&amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%n, left%a, left%ia, left%ja,left%idum, left%nrhs, left%iparm,&amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;left%msglvl, left%ddum, left%ddum, left%error)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end if&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end subroutine Inver&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 01 Dec 2018 00:56:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168487#M28381</guid>
      <dc:creator>wen_qiang_z_</dc:creator>
      <dc:date>2018-12-01T00:56:03Z</dc:date>
    </item>
    <item>
      <title>And my pardiso control</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168488#M28382</link>
      <description>&lt;P&gt;And my pardiso control parameters are&lt;/P&gt;&lt;P&gt;iparm(1) = 1&lt;/P&gt;&lt;P&gt;iparm(2) = 3&lt;/P&gt;&lt;P&gt;iparm(11) = 1&lt;/P&gt;&lt;P&gt;iparm(25) = 2&lt;/P&gt;</description>
      <pubDate>Sat, 01 Dec 2018 01:00:43 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168488#M28382</guid>
      <dc:creator>wen_qiang_z_</dc:creator>
      <dc:date>2018-12-01T01:00:43Z</dc:date>
    </item>
    <item>
      <title>After check and correct, I</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168489#M28383</link>
      <description>&lt;P&gt;After check and correct, I only have one question to ask:&lt;/P&gt;&lt;P&gt;Parallel Direct Factorization is running on 1 OpenMP&lt;/P&gt;&lt;P&gt;It should be&amp;nbsp;Parallel Direct Factorization is running on 8&amp;nbsp;OpenMP I guess if I want to accelerate the backup substitution procedure, So what iparm should I set?&lt;/P&gt;</description>
      <pubDate>Sat, 01 Dec 2018 08:55:48 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168489#M28383</guid>
      <dc:creator>wen_qiang_z_</dc:creator>
      <dc:date>2018-12-01T08:55:48Z</dc:date>
    </item>
    <item>
      <title>Hello,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168490#M28384</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;If you want to have OpenMP-based parallel back substitution, you can just set the number of OpenMP threads (e.g., from the environment variables MKL_NUM_THREADS and OMP_NUM_THREADS) or by calling mkl_set_num_threads, or other options listed at &lt;A href="https://software.intel.com/en-us/mkl-macos-developer-guide-techniques-to-set-the-number-of-threads" target="_blank"&gt;https://software.intel.com/en-us/mkl-macos-developer-guide-techniques-to-set-the-number-of-threads&lt;/A&gt;, and call pardiso, you don't need to do an OpenMP do-loop.&lt;/P&gt;&lt;P&gt;Another thing is that you need to build and link your program appropriately. For that have a look at the MKL Link Line Advisor at &lt;A href="https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/"&gt;https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/&lt;/A&gt; where you can find correct options for OpenMP on your OS.&lt;/P&gt;&lt;P&gt;I hope you'll find this useful.&lt;/P&gt;</description>
      <pubDate>Tue, 04 Dec 2018 07:55:14 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168490#M28384</guid>
      <dc:creator>Kirill_V_Intel</dc:creator>
      <dc:date>2018-12-04T07:55:14Z</dc:date>
    </item>
    <item>
      <title>Quote:Voronin, Kirill (Intel)</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168491#M28385</link>
      <description>&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;Voronin, Kirill (Intel) wrote:&lt;BR /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;If you want to have OpenMP-based parallel back substitution, you can just set the number of OpenMP threads (e.g., from the environment variables MKL_NUM_THREADS and OMP_NUM_THREADS) or by calling mkl_set_num_threads, or other options listed at &lt;A href="https://software.intel.com/en-us/mkl-macos-developer-guide-techniques-to-set-the-number-of-threads"&gt;https://software.intel.com/en-us/mkl-macos-developer-guide-techniques-to...&lt;/A&gt;, and call pardiso, you don't need to do an OpenMP do-loop.&lt;/P&gt;&lt;P&gt;Another thing is that you need to build and link your program appropriately. For that have a look at the MKL Link Line Advisor at &lt;A href="https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/"&gt;https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/&lt;/A&gt; where you can find correct options for OpenMP on your OS.&lt;/P&gt;&lt;P&gt;I hope you'll find this useful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot for your help!&lt;/P&gt;</description>
      <pubDate>Thu, 06 Dec 2018 00:54:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/How-to-achieve-Parallel-back-substitution-when-using-Pardiso/m-p/1168491#M28385</guid>
      <dc:creator>wen_qiang_z_</dc:creator>
      <dc:date>2018-12-06T00:54:31Z</dc:date>
    </item>
  </channel>
</rss>

