ScaLAPACK Archives

[Scalapack] matrix inverse

Hello,
I have encountered the same problem that Desheng Wang reported with
PDGETRI about the incorrectly computed LIWORK value (Thank you for the fix).
I think this may point to a problem in the test driver program
TESTING/LIN/pdinvdriver.f.
I have run the "xdinv" test program with the "INV.dat" input file
enclosed below. The test ran without problem (see output below).
However, when using PDGETRI with the same parameters in another code,
after getting the value of LIWORK by making a first call with LIWORK=-1,
it crashed (segfault) in PDLAPIV (caused presumably by the problem of
the incorrect computed LIWORK value) when using the 2x1 process grid.
So it seems that the incorrect LIWORK problem is not caught by the test
driver, even though pdinvdriver.f checks if arrays are overwritten. It
seems that this check is not done properly since PDGETRI passes the
test, but fails otherwise in another application.
Should the test driver be corrected as well?
Thanks for your help.

Francois

======================================
INV.dat
======================================
'ScaLAPACK, Version 1.0, Matrix Inversion Testing input file'
'MPI machine.'
'INV.out'                       output file name (if any)
6                               device out
5                               number of matrix types (next line)
'GEN' 'UTR' 'LTR' 'UPD' 'LPD'   GEN, UTR, LTR, UPD, LPD
1                               number of problems sizes
1024 2 5 10 15 13 20 30 50              values of N
1                               number of NB's
128 2 3 4 5 6 20                        values of NB
3                               number of process grids (ordered P & Q)
1 2 1 4 2 3 8                   values of P
1 1 2 1 3 2 1                   values of Q
1.0                             threshold

===============================
Output of xdinv
===============================
SCALAPACK Matrix Inversion routines.
'MPI machine.'

Tests of the parallel real double precision Matrix Inversion routines.
The following scaled residual checks will be computed:
Inverse residual = ||inv(A)*A - I|| / (||A|| * eps * N)
The matrix A is randomly generated for each test.

An explanation of the input/output parameters follows:
TIME     : Indicates whether WALL or CPU time was used.
N        : The number of rows and columns of the matrix A.
NB       : The size of the square blocks the matrix A is split into.
P        : The number of process rows.
Q        : The number of process columns.
THRESH   : If a residual value is less than THRESH, CHECK is flagged as
PASSED.
Fct time : Time in seconds to factor the matrix, if needed.
Inv Time : Time in seconds to inverse the matrix.
MFLOPS   : Rate of execution for factor and inverse.

The following parameter values will be used:
  N      :      1024
  NB     :       128
  P      :         1     2     1
  Q      :         1     1     2
Relative machine precision (eps) is taken to be       0.111022E-15
Routines pass computational tests if scaled residual is less than   1.0000

A is a general matrix.

TIME     N  NB     P     Q Fct Time Inv Time      MFLOPS    Cond
Resid  CHECK
---- ----- --- ----- ----- -------- -------- ----------- ------- -------
------

WALL  1024 128     1     1     2.26     4.71      307.93     2.3    0.00
PASSED
WALL  1024 128     2     1     2.79     4.61      290.05     2.3    0.00
PASSED
WALL  1024 128     1     2     2.56     8.43      195.15     2.3    0.00
PASSED

A is an upper triangular matrix.

TIME     N  NB     P     Q Fct Time Inv Time      MFLOPS    Cond
Resid  CHECK
---- ----- --- ----- ----- -------- -------- ----------- ------- -------
------

WALL  1024 128     1     1     0.00     1.18      304.41     2.3    0.00
PASSED
WALL  1024 128     2     1     0.00     1.19      301.40     2.3    0.00
PASSED
WALL  1024 128     1     2     0.00     1.51      236.76     2.3    0.00
PASSED

A is a lower triangular matrix.

TIME     N  NB     P     Q Fct Time Inv Time      MFLOPS    Cond
Resid  CHECK
---- ----- --- ----- ----- -------- -------- ----------- ------- -------
------

WALL  1024 128     1     1     0.00     1.23      291.80     2.3    0.00
PASSED
WALL  1024 128     2     1     0.00     1.23      291.80     2.3    0.00
PASSED
WALL  1024 128     1     2     0.00     0.95      375.52     2.3    0.00
PASSED

A is a symmetric positive definite matrix.
Only the upper triangular part will be referenced.

TIME     N  NB     P     Q Fct Time Inv Time      MFLOPS    Cond
Resid  CHECK
---- ----- --- ----- ----- -------- -------- ----------- ------- -------
------

WALL  1024 128     1     1     0.95     2.39      322.56     2.3    0.00
PASSED
WALL  1024 128     2     1     0.77     1.49      476.03     2.3    0.00
PASSED
WALL  1024 128     1     2     1.30     3.09      244.57     2.3    0.00
PASSED

A is a symmetric positive definite matrix.
Only the lower triangular part will be referenced.

TIME     N  NB     P     Q Fct Time Inv Time      MFLOPS    Cond
Resid  CHECK
---- ----- --- ----- ----- -------- -------- ----------- ------- -------
------

WALL  1024 128     1     1     1.25     2.22      309.50     2.3    0.00
PASSED
WALL  1024 128     2     1     1.49     2.42      274.87     2.3    0.00
PASSED
WALL  1024 128     1     2     1.45     3.60      212.96     2.3    0.00
PASSED

Finished     15 tests, with the following results:
   15 tests completed and passed residual checks.
    0 tests completed and failed residual checks.
    0 tests skipped because of illegal input values.


END OF TESTS.

-- 
=================================
Francois Gygi
Professor
Department of Applied Science
University of California, Davis
One Shields Avenue
Davis, CA 95616-8254

phone: 530-752-4042
fgygi@Domain.Removed
=================================





<Prev in Thread] Current Thread [Next in Thread>


For additional information you may use the LAPACK/ScaLAPACK Forum.
Or one of the mailing lists, or