<?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 PARDISO performance in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/PARDISO-performance/m-p/1078325#M22678</link>
    <description>&lt;P&gt;Hi, All&lt;/P&gt;

&lt;P&gt;IDE: Microsoft parallel studio 2010 &amp;nbsp; &lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Complier: Intel Fortran &amp;nbsp;Processor: Core i5-2400 x64(4 threads) &amp;nbsp; MKL library version: 10.3 update 7&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Problem type: real unsymmetric N = 2682 NNZ = 5574 (can be different during series calculation)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;I tried to solve a series equations A*X = B and the matrix A is real unsymmetric but has the same sparsity pattern. I decided to solve the system first time using IPHASE = 13 and return the IPERM(N) (IPARM(5) = 2) for future use. In the following calls I set IPHASE = 23 to skip the symbolic factorization step by setting IPARM(5) = 1 to use the IPERM(N) stored at the first step. The parallel option is used.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;However, I didn't see any improvement comparing with the solver I used before which is coming from the Fortran numerical recipe. I was wondering if there is anything inappropriate with the IPARM initialization?&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;      MTYPE = 11
      IPT(1:64) = 0
      IPARM(1:64) = 0
      IPARM(1) = 1   !USE VALUES SUPPLIED BY USER
      IPARM(2) = 3   !USE OPENMP VERSION OF NESTED ALGORITHM
      IPARM(5) = 2   !PARDISO RETURNS THE PERMUTATION VECTOR COMPUTED AT PHASE 1
      IPARM(8) = 1   !INTERATIVE REFINEMENT STEP
      IPARM(10) = 13 !PIVOTING PERTURBATION
      IPARM(11) = 1  !SCALING
      IPARM(13) = 1  !IMPROVED ACCURACY USING NON-SYMMETRIC WEIGHTED MATCHING
      IPARM(18) = 1  !DISABLE REPORTING
      IPARM(19) = 1  !DO NOT REPORT MFLOPS
      IPARM(24) = 1  !PARALLE FACTORIZATION
      MAXFCT = 1
      MNUM = 1
      IERROR = 0
      MSGLVL = 0  &lt;/PRE&gt;

&lt;P&gt;Any suggestions would be very appreciated.&lt;/P&gt;

&lt;P&gt;This is the piece of code I am calling for solving the series A*X= B&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;      IF(ISYS.EQ.1)THEN
      IPHASE = 13
C     ..... NUMERICAL FACTORIATION AND SOLUTION ..... 
      ELSE     
      IPARM(5) = 1    !USE EXTERNAL PERMUTATION VECTOR
      IPHASE = 23     !NUMERICAL FACTORIZATION
      ENDIF      
      CALL PARDISO(IPT,MAXFCT,MNUM,MTYPE,IPHASE,N,A,IRWM,ICLM,
     1 IPERM,NRHS,IPARM,MSGLVL,RHS,X,IERROR)
          IF(IERROR.EQ.0)THEN
          ISYS = 2
          ICNT = 0
          ENDIF       
          IF(IERROR.LT.0.AND.ICNT.LT.1)THEN
          ISYS = 1
          ICNT = ICNT+1
&amp;nbsp;         &lt;SPAN style="font-size: 13.008px; line-height: 19.512px;"&gt;IPARM(5) = 2&lt;/SPAN&gt;&lt;/PRE&gt;

&lt;PRE class="brush:fortran;"&gt;          RETURN
          ENDIF
          IF(IERROR.LT.0.AND.ICNT.EQ.1)THEN
          WRITE(6,2200)IERROR,IMATX,ISYS
          WRITE(6,*)IERROR,IMATX,ISYS
          PAUSE
          STOP
          ENDIF
 2200 FORMAT(' ERROR MESSAGE FROM PARLELSL',/,5X,'IFLAG',I5,2X,'IMATX',
     +    I5,2X,'ISYS',I5)&lt;/PRE&gt;

&lt;P&gt;I have to mention that the matrix A is in triplet format, I have to write a sorting subroutine to reorder the matrix every time to be CSR format. I don't know how to measure the cpu time spent on this sorting procedure.&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;      SUBROUTINE COOCSR00(N,NZ,A,IRW,ICL,A2,IRWM,ICLM)
      IMPLICIT REAL*8(A-H,O-Z)
      DIMENSION A(*),IRW(*),ICL(*),IRWM(*),ICLM(*)
      DIMENSION A1(NZ),IRW1(NZ),ICL1(NZ),A2(NZ)  
C     .... THIS SUBROUTINE IS USED TO CHANGE THE TRIPLET FORMAT TO COMPRESSED ROW FORMAT ....      
C     .... COPY THE INITIAL INPUT DATA ....
      A1(1:NZ) = A(1:NZ)
      IRW1(1:NZ) = IRW(1:NZ)
      ICL1(1:NZ) = ICL(1:NZ)
C     .... SORT THE TRIPLET MATRIX BY COLUMN .... 
      CALL ST_SORT_A(NZ,IRW1,ICL1,A1)
C     .... CONVER THE ST FORMAT TO CSR FORMAT       
      CALL COOCSR01(N,NZ,A1,IRW1,ICL1,A2,ICLM,IRWM)             
      RETURN
      END&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 18 Feb 2016 20:35:18 GMT</pubDate>
    <dc:creator>Liang_W_1</dc:creator>
    <dc:date>2016-02-18T20:35:18Z</dc:date>
    <item>
      <title>PARDISO performance</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/PARDISO-performance/m-p/1078325#M22678</link>
      <description>&lt;P&gt;Hi, All&lt;/P&gt;

&lt;P&gt;IDE: Microsoft parallel studio 2010 &amp;nbsp; &lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Complier: Intel Fortran &amp;nbsp;Processor: Core i5-2400 x64(4 threads) &amp;nbsp; MKL library version: 10.3 update 7&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Problem type: real unsymmetric N = 2682 NNZ = 5574 (can be different during series calculation)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;I tried to solve a series equations A*X = B and the matrix A is real unsymmetric but has the same sparsity pattern. I decided to solve the system first time using IPHASE = 13 and return the IPERM(N) (IPARM(5) = 2) for future use. In the following calls I set IPHASE = 23 to skip the symbolic factorization step by setting IPARM(5) = 1 to use the IPERM(N) stored at the first step. The parallel option is used.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;However, I didn't see any improvement comparing with the solver I used before which is coming from the Fortran numerical recipe. I was wondering if there is anything inappropriate with the IPARM initialization?&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;      MTYPE = 11
      IPT(1:64) = 0
      IPARM(1:64) = 0
      IPARM(1) = 1   !USE VALUES SUPPLIED BY USER
      IPARM(2) = 3   !USE OPENMP VERSION OF NESTED ALGORITHM
      IPARM(5) = 2   !PARDISO RETURNS THE PERMUTATION VECTOR COMPUTED AT PHASE 1
      IPARM(8) = 1   !INTERATIVE REFINEMENT STEP
      IPARM(10) = 13 !PIVOTING PERTURBATION
      IPARM(11) = 1  !SCALING
      IPARM(13) = 1  !IMPROVED ACCURACY USING NON-SYMMETRIC WEIGHTED MATCHING
      IPARM(18) = 1  !DISABLE REPORTING
      IPARM(19) = 1  !DO NOT REPORT MFLOPS
      IPARM(24) = 1  !PARALLE FACTORIZATION
      MAXFCT = 1
      MNUM = 1
      IERROR = 0
      MSGLVL = 0  &lt;/PRE&gt;

&lt;P&gt;Any suggestions would be very appreciated.&lt;/P&gt;

&lt;P&gt;This is the piece of code I am calling for solving the series A*X= B&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;      IF(ISYS.EQ.1)THEN
      IPHASE = 13
C     ..... NUMERICAL FACTORIATION AND SOLUTION ..... 
      ELSE     
      IPARM(5) = 1    !USE EXTERNAL PERMUTATION VECTOR
      IPHASE = 23     !NUMERICAL FACTORIZATION
      ENDIF      
      CALL PARDISO(IPT,MAXFCT,MNUM,MTYPE,IPHASE,N,A,IRWM,ICLM,
     1 IPERM,NRHS,IPARM,MSGLVL,RHS,X,IERROR)
          IF(IERROR.EQ.0)THEN
          ISYS = 2
          ICNT = 0
          ENDIF       
          IF(IERROR.LT.0.AND.ICNT.LT.1)THEN
          ISYS = 1
          ICNT = ICNT+1
&amp;nbsp;         &lt;SPAN style="font-size: 13.008px; line-height: 19.512px;"&gt;IPARM(5) = 2&lt;/SPAN&gt;&lt;/PRE&gt;

&lt;PRE class="brush:fortran;"&gt;          RETURN
          ENDIF
          IF(IERROR.LT.0.AND.ICNT.EQ.1)THEN
          WRITE(6,2200)IERROR,IMATX,ISYS
          WRITE(6,*)IERROR,IMATX,ISYS
          PAUSE
          STOP
          ENDIF
 2200 FORMAT(' ERROR MESSAGE FROM PARLELSL',/,5X,'IFLAG',I5,2X,'IMATX',
     +    I5,2X,'ISYS',I5)&lt;/PRE&gt;

&lt;P&gt;I have to mention that the matrix A is in triplet format, I have to write a sorting subroutine to reorder the matrix every time to be CSR format. I don't know how to measure the cpu time spent on this sorting procedure.&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;      SUBROUTINE COOCSR00(N,NZ,A,IRW,ICL,A2,IRWM,ICLM)
      IMPLICIT REAL*8(A-H,O-Z)
      DIMENSION A(*),IRW(*),ICL(*),IRWM(*),ICLM(*)
      DIMENSION A1(NZ),IRW1(NZ),ICL1(NZ),A2(NZ)  
C     .... THIS SUBROUTINE IS USED TO CHANGE THE TRIPLET FORMAT TO COMPRESSED ROW FORMAT ....      
C     .... COPY THE INITIAL INPUT DATA ....
      A1(1:NZ) = A(1:NZ)
      IRW1(1:NZ) = IRW(1:NZ)
      ICL1(1:NZ) = ICL(1:NZ)
C     .... SORT THE TRIPLET MATRIX BY COLUMN .... 
      CALL ST_SORT_A(NZ,IRW1,ICL1,A1)
C     .... CONVER THE ST FORMAT TO CSR FORMAT       
      CALL COOCSR01(N,NZ,A1,IRW1,ICL1,A2,ICLM,IRWM)             
      RETURN
      END&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 18 Feb 2016 20:35:18 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/PARDISO-performance/m-p/1078325#M22678</guid>
      <dc:creator>Liang_W_1</dc:creator>
      <dc:date>2016-02-18T20:35:18Z</dc:date>
    </item>
  </channel>
</rss>

