Fix bug 0074
authorjulie <julielangou@users.noreply.github.com>
Wed, 9 Feb 2011 19:45:09 +0000 (19:45 +0000)
committerjulie <julielangou@users.noreply.github.com>
Wed, 9 Feb 2011 19:45:09 +0000 (19:45 +0000)
Post from Alexander Kobotov (INTEL)
In LAPACK 3.3 ?(SY/HE)SV are updated to use TRS2.
The TRS2 requires WORK(N) to operate, whereas in SV requirements for LWORK just to be >=1.
There is no any check in SV if LWORK>=N, the array WORK just passed as it is to TRS2.
So if LWORK<N a crash could occur while executing TRS2 due to overuse of allocated workspace.

I guess for the case of LWORK<N just previsous Level2 based ?(SY/HE)TRS should be used.

SRC/chesv.f
SRC/csysv.f
SRC/dsysv.f
SRC/ssysv.f
SRC/zhesv.f
SRC/zsysv.f

index 4e41de7bbf654898dd756060539d5d865d925a82..7fe3efcd562abd8feab10ee0fe377991ff13f71e 100644 (file)
@@ -4,7 +4,8 @@
 *  -- LAPACK driver routine (version 3.3.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-*     November 2010
+*     February 2011
+* @generated c
 *
 *     .. Scalar Arguments ..
       CHARACTER          UPLO
@@ -27,7 +28,7 @@
 *     A = U * D * U**H,  if UPLO = 'U', or
 *     A = L * D * L**H,  if UPLO = 'L',
 *  where U (or L) is a product of permutation and unit upper (lower)
-*  triangular matrices, and D is Hermitian and block diagonal with 
+*  triangular matrices, and D is Hermitian and block diagonal with
 *  1-by-1 and 2-by-2 diagonal blocks.  The factored form of A is then
 *  used to solve the system of equations A * X = B.
 *
@@ -88,6 +89,8 @@
 *          The length of WORK.  LWORK >= 1, and for best performance
 *          LWORK >= max(1,N*NB), where NB is the optimal blocksize for
 *          CHETRF.
+*          for LWORK < N, TRS will be done with Level BLAS 2
+*          for LWORK >= N, TRS will be done with Level BLAS 3
 *
 *          If LWORK = -1, then a workspace query is assumed; the routine
 *          only calculates the optimal size of the WORK array, returns
 *     .. External Functions ..
       LOGICAL            LSAME
       INTEGER            ILAENV
-      EXTERNAL           ILAENV, LSAME
+      EXTERNAL           LSAME, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           CHETRF, CHETRS2, XERBLA
+      EXTERNAL           XERBLA, CHETRF, ZHETRS, CHETRS2
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          MAX
 *
 *        Solve the system A*X = B, overwriting B with X.
 *
-         CALL CHETRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, INFO )
+         IF ( LWORK.LT.N ) THEN
+*
+*        Solve with TRS ( Use Level BLAS 2)
+*
+            CALL ZHETRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
+*
+         ELSE
+*
+*        Solve with TRS2 ( Use Level BLAS 3)
+*
+            CALL CHETRS2( UPLO,N,NRHS,A,LDA,IPIV,B,LDB,WORK,INFO )
+*
+         END IF
 *
       END IF
 *
index 1c97a79d35514da3937c40a270ae1468d0053cb9..26c761b5001a20cd8e42520aacaa1af131265f32 100644 (file)
@@ -1,10 +1,11 @@
       SUBROUTINE CSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
      $                  LWORK, INFO )
 *
