Age | Commit message (Collapse) | Author | Files | Lines |
|
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.
|
|
20th.) Thanks Nadezhda! Thanks Intel!
|
|
There are problems in LAPACKE complex lacn2 interfaces. Those functions don't have a "isgn" parmeter in LAPACK. This exists only for real interface. The problem is present in the four files of C and Z functions.
In Lapack:
SUBROUTINE ZLACN2( N, V, X, EST, KASE, ISAVE )
In Lapacke:
LAPACK_zlacn2( &n, v, x, isgn, est, kase, isave );
|
|
|
|
patch sent to lapack mailing list on Sunday July 21st
In the input parameter checking, LDZ was not checked correctly
LDZ was checked against M instead of N essentially
|
|
|
|
|
|
|
|
|
|
|
|
/* Allocate memory for working array(s) */
if( LAPACKE_lsame( norm, 'e' ) || LAPACKE_lsame( norm, 'f' ) ) {
work = (double*)LAPACKE_malloc( sizeof(double) * MAX(1,m) );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
}
}
This is wrong, it is actually the opposite. Only the inf norm needs a workspace.
Thanks Mathieu for catching this!
|
|
|
|
lapacke_utils.h
(the definition of ABS, MAX, MIN, etc...)
Those were conflicting with PLASMA internal definitions.
LAPCKE Routines are now just including lapacke_utils.h which in turn includes lapacke.h
|
|
|
|
|
|
Now we can generate dll for LAPACK and LAPACKE directly for Mingw so that FORTRAN compiler is longer needed.
Because LAPACKE contains some routines from MATGEN (for PLASMA), LAPACKE will requires the tmglib library.
Add some LAPACK 3.4.0 routines were missing in the CMAKE LAPACK build.
|
|
|
|
|
|
|
|
(Windows compiler was barking)
|
|
First commit, works on my mac! Need to see how to adapt to intel compilers and of course Windows.
LAPACKE is not built by default. Is that OK?
User need to type 'make lapackelib' to generate the lib
I add a couple of examples taken from MKL LAPACKE 'make lapacke_example'
|
|
|