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.
|
|
Provide CMake packages for both LAPACK and LAPACKE
Teach "lapack-config.cmake" to provide variables
LAPACK_blas_LIBRARIES
LAPACK_lapack_LIBRARIES
that contain either the target names when using the reference
implementation or the system libraries found for them.
Configure a "lapacke-config.cmake" file for the build and install
trees to package LAPACKE. Teach it to load the LAPACK package
installed with it. Provide variables
LAPACKE_INCLUDE_DIRS
LAPACKE_LIBRARIES
containing the header file search path for lapacke headers
and the list of lapacke library targets.
This requires CMake 2.8.10 to separate the installation export
for the lapacke library from the other targets.
|
|
|
|
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!
|
|
The patch has been modified a little by Julie as there were some minors problems.
This also fix the BUILD_TESTING=OFF option problem reported by Marcin on lapack mailing list.
From Sébastien:
Here is a patch to compile lapacke with CMake using an already
existing optimized lapack library instead of forcing the build of the
included one in the tar ball. It applies to the latest lapack svn
trunk.
|
|
|
|
|
|
|
|
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
|
|
|
|
CMAKE now can find the Fortran Mangling automatically (no need of extra flags)
with the module FortranCInterface and create the necessary header.
Needed to make some adjustements with the routine name.
Added a file lapacke_mangling_with_flags.h that is used with Makefile build
lapacke.h now requires lapacke_mangling.h
- the file is created by CMAKE if CMAKE is used
- the file is copied from lapacke_mangling_with_flags if Makefile is used
|
|
routines needed in plasma (by default regular LAPACKE with only LAPACK routines
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
now runs fine
|
|
|
|
|
|
(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'
|
|
|
|
|