diff options
author | julie <julielangou@users.noreply.github.com> | 2014-02-18 16:47:10 +0000 |
---|---|---|
committer | julie <julielangou@users.noreply.github.com> | 2014-02-18 16:47:10 +0000 |
commit | a9ffa9a1812fa42e314401a9433331696701f8ed (patch) | |
tree | 04cacc80876396095584340d40db7cede485b578 /lapacke/src/lapacke_ztrtrs_work.c | |
parent | 149087fffddee6b45aa647a505d82137eaeca281 (diff) | |
download | lapack-a9ffa9a1812fa42e314401a9433331696701f8ed.tar.gz lapack-a9ffa9a1812fa42e314401a9433331696701f8ed.tar.bz2 lapack-a9ffa9a1812fa42e314401a9433331696701f8ed.zip |
INTEGRATED CHANGES PROVIDED BY INTEL TEAM FOR LAPACKE -- SEE Eugene Chereshnev email on Feb 18th
--> THANK YO INTEL <--
We performed auto-replacement matrix_order -> matrix_layout in the LAPACKE C Interface.
Also we applied several bug fixes which were presented on our side and added two LAPACKE interfaces for
function LAPACK_stpqrt which weren't represented on your side (although interfaces for d/c/z/pqrt were).
All changes are reflected in the archive in attachment (only modified files in the archive). All changes were performed for revision 1471.
Summary of changes:
1. Files:
lapacke_stprfb.c
lapacke_dtprfb.c
lapacke_ctprfb.c
lapacke_ztprfb.c
lapacke_stprfb_work.c
lapacke_dtprfb_work.c
lapacke_ctprfb_work.c
lapacke_ztprfb_work.c
lapacke.h
Expression MAX(1,ldwork)*MAX(n,k) was replaced by 'work_size'. It's not a bug but apparently 'work_size' is right expression in this place.
Also in functions lapacke_(c/z)tprfb type of 'work' array was changed from float/double to
lapack_complex_float/lapack_complex_double. Array 'work' is passed to lapacke_(c/z)tprfb_work and it calls
LAPACK_(c/z)tprfb (and passes array 'work') but LAPACK_(c/z)tprfb has argument 'work' of complex type:
SRC/ctprfb.f:
*> WORK is COMPLEX array, dimension
*> (LDWORK,N) if SIDE = 'L',
*> (LDWORK,K) if SIDE = 'R'.
and SRC/ztprfb.f:
*> WORK is COMPLEX*16 array, dimension
*> (LDWORK,N) if SIDE = 'L',
*> (LDWORK,K) if SIDE = 'R'.
Types of 'work' array in lapacke.h for LAPACK_(c/z)tprfb are float/double so they aren't correct.
The archive includes changes in lapacke.h and source files:
types of 'work' array in LAPACK_(c/z)tprfb: float/double -> lapack_complex_float/lapack_complex_double
types of 'work' array in LAPACKE_(c/z)tprfb_work: float/double -> lapack_complex_float/lapack_complex_double
In a similar way types of allocated 'work' arrays in LAPACKE_(c/z)tprfb were replaced.
Also you can see here why MAX(1,ldwork)*MAX(n,k) isn't fully correct expression for work_size.
2. Files:
lapacke_cuncsd.c
lapacke_dorcsd.c
lapacke_sorcsd.c
lapacke_zuncsd.c
From documentation of LAPACK_cuncsd (for other three LAPACK functions IWORK must have same size):
*> IWORK is INTEGER array, dimension (M-MIN(P,M-P,Q,M-Q))
So it's not correct here to allocate working array with MAX(1,m-q) size.
Changes:
lapack_int r;
r=MIN(p,m-p);
r=MIN(r,q);
r=MIN(r,m-q);
MAX(1,m-q) -> MAX(1,m-r)
3. Files:
lapacke_cgbsvxx_work.c
lapacke_cgesvxx_work.c
lapacke_chesvxx_work.c
lapacke_cposvxx_work.c
lapacke_csysvxx_work.c
lapacke_dgbsvxx_work.c
lapacke_dgesvxx_work.c
lapacke_dposvxx_work.c
lapacke_dsysvxx_work.c
lapacke_sgbsvxx_work.c
lapacke_sgesvxx_work.c
lapacke_sposvxx_work.c
lapacke_ssysvxx_work.c
lapacke_zgbsvxx_work.c
lapacke_zgesvxx_work.c
lapacke_zhesvxx_work.c
lapacke_zposvxx_work.c
lapacke_zsysvxx_work.c
Functions doesn't perform right transposition for 'err_bnds_norm' and 'err_bnds_comp' matrices:
From documentation of these functions:
*> ERR_BNDS_NORM is (SINGLE/DOUBLE) PRECISION array, dimension (NRHS, N_ERR_BNDS)
*> ERR_BNDS_COMP is (SINGLE/DOUBLE) PRECISION array, dimension (NRHS, N_ERR_BNDS)
So for interface functions right 'lda' for 'err_bnds_norm' and 'err_bnds_comp' matrices is 'n_err_bnds' rather than 'nhrs' in the case of LAPACK_ROW_MAJOR.
4. Files:
lapacke_stpqrt.c
lapacke_stpqrt_work.c
lapacke/src/Makefile
lapacke/src/CMakeLists.txt
Interfaces for LAPACK_spqrt were added: lapacke_stpqrt.c and lapacke_stpqrt_work.c and appropriate changes were performed in Makefile and CMakeLists.txt.
Declaration of LAPACK_spqrt was added to lapacke.h.
Diffstat (limited to 'lapacke/src/lapacke_ztrtrs_work.c')
-rw-r--r-- | lapacke/src/lapacke_ztrtrs_work.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/lapacke/src/lapacke_ztrtrs_work.c b/lapacke/src/lapacke_ztrtrs_work.c index 176c60c2..cbba789f 100644 --- a/lapacke/src/lapacke_ztrtrs_work.c +++ b/lapacke/src/lapacke_ztrtrs_work.c @@ -1,5 +1,5 @@ /***************************************************************************** - Copyright (c) 2011, Intel Corp. + Copyright (c) 2014, Intel Corp. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -33,20 +33,20 @@ #include "lapacke_utils.h" -lapack_int LAPACKE_ztrtrs_work( int matrix_order, char uplo, char trans, +lapack_int LAPACKE_ztrtrs_work( int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double* a, lapack_int lda, lapack_complex_double* b, lapack_int ldb ) { lapack_int info = 0; - if( matrix_order == LAPACK_COL_MAJOR ) { + if( matrix_layout == LAPACK_COL_MAJOR ) { /* Call LAPACK function and adjust info */ LAPACK_ztrtrs( &uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, &info ); if( info < 0 ) { info = info - 1; } - } else if( matrix_order == LAPACK_ROW_MAJOR ) { + } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,n); lapack_int ldb_t = MAX(1,n); lapack_complex_double* a_t = NULL; @@ -77,8 +77,8 @@ lapack_int LAPACKE_ztrtrs_work( int matrix_order, char uplo, char trans, goto exit_level_1; } /* Transpose input matrices */ - LAPACKE_ztr_trans( matrix_order, uplo, diag, n, a, lda, a_t, lda_t ); - LAPACKE_zge_trans( matrix_order, n, nrhs, b, ldb, b_t, ldb_t ); + LAPACKE_ztr_trans( matrix_layout, uplo, diag, n, a, lda, a_t, lda_t ); + LAPACKE_zge_trans( matrix_layout, n, nrhs, b, ldb, b_t, ldb_t ); /* Call LAPACK function and adjust info */ LAPACK_ztrtrs( &uplo, &trans, &diag, &n, &nrhs, a_t, &lda_t, b_t, &ldb_t, &info ); |