-*  -- LAPACK driver routine (version 3.2.2) --
+*  -- LAPACK driver routine (version 3.3.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-*     June 2010
+*     February 2011
+* @generated c
 *
 *     .. Scalar Arguments ..
       CHARACTER          UPLO
@@ -27,7 +28,7 @@
 *     A = U * D * U**T,  if UPLO = 'U', or
 *     A = L * D * L**T,  if UPLO = 'L',
 *  where U (or L) is a product of permutation and unit upper (lower)
-*  triangular matrices, and D is symmetric and block diagonal with 
+*  triangular matrices, and D is symmetric and block diagonal with
 *  1-by-1 and 2-by-2 diagonal blocks.  The factored form of A is then
 *  used to solve the system of equations A * X = B.
 *
@@ -88,6 +89,8 @@
 *          The length of WORK.  LWORK >= 1, and for best performance
 *          LWORK >= max(1,N*NB), where NB is the optimal blocksize for
 *          CSYTRF.
+*          for LWORK < N, TRS will be done with Level BLAS 2
+*          for LWORK >= N, TRS will be done with Level BLAS 3
 *
 *          If LWORK = -1, then a workspace query is assumed; the routine
 *          only calculates the optimal size of the WORK array, returns
 *     .. External Functions ..
       LOGICAL            LSAME
       INTEGER            ILAENV
-      EXTERNAL           ILAENV, LSAME
+      EXTERNAL           LSAME, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           CSYTRF, CSYTRS2, XERBLA
+      EXTERNAL           XERBLA, CSYTRF, CSYTRS, CSYTRS2
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          MAX
 *
 *        Solve the system A*X = B, overwriting B with X.
 *
-         CALL CSYTRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, INFO )
+         IF ( LWORK.LT.N ) THEN
+*
+*        Solve with TRS ( Use Level BLAS 2)
+*
+            CALL CSYTRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
+*
+         ELSE
+*
+*        Solve with TRS2 ( Use Level BLAS 3)
+*
+            CALL CSYTRS2( UPLO,N,NRHS,A,LDA,IPIV,B,LDB,WORK,INFO )
+*
+         END IF
 *
       END IF
 *
index 1b20643f02b16bbf7de3e84e74a560c4b43431e4..2c8a43e55dcc1d8e7a58724b9171c3a14fab3bf5 100644 (file)
@@ -1,10 +1,11 @@
       SUBROUTINE DSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
      $                  LWORK, INFO )
 *
-*  -- LAPACK driver routine (version 3.2.2) --
+*  -- LAPACK driver routine (version 3.3.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-*     May 2010
+*     February 2011
+* @generated d
 *
 *     .. Scalar Arguments ..
       CHARACTER          UPLO
@@ -88,6 +89,8 @@
 *          The length of WORK.  LWORK >= 1, and for best performance
 *          LWORK >= max(1,N*NB), where NB is the optimal blocksize for
 *          DSYTRF.
+*          for LWORK < N, TRS will be done with Level BLAS 2
+*          for LWORK >= N, TRS will be done with Level BLAS 3
 *
 *          If LWORK = -1, then a workspace query is assumed; the routine
 *          only calculates the optimal size of the WORK array, returns
       EXTERNAL           LSAME, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           DSYTRF, DSYTRS2, XERBLA
+      EXTERNAL           XERBLA, DSYTRF, DSYTRS, DSYTRS2
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          MAX
       CALL DSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
       IF( INFO.EQ.0 ) THEN
 *
-*     Solve the system A*X = B, overwriting B with X.
+*        Solve the system A*X = B, overwriting B with X.
 *
-      CALL DSYTRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, INFO )
+         IF ( LWORK.LT.N ) THEN
+*
+*        Solve with TRS ( Use Level BLAS 2)
+*
+            CALL DSYTRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
+*
+         ELSE
+*
+*        Solve with TRS2 ( Use Level BLAS 3)
+*
+            CALL DSYTRS2( UPLO,N,NRHS,A,LDA,IPIV,B,LDB,WORK,INFO )
+*
+         END IF
 *
       END IF
 *
index 0adcb5da19a3c8284cd198bd3f98761335d2421f..915fcae72e52ee14480134855543a808ab805405 100644 (file)
@@ -1,10 +1,11 @@
       SUBROUTINE SSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
      $                  LWORK, INFO )
 *
-*  -- LAPACK driver routine (version 3.2.2) --
+*  -- LAPACK driver routine (version 3.3.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-*     May 2010
+*     February 2011
+* @generated s
 *
 *     .. Scalar Arguments ..
       CHARACTER          UPLO
@@ -27,7 +28,7 @@
 *     A = U * D * U**T,  if UPLO = 'U', or
 *     A = L * D * L**T,  if UPLO = 'L',
 *  where U (or L) is a product of permutation and unit upper (lower)
-*  triangular matrices, and D is symmetric and block diagonal with 
+*  triangular matrices, and D is symmetric and block diagonal with
 *  1-by-1 and 2-by-2 diagonal blocks.  The factored form of A is then
 *  used to solve the system of equations A * X = B.
 *
@@ -88,6 +89,8 @@
 *          The length of WORK.  LWORK >= 1, and for best performance
 *          LWORK >= max(1,N*NB), where NB is the optimal blocksize for
 *          SSYTRF.
+*          for LWORK < N, TRS will be done with Level BLAS 2
+*          for LWORK >= N, TRS will be done with Level BLAS 3
 *
 *          If LWORK = -1, then a workspace query is assumed; the routine
 *          only calculates the optimal size of the WORK array, returns
 *     .. External Functions ..
       LOGICAL            LSAME
       INTEGER            ILAENV
-      EXTERNAL           ILAENV, LSAME
+      EXTERNAL           LSAME, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           SSYTRF, SSYTRS2, XERBLA
+      EXTERNAL           XERBLA, SSYTRF, SSYTRS, SSYTRS2
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          MAX
 *
 *        Solve the system A*X = B, overwriting B with X.
 *
-         CALL SSYTRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, INFO )
+         IF ( LWORK.LT.N ) THEN
+*
+*        Solve with TRS ( Use Level BLAS 2)
+*
+            CALL SSYTRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
+*
+         ELSE
+*
+*        Solve with TRS2 ( Use Level BLAS 3)
+*
+            CALL SSYTRS2( UPLO,N,NRHS,A,LDA,IPIV,B,LDB,WORK,INFO )
+*
+         END IF
 *
       END IF
 *
index 6404a3d852e3b477a5c7fa98fb9a8ddb34de3fd5..ed6a06fcfeeeacf8a5b21c81950cffbc31ab41de 100644 (file)
@@ -4,7 +4,8 @@
 *  -- LAPACK driver routine (version 3.3.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-*     November 2010
+*     February 2011
+* @precisions normal z -> c
 *
 *     .. Scalar Arguments ..
       CHARACTER          UPLO
@@ -88,6 +89,8 @@
 *          The length of WORK.  LWORK >= 1, and for best performance
 *          LWORK >= max(1,N*NB), where NB is the optimal blocksize for
 *          ZHETRF.
+*          for LWORK < N, TRS will be done with Level BLAS 2
+*          for LWORK >= N, TRS will be done with Level BLAS 3
 *
 *          If LWORK = -1, then a workspace query is assumed; the routine
 *          only calculates the optimal size of the WORK array, returns
       EXTERNAL           LSAME, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           XERBLA, ZHETRF, ZHETRS2
+      EXTERNAL           XERBLA, ZHETRF, ZHETRS, ZHETRS2
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          MAX
 *
 *        Solve the system A*X = B, overwriting B with X.
 *
-         CALL ZHETRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, INFO )
+         IF ( LWORK.LT.N ) THEN
+*
+*        Solve with TRS ( Use Level BLAS 2)
+*
+            CALL ZHETRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
+*
+         ELSE
+*
+*        Solve with TRS2 ( Use Level BLAS 3)
+*
+            CALL ZHETRS2( UPLO,N,NRHS,A,LDA,IPIV,B,LDB,WORK,INFO )
+*
+         END IF
 *
       END IF
 *
index 229e4cb7d4f914f1384db9a110882d7bbdd1f4a6..f1f04a7836adf189b0ba5a7622a5038d43ee4078 100644 (file)
@@ -1,10 +1,11 @@
       SUBROUTINE ZSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
      $                  LWORK, INFO )
 *
-*  -- LAPACK driver routine (version 3.2.2) --
+*  -- LAPACK driver routine (version 3.3.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-*     June 2010
+*     February 2011
+* @precisions normal z -> s d c
 *
 *     .. Scalar Arguments ..
       CHARACTER          UPLO
@@ -88,6 +89,8 @@
 *          The length of WORK.  LWORK >= 1, and for best performance
 *          LWORK >= max(1,N*NB), where NB is the optimal blocksize for
 *          ZSYTRF.
+*          for LWORK < N, TRS will be done with Level BLAS 2
+*          for LWORK >= N, TRS will be done with Level BLAS 3
 *
 *          If LWORK = -1, then a workspace query is assumed; the routine
 *          only calculates the optimal size of the WORK array, returns
       EXTERNAL           LSAME, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           XERBLA, ZSYTRF, ZSYTRS2
+      EXTERNAL           XERBLA, ZSYTRF, ZSYTRS, ZSYTRS2
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          MAX
 *
 *        Solve the system A*X = B, overwriting B with X.
 *
-         CALL ZSYTRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, INFO )
+         IF ( LWORK.LT.N ) THEN
+*
+*        Solve with TRS ( Use Level BLAS 2)
+*
+            CALL ZSYTRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
+*
+         ELSE
+*
+*        Solve with TRS2 ( Use Level BLAS 3)
+*
+            CALL ZSYTRS2( UPLO,N,NRHS,A,LDA,IPIV,B,LDB,WORK,INFO )
+*
+         END IF
 *
       END IF
 *