Community
cancel
Showing results for
Did you mean:
Highlighted
Beginner
12 Views

## PARDISO performance

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 Replies