Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

PARDISO performance

Liang_W_1
Beginner
266 Views

Hi, All

IDE: Microsoft parallel studio 2010   Complier: Intel Fortran  Processor: Core i5-2400 x64(4 threads)   MKL library version: 10.3 update 7

Problem type: real unsymmetric N = 2682 NNZ = 5574 (can be different during series calculation)

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. 

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?

      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  

Any suggestions would be very appreciated.

This is the piece of code I am calling for solving the series A*X= B

      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
          IPARM(5) = 2
          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)

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.

      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

 

0 Kudos
0 Replies
Reply