| @@ -76,7 +76,7 @@ lapack_int LAPACKE_sgeesx( int matrix_layout, char jobvs, char sort, | |||
| if( info != 0 ) { | |||
| goto exit_level_1; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| if( LAPACKE_lsame( sense, 'b' ) || LAPACKE_lsame( sense, 'v' ) ) { | |||
| @@ -74,7 +74,6 @@ lapack_int LAPACKE_sgejsv( int matrix_layout, char joba, char jobu, char jobv, | |||
| lapack_int* iwork = NULL; | |||
| float* work = NULL; | |||
| lapack_int i; | |||
| lapack_int nu, nv; | |||
| if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | |||
| LAPACKE_xerbla( "LAPACKE_sgejsv", -1 ); | |||
| return -1; | |||
| @@ -82,8 +81,6 @@ lapack_int LAPACKE_sgejsv( int matrix_layout, char joba, char jobu, char jobv, | |||
| #ifndef LAPACK_DISABLE_NAN_CHECK | |||
| if( LAPACKE_get_nancheck() ) { | |||
| /* Optionally check input matrices for NaNs */ | |||
| nu = LAPACKE_lsame( jobu, 'n' ) ? 1 : m; | |||
| nv = LAPACKE_lsame( jobv, 'n' ) ? 1 : n; | |||
| if( LAPACKE_sge_nancheck( matrix_layout, m, n, a, lda ) ) { | |||
| return -10; | |||
| } | |||
| @@ -70,7 +70,7 @@ lapack_int LAPACKE_sgelsd( int matrix_layout, lapack_int m, lapack_int n, | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -0,0 +1,106 @@ | |||
| /***************************************************************************** | |||
| Copyright (c) 2014, Intel Corp. | |||
| All rights reserved. | |||
| Redistribution and use in source and binary forms, with or without | |||
| modification, are permitted provided that the following conditions are met: | |||
| * Redistributions of source code must retain the above copyright notice, | |||
| this list of conditions and the following disclaimer. | |||
| * Redistributions in binary form must reproduce the above copyright | |||
| notice, this list of conditions and the following disclaimer in the | |||
| documentation and/or other materials provided with the distribution. | |||
| * Neither the name of Intel Corporation nor the names of its contributors | |||
| may be used to endorse or promote products derived from this software | |||
| without specific prior written permission. | |||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
| ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |||
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||
| CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
| ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | |||
| THE POSSIBILITY OF SUCH DAMAGE. | |||
| ***************************************************************************** | |||
| * Contents: Native high-level C interface to LAPACK function sgesvdq | |||
| * Author: Intel Corporation | |||
| * Generated November 2018 | |||
| *****************************************************************************/ | |||
| #include "lapacke_utils.h" | |||
| lapack_int LAPACKE_sgesvdq( int matrix_layout, char joba, char jobp, | |||
| char jobr, char jobu, char jobv, | |||
| lapack_int m, lapack_int n, float* a, | |||
| lapack_int lda, float* s, float* u, lapack_int ldu, | |||
| float* v, lapack_int ldv, lapack_int* numrank) | |||
| { | |||
| lapack_int info = 0; | |||
| lapack_int liwork = -1; | |||
| lapack_int* iwork = NULL; | |||
| lapack_int iwork_query; | |||
| lapack_int lwork = -1; | |||
| float* work = NULL; | |||
| float work_query; | |||
| lapack_int lrwork = -1; | |||
| float* rwork = NULL; | |||
| float rwork_query; | |||
| lapack_int i; | |||
| if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | |||
| LAPACKE_xerbla( "LAPACKE_sgesvdq", -1 ); | |||
| return -1; | |||
| } | |||
| #ifndef LAPACK_DISABLE_NAN_CHECK | |||
| if( LAPACKE_get_nancheck() ) { | |||
| /* Optionally check input matrices for NaNs */ | |||
| if( LAPACKE_sge_nancheck( matrix_layout, m, n, a, lda ) ) { | |||
| return -6; | |||
| } | |||
| } | |||
| #endif | |||
| /* Query optimal working array(s) size */ | |||
| info = LAPACKE_sgesvdq_work( matrix_layout, joba, jobp, jobr, jobu, jobv, | |||
| m, n, a, lda, s, u, ldu, v, ldv, numrank, | |||
| &iwork_query, liwork, &work_query, lwork, | |||
| &rwork_query, lrwork ); | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| lrwork = (lapack_int)rwork_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| if( iwork == NULL ) { | |||
| info = LAPACK_WORK_MEMORY_ERROR; | |||
| goto exit_level_0; | |||
| } | |||
| work = (float*)LAPACKE_malloc( sizeof(float) * lwork ); | |||
| if( work == NULL ) { | |||
| info = LAPACK_WORK_MEMORY_ERROR; | |||
| goto exit_level_0; | |||
| } | |||
| rwork = (float*)LAPACKE_malloc( sizeof(float) * lrwork ); | |||
| if( rwork == NULL ) { | |||
| info = LAPACK_WORK_MEMORY_ERROR; | |||
| goto exit_level_0; | |||
| } | |||
| /* Call middle-level interface */ | |||
| info = LAPACKE_sgesvdq_work( matrix_layout, joba, jobp, jobr, jobu, jobv, | |||
| m, n, a, lda, s, u, ldu, v, ldv, numrank, | |||
| iwork, liwork, work, lwork, rwork, lrwork ); | |||
| /* Release memory and exit */ | |||
| LAPACKE_free( iwork ); | |||
| LAPACKE_free( work ); | |||
| LAPACKE_free( rwork ); | |||
| exit_level_0: | |||
| if( info == LAPACK_WORK_MEMORY_ERROR ) { | |||
| LAPACKE_xerbla( "LAPACKE_sgesvdq", info ); | |||
| } | |||
| return info; | |||
| } | |||
| @@ -0,0 +1,148 @@ | |||
| /***************************************************************************** | |||
| Copyright (c) 2014, Intel Corp. | |||
| All rights reserved. | |||
| Redistribution and use in source and binary forms, with or without | |||
| modification, are permitted provided that the following conditions are met: | |||
| * Redistributions of source code must retain the above copyright notice, | |||
| this list of conditions and the following disclaimer. | |||
| * Redistributions in binary form must reproduce the above copyright | |||
| notice, this list of conditions and the following disclaimer in the | |||
| documentation and/or other materials provided with the distribution. | |||
| * Neither the name of Intel Corporation nor the names of its contributors | |||
| may be used to endorse or promote products derived from this software | |||
| without specific prior written permission. | |||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
| ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |||
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||
| CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
| ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | |||
| THE POSSIBILITY OF SUCH DAMAGE. | |||
| ***************************************************************************** | |||
| * Contents: Native middle-level C interface to LAPACK function sgesvdq | |||
| * Author: Intel Corporation | |||
| * Generated November 2015 | |||
| *****************************************************************************/ | |||
| #include "lapacke_utils.h" | |||
| lapack_int LAPACKE_sgesvdq_work( int matrix_layout, char joba, char jobp, | |||
| char jobr, char jobu, char jobv, | |||
| lapack_int m, lapack_int n, float* a, | |||
| lapack_int lda, float* s, float* u, lapack_int ldu, | |||
| float* v, lapack_int ldv, lapack_int* numrank, | |||
| lapack_int* iwork, lapack_int liwork, | |||
| float* work, lapack_int lwork, | |||
| float* rwork, lapack_int lrwork ) | |||
| { | |||
| lapack_int info = 0; | |||
| if( matrix_layout == LAPACK_COL_MAJOR ) { | |||
| /* Call LAPACK function and adjust info */ | |||
| LAPACK_sgesvdq( &joba, &jobp, &jobr, &jobu, &jobv, &m, &n, a, &lda, s, u, &ldu, v, &ldv, | |||
| numrank, iwork, &liwork, work, &lwork, rwork, &lrwork, &info ); | |||
| if( info < 0 ) { | |||
| info = info - 1; | |||
| } | |||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | |||
| lapack_int nrows_u = ( LAPACKE_lsame( jobu, 'a' ) || | |||
| LAPACKE_lsame( jobu, 's' ) ) ? m : 1; | |||
| lapack_int ncols_u = LAPACKE_lsame( jobu, 'a' ) ? m : | |||
| (LAPACKE_lsame( jobu, 's' ) ? MIN(m,n) : 1); | |||
| lapack_int nrows_v = LAPACKE_lsame( jobv, 'a' ) ? n : 1; | |||
| lapack_int lda_t = MAX(1,m); | |||
| lapack_int ldu_t = MAX(1,nrows_u); | |||
| lapack_int ldv_t = MAX(1,nrows_v); | |||
| float* a_t = NULL; | |||
| float* u_t = NULL; | |||
| float* v_t = NULL; | |||
| /* Check leading dimension(s) */ | |||
| if( lda < n ) { | |||
| info = -9; | |||
| LAPACKE_xerbla( "LAPACKE_sgesvdq_work", info ); | |||
| return info; | |||
| } | |||
| if( ldu < ncols_u ) { | |||
| info = -12; | |||
| LAPACKE_xerbla( "LAPACKE_sgesvdq_work", info ); | |||
| return info; | |||
| } | |||
| if( ldv < n ) { | |||
| info = -14; | |||
| LAPACKE_xerbla( "LAPACKE_sgesvdq_work", info ); | |||
| return info; | |||
| } | |||
| /* Query optimal working array(s) size if requested */ | |||
| if( lwork == -1 ) { | |||
| LAPACK_sgesvdq( &joba, &jobp, &jobr, &jobu, &jobv, &m, &n, a, &lda_t, | |||
| s, u, &ldu_t, v, &ldv_t, numrank, iwork, &liwork, | |||
| work, &lwork, rwork, &lrwork, &info ); | |||
| return (info < 0) ? (info - 1) : info; | |||
| } | |||
| /* Allocate memory for temporary array(s) */ | |||
| a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,n) ); | |||
| if( a_t == NULL ) { | |||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | |||
| goto exit_level_0; | |||
| } | |||
| if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) { | |||
| u_t = (float*) | |||
| LAPACKE_malloc( sizeof(float) * ldu_t * MAX(1,ncols_u) ); | |||
| if( u_t == NULL ) { | |||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | |||
| goto exit_level_1; | |||
| } | |||
| } | |||
| if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) { | |||
| v_t = (float*) | |||
| LAPACKE_malloc( sizeof(float) * ldv_t * MAX(1,n) ); | |||
| if( v_t == NULL ) { | |||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | |||
| goto exit_level_2; | |||
| } | |||
| } | |||
| /* Transpose input matrices */ | |||
| LAPACKE_sge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); | |||
| /* Call LAPACK function and adjust info */ | |||
| LAPACK_sgesvdq( &joba, &jobp, &jobr, &jobu, &jobv, &m, &n, a, &lda_t, | |||
| s, u, &ldu_t, v, &ldv_t, numrank, iwork, &liwork, | |||
| work, &lwork, rwork, &lrwork, &info ); | |||
| if( info < 0 ) { | |||
| info = info - 1; | |||
| } | |||
| /* Transpose output matrices */ | |||
| LAPACKE_sge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda ); | |||
| if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) { | |||
| LAPACKE_sge_trans( LAPACK_COL_MAJOR, nrows_u, ncols_u, u_t, ldu_t, | |||
| u, ldu ); | |||
| } | |||
| if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) { | |||
| LAPACKE_sge_trans( LAPACK_COL_MAJOR, nrows_v, n, v_t, ldv_t, v, | |||
| ldv ); | |||
| } | |||
| /* Release memory and exit */ | |||
| if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) { | |||
| LAPACKE_free( v_t ); | |||
| } | |||
| exit_level_2: | |||
| if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) { | |||
| LAPACKE_free( u_t ); | |||
| } | |||
| exit_level_1: | |||
| LAPACKE_free( a_t ); | |||
| exit_level_0: | |||
| if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) { | |||
| LAPACKE_xerbla( "LAPACKE_sgesvdq_work", info ); | |||
| } | |||
| } else { | |||
| info = -1; | |||
| LAPACKE_xerbla( "LAPACKE_sgesvdq_work", info ); | |||
| } | |||
| return info; | |||
| } | |||
| @@ -82,7 +82,7 @@ lapack_int LAPACKE_sggesx( int matrix_layout, char jobvsl, char jobvsr, | |||
| if( info != 0 ) { | |||
| goto exit_level_1; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -42,12 +42,10 @@ float LAPACKE_slantr_work( int matrix_layout, char norm, char uplo, | |||
| if( matrix_layout == LAPACK_COL_MAJOR ) { | |||
| /* Call LAPACK function and adjust info */ | |||
| res = LAPACK_slantr( &norm, &uplo, &diag, &m, &n, a, &lda, work ); | |||
| if( info < 0 ) { | |||
| info = info - 1; | |||
| } | |||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | |||
| lapack_int lda_t = MAX(1,m); | |||
| float* a_t = NULL; | |||
| float* work_lapack = NULL; | |||
| /* Check leading dimension(s) */ | |||
| if( lda < n ) { | |||
| info = -8; | |||
| @@ -60,12 +58,23 @@ float LAPACKE_slantr_work( int matrix_layout, char norm, char uplo, | |||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | |||
| goto exit_level_0; | |||
| } | |||
| /* Allocate memory for work array(s) */ | |||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||
| work_lapack = (float*)LAPACKE_malloc( sizeof(float) * MAX(1,m) ); | |||
| if( work_lapack == NULL ) { | |||
| info = LAPACK_WORK_MEMORY_ERROR; | |||
| goto exit_level_1; | |||
| } | |||
| } | |||
| /* Transpose input matrices */ | |||
| LAPACKE_str_trans( matrix_layout, uplo, diag, MAX(m,n), a, lda, a_t, lda_t ); | |||
| /* Call LAPACK function and adjust info */ | |||
| res = LAPACK_slantr( &norm, &uplo, &diag, &m, &n, a_t, &lda_t, work ); | |||
| info = 0; /* LAPACK call is ok! */ | |||
| res = LAPACK_slantr( &norm, &uplo, &diag, &m, &n, a_t, &lda_t, work_lapack ); | |||
| /* Release memory and exit */ | |||
| if( work_lapack ) { | |||
| LAPACKE_free( work_lapack ); | |||
| } | |||
| exit_level_1: | |||
| LAPACKE_free( a_t ); | |||
| exit_level_0: | |||
| if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) { | |||
| @@ -57,7 +57,7 @@ lapack_int LAPACKE_sormhr( int matrix_layout, char side, char trans, | |||
| if( LAPACKE_sge_nancheck( matrix_layout, m, n, c, ldc ) ) { | |||
| return -11; | |||
| } | |||
| if( LAPACKE_s_nancheck( m-1, tau, 1 ) ) { | |||
| if( LAPACKE_s_nancheck( r-1, tau, 1 ) ) { | |||
| return -10; | |||
| } | |||
| } | |||
| @@ -62,7 +62,7 @@ lapack_int LAPACKE_ssbevd( int matrix_layout, char jobz, char uplo, lapack_int n | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -62,7 +62,7 @@ lapack_int LAPACKE_ssbevd_2stage( int matrix_layout, char jobz, char uplo, lapac | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -67,7 +67,7 @@ lapack_int LAPACKE_ssbgvd( int matrix_layout, char jobz, char uplo, lapack_int n | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -61,7 +61,7 @@ lapack_int LAPACKE_sspevd( int matrix_layout, char jobz, char uplo, lapack_int n | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -66,7 +66,7 @@ lapack_int LAPACKE_sspgvd( int matrix_layout, lapack_int itype, char jobz, | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -69,7 +69,7 @@ lapack_int LAPACKE_sstedc( int matrix_layout, char compz, lapack_int n, float* d | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -81,7 +81,7 @@ lapack_int LAPACKE_sstegr( int matrix_layout, char jobz, char range, | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||
| @@ -74,7 +74,7 @@ lapack_int LAPACKE_sstemr( int matrix_layout, char jobz, char range, | |||
| if( info != 0 ) { | |||
| goto exit_level_0; | |||
| } | |||
| liwork = (lapack_int)iwork_query; | |||
| liwork = iwork_query; | |||
| lwork = (lapack_int)work_query; | |||
| /* Allocate memory for work arrays */ | |||
| iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); | |||