Add a LAPACKE interface for ?LANGB and fix ?TPMQRT (Reference-LAPACK PR 540+725)tags/v0.3.22^2
| @@ -318,6 +318,8 @@ set(CSRC | |||||
| lapacke_clacn2.c | lapacke_clacn2.c | ||||
| lapacke_clag2z.c | lapacke_clag2z.c | ||||
| lapacke_clag2z_work.c | lapacke_clag2z_work.c | ||||
| lapacke_clangb.c | |||||
| lapacke_clangb_work.c | |||||
| lapacke_clange.c | lapacke_clange.c | ||||
| lapacke_clange_work.c | lapacke_clange_work.c | ||||
| lapacke_clanhe.c | lapacke_clanhe.c | ||||
| @@ -803,6 +805,8 @@ set(DSRC | |||||
| lapacke_dlag2s_work.c | lapacke_dlag2s_work.c | ||||
| lapacke_dlamch.c | lapacke_dlamch.c | ||||
| lapacke_dlamch_work.c | lapacke_dlamch_work.c | ||||
| lapacke_dlangb.c | |||||
| lapacke_dlangb_work.c | |||||
| lapacke_dlange.c | lapacke_dlange.c | ||||
| lapacke_dlange_work.c | lapacke_dlange_work.c | ||||
| lapacke_dlansy.c | lapacke_dlansy.c | ||||
| @@ -1381,6 +1385,8 @@ set(SSRC | |||||
| lapacke_slag2d_work.c | lapacke_slag2d_work.c | ||||
| lapacke_slamch.c | lapacke_slamch.c | ||||
| lapacke_slamch_work.c | lapacke_slamch_work.c | ||||
| lapacke_slangb.c | |||||
| lapacke_slangb_work.c | |||||
| lapacke_slange.c | lapacke_slange.c | ||||
| lapacke_slange_work.c | lapacke_slange_work.c | ||||
| lapacke_slansy.c | lapacke_slansy.c | ||||
| @@ -2089,6 +2095,8 @@ set(ZSRC | |||||
| lapacke_zlacrm_work.c | lapacke_zlacrm_work.c | ||||
| lapacke_zlag2c.c | lapacke_zlag2c.c | ||||
| lapacke_zlag2c_work.c | lapacke_zlag2c_work.c | ||||
| lapacke_zlangb.c | |||||
| lapacke_zlangb_work.c | |||||
| lapacke_zlange.c | lapacke_zlange.c | ||||
| lapacke_zlange_work.c | lapacke_zlange_work.c | ||||
| lapacke_zlanhe.c | lapacke_zlanhe.c | ||||
| @@ -358,6 +358,8 @@ lapacke_clacrm.o \ | |||||
| lapacke_clacrm_work.o \ | lapacke_clacrm_work.o \ | ||||
| lapacke_clag2z.o \ | lapacke_clag2z.o \ | ||||
| lapacke_clag2z_work.o \ | lapacke_clag2z_work.o \ | ||||
| lapacke_clangb.o \ | |||||
| lapacke_clangb_work.o \ | |||||
| lapacke_clange.o \ | lapacke_clange.o \ | ||||
| lapacke_clange_work.o \ | lapacke_clange_work.o \ | ||||
| lapacke_clanhe.o \ | lapacke_clanhe.o \ | ||||
| @@ -842,6 +844,8 @@ lapacke_dlag2s.o \ | |||||
| lapacke_dlag2s_work.o \ | lapacke_dlag2s_work.o \ | ||||
| lapacke_dlamch.o \ | lapacke_dlamch.o \ | ||||
| lapacke_dlamch_work.o \ | lapacke_dlamch_work.o \ | ||||
| lapacke_dlangb.o \ | |||||
| lapacke_dlangb_work.o \ | |||||
| lapacke_dlange.o \ | lapacke_dlange.o \ | ||||
| lapacke_dlange_work.o \ | lapacke_dlange_work.o \ | ||||
| lapacke_dlansy.o \ | lapacke_dlansy.o \ | ||||
| @@ -1414,6 +1418,8 @@ lapacke_slacpy.o \ | |||||
| lapacke_slacpy_work.o \ | lapacke_slacpy_work.o \ | ||||
| lapacke_slamch.o \ | lapacke_slamch.o \ | ||||
| lapacke_slamch_work.o \ | lapacke_slamch_work.o \ | ||||
| lapacke_slangb.o \ | |||||
| lapacke_slangb_work.o \ | |||||
| lapacke_slange.o \ | lapacke_slange.o \ | ||||
| lapacke_slange_work.o \ | lapacke_slange_work.o \ | ||||
| lapacke_slansy.o \ | lapacke_slansy.o \ | ||||
| @@ -2116,6 +2122,8 @@ lapacke_zlacrm.o \ | |||||
| lapacke_zlacrm_work.o \ | lapacke_zlacrm_work.o \ | ||||
| lapacke_zlag2c.o \ | lapacke_zlag2c.o \ | ||||
| lapacke_zlag2c_work.o \ | lapacke_zlag2c_work.o \ | ||||
| lapacke_zlangb.o \ | |||||
| lapacke_zlangb_work.o \ | |||||
| lapacke_zlange.o \ | lapacke_zlange.o \ | ||||
| lapacke_zlange_work.o \ | lapacke_zlange_work.o \ | ||||
| lapacke_zlanhe.o \ | lapacke_zlanhe.o \ | ||||
| @@ -0,0 +1,73 @@ | |||||
| /***************************************************************************** | |||||
| Copyright (c) 2022, 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 clangb | |||||
| * Author: Simon Märtens | |||||
| *****************************************************************************/ | |||||
| #include "lapacke_utils.h" | |||||
| float LAPACKE_clangb( int matrix_layout, char norm, lapack_int n, | |||||
| lapack_int kl, lapack_int ku, | |||||
| const lapack_complex_float* ab, lapack_int ldab ) | |||||
| { | |||||
| lapack_int info = 0; | |||||
| float res = 0.; | |||||
| float* work = NULL; | |||||
| if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_clangb", -1 ); | |||||
| return -1; | |||||
| } | |||||
| #ifndef LAPACK_DISABLE_NAN_CHECK | |||||
| if( LAPACKE_get_nancheck() ) { | |||||
| /* Optionally check input matrices for NaNs */ | |||||
| if( LAPACKE_cgb_nancheck( matrix_layout, n, n, kl, ku, ab, ldab ) ) { | |||||
| return -6; | |||||
| } | |||||
| } | |||||
| #endif | |||||
| /* Allocate memory for working array(s) */ | |||||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| work = (float*)LAPACKE_malloc( sizeof(float) * MAX(1,n) ); | |||||
| if( work == NULL ) { | |||||
| info = LAPACK_WORK_MEMORY_ERROR; | |||||
| goto exit_level_0; | |||||
| } | |||||
| } | |||||
| /* Call middle-level interface */ | |||||
| res = LAPACKE_clangb_work( matrix_layout, norm, n, kl, ku, ab, ldab, work ); | |||||
| /* Release memory and exit */ | |||||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| LAPACKE_free( work ); | |||||
| } | |||||
| exit_level_0: | |||||
| if( info == LAPACK_WORK_MEMORY_ERROR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_clangb", info ); | |||||
| } | |||||
| return res; | |||||
| } | |||||
| @@ -0,0 +1,84 @@ | |||||
| /***************************************************************************** | |||||
| Copyright (c) 2022, 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 clangb | |||||
| * Author: Simon Märtens | |||||
| *****************************************************************************/ | |||||
| #include "lapacke_utils.h" | |||||
| float LAPACKE_clangb_work( int matrix_layout, char norm, lapack_int n, | |||||
| lapack_int kl, lapack_int ku, | |||||
| const lapack_complex_float* ab, lapack_int ldab, | |||||
| float* work ) | |||||
| { | |||||
| lapack_int info = 0; | |||||
| float res = 0.; | |||||
| if( matrix_layout == LAPACK_COL_MAJOR ) { | |||||
| /* Call LAPACK function and adjust info */ | |||||
| res = LAPACK_clangb( &norm, &n, &kl, &ku, ab, &ldab, work ); | |||||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | |||||
| char norm_lapack; | |||||
| float* work_lapack = NULL; | |||||
| /* Check leading dimension(s) */ | |||||
| if( ldab < kl+ku+1 ) { | |||||
| info = -7; | |||||
| LAPACKE_xerbla( "LAPACKE_clangb_work", info ); | |||||
| return info; | |||||
| } | |||||
| if( LAPACKE_lsame( norm, '1' ) || LAPACKE_lsame( norm, 'o' ) ) { | |||||
| norm_lapack = 'i'; | |||||
| } else if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| norm_lapack = '1'; | |||||
| } else { | |||||
| norm_lapack = norm; | |||||
| } | |||||
| /* Allocate memory for work array(s) */ | |||||
| if( LAPACKE_lsame( norm_lapack, 'i' ) ) { | |||||
| work_lapack = (float*)LAPACKE_malloc( sizeof(float) * MAX(1,n) ); | |||||
| if( work_lapack == NULL ) { | |||||
| info = LAPACK_WORK_MEMORY_ERROR; | |||||
| goto exit_level_0; | |||||
| } | |||||
| } | |||||
| /* Call LAPACK function */ | |||||
| res = LAPACK_clangb( &norm, &n, &ku, &kl, ab, &ldab, work ); | |||||
| /* Release memory and exit */ | |||||
| if( work_lapack ) { | |||||
| LAPACKE_free( work_lapack ); | |||||
| } | |||||
| exit_level_0: | |||||
| if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_clangb_work", info ); | |||||
| } | |||||
| } else { | |||||
| info = -1; | |||||
| LAPACKE_xerbla( "LAPACKE_clangb_work", info ); | |||||
| } | |||||
| return res; | |||||
| } | |||||
| @@ -50,16 +50,24 @@ lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = info - 1; | info = info - 1; | ||||
| } | } | ||||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | ||||
| lapack_int lda_t = MAX(1,k); | |||||
| lapack_int nrowsA, ncolsA, nrowsV; | |||||
| if ( side == LAPACKE_lsame(side, 'l') ) { nrowsA = k; ncolsA = n; nrowsV = m; } | |||||
| else if ( side == LAPACKE_lsame(side, 'r') ) { nrowsA = m; ncolsA = k; nrowsV = n; } | |||||
| else { | |||||
| info = -2; | |||||
| LAPACKE_xerbla( "LAPACKE_ctpmqrt_work", info ); | |||||
| return info; | |||||
| } | |||||
| lapack_int lda_t = MAX(1,nrowsA); | |||||
| lapack_int ldb_t = MAX(1,m); | lapack_int ldb_t = MAX(1,m); | ||||
| lapack_int ldt_t = MAX(1,ldt); | |||||
| lapack_int ldv_t = MAX(1,ldv); | |||||
| lapack_int ldt_t = MAX(1,nb); | |||||
| lapack_int ldv_t = MAX(1,nrowsV); | |||||
| lapack_complex_float* v_t = NULL; | lapack_complex_float* v_t = NULL; | ||||
| lapack_complex_float* t_t = NULL; | lapack_complex_float* t_t = NULL; | ||||
| lapack_complex_float* a_t = NULL; | lapack_complex_float* a_t = NULL; | ||||
| lapack_complex_float* b_t = NULL; | lapack_complex_float* b_t = NULL; | ||||
| /* Check leading dimension(s) */ | /* Check leading dimension(s) */ | ||||
| if( lda < m ) { | |||||
| if( lda < ncolsA ) { | |||||
| info = -14; | info = -14; | ||||
| LAPACKE_xerbla( "LAPACKE_ctpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_ctpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| @@ -69,7 +77,7 @@ lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans, | |||||
| LAPACKE_xerbla( "LAPACKE_ctpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_ctpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| } | } | ||||
| if( ldt < nb ) { | |||||
| if( ldt < k ) { | |||||
| info = -12; | info = -12; | ||||
| LAPACKE_xerbla( "LAPACKE_ctpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_ctpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| @@ -87,13 +95,13 @@ lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans, | |||||
| goto exit_level_0; | goto exit_level_0; | ||||
| } | } | ||||
| t_t = (lapack_complex_float*) | t_t = (lapack_complex_float*) | ||||
| LAPACKE_malloc( sizeof(lapack_complex_float) * ldt_t * MAX(1,nb) ); | |||||
| LAPACKE_malloc( sizeof(lapack_complex_float) * ldt_t * MAX(1,k) ); | |||||
| if( t_t == NULL ) { | if( t_t == NULL ) { | ||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_1; | goto exit_level_1; | ||||
| } | } | ||||
| a_t = (lapack_complex_float*) | a_t = (lapack_complex_float*) | ||||
| LAPACKE_malloc( sizeof(lapack_complex_float) * lda_t * MAX(1,m) ); | |||||
| LAPACKE_malloc( sizeof(lapack_complex_float) * lda_t * MAX(1,ncolsA) ); | |||||
| if( a_t == NULL ) { | if( a_t == NULL ) { | ||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_2; | goto exit_level_2; | ||||
| @@ -105,10 +113,10 @@ lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans, | |||||
| goto exit_level_3; | goto exit_level_3; | ||||
| } | } | ||||
| /* Transpose input matrices */ | /* Transpose input matrices */ | ||||
| LAPACKE_cge_trans( matrix_layout, ldv, k, v, ldv, v_t, ldv_t ); | |||||
| LAPACKE_cge_trans( matrix_layout, ldt, nb, t, ldt, t_t, ldt_t ); | |||||
| LAPACKE_cge_trans( matrix_layout, k, m, a, lda, a_t, lda_t ); | |||||
| LAPACKE_cge_trans( matrix_layout, m, n, b, ldb, b_t, ldb_t ); | |||||
| LAPACKE_cge_trans( LAPACK_ROW_MAJOR, nrowsV, k, v, ldv, v_t, ldv_t ); | |||||
| LAPACKE_cge_trans( LAPACK_ROW_MAJOR, nb, k, t, ldt, t_t, ldt_t ); | |||||
| LAPACKE_cge_trans( LAPACK_ROW_MAJOR, nrowsA, ncolsA, a, lda, a_t, lda_t ); | |||||
| LAPACKE_cge_trans( LAPACK_ROW_MAJOR, m, n, b, ldb, b_t, ldb_t ); | |||||
| /* Call LAPACK function and adjust info */ | /* Call LAPACK function and adjust info */ | ||||
| LAPACK_ctpmqrt( &side, &trans, &m, &n, &k, &l, &nb, v_t, &ldv_t, t_t, | LAPACK_ctpmqrt( &side, &trans, &m, &n, &k, &l, &nb, v_t, &ldv_t, t_t, | ||||
| &ldt_t, a_t, &lda_t, b_t, &ldb_t, work, &info ); | &ldt_t, a_t, &lda_t, b_t, &ldb_t, work, &info ); | ||||
| @@ -116,7 +124,7 @@ lapack_int LAPACKE_ctpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = info - 1; | info = info - 1; | ||||
| } | } | ||||
| /* Transpose output matrices */ | /* Transpose output matrices */ | ||||
| LAPACKE_cge_trans( LAPACK_COL_MAJOR, k, m, a_t, lda_t, a, lda ); | |||||
| LAPACKE_cge_trans( LAPACK_COL_MAJOR, nrowsA, ncolsA, a_t, lda_t, a, lda ); | |||||
| LAPACKE_cge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); | LAPACKE_cge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); | ||||
| /* Release memory and exit */ | /* Release memory and exit */ | ||||
| LAPACKE_free( b_t ); | LAPACKE_free( b_t ); | ||||
| @@ -0,0 +1,73 @@ | |||||
| /***************************************************************************** | |||||
| Copyright (c) 2022, 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 dlangb | |||||
| * Author: Simon Märtens | |||||
| *****************************************************************************/ | |||||
| #include "lapacke_utils.h" | |||||
| double LAPACKE_dlangb( int matrix_layout, char norm, lapack_int n, | |||||
| lapack_int kl, lapack_int ku, const double* ab, | |||||
| lapack_int ldab ) | |||||
| { | |||||
| lapack_int info = 0; | |||||
| double res = 0.; | |||||
| double* work = NULL; | |||||
| if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_dlangb", -1 ); | |||||
| return -1; | |||||
| } | |||||
| #ifndef LAPACK_DISABLE_NAN_CHECK | |||||
| if( LAPACKE_get_nancheck() ) { | |||||
| /* Optionally check input matrices for NaNs */ | |||||
| if( LAPACKE_dgb_nancheck( matrix_layout, n, n, kl, ku, ab, ldab ) ) { | |||||
| return -6; | |||||
| } | |||||
| } | |||||
| #endif | |||||
| /* Allocate memory for working array(s) */ | |||||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| work = (double*)LAPACKE_malloc( sizeof(double) * MAX(1,n) ); | |||||
| if( work == NULL ) { | |||||
| info = LAPACK_WORK_MEMORY_ERROR; | |||||
| goto exit_level_0; | |||||
| } | |||||
| } | |||||
| /* Call middle-level interface */ | |||||
| res = LAPACKE_dlangb_work( matrix_layout, norm, n, kl, ku, ab, ldab, work ); | |||||
| /* Release memory and exit */ | |||||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| LAPACKE_free( work ); | |||||
| } | |||||
| exit_level_0: | |||||
| if( info == LAPACK_WORK_MEMORY_ERROR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_dlangb", info ); | |||||
| } | |||||
| return res; | |||||
| } | |||||
| @@ -0,0 +1,83 @@ | |||||
| /***************************************************************************** | |||||
| Copyright (c) 2022, 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 dlangb | |||||
| * Author: Simon Märtens | |||||
| *****************************************************************************/ | |||||
| #include "lapacke_utils.h" | |||||
| double LAPACKE_dlangb_work( int matrix_layout, char norm, lapack_int n, | |||||
| lapack_int kl, lapack_int ku, const double* ab, | |||||
| lapack_int ldab, double* work ) | |||||
| { | |||||
| lapack_int info = 0; | |||||
| double res = 0.; | |||||
| if( matrix_layout == LAPACK_COL_MAJOR ) { | |||||
| /* Call LAPACK function and adjust info */ | |||||
| res = LAPACK_dlangb( &norm, &n, &kl, &ku, ab, &ldab, work ); | |||||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | |||||
| char norm_lapack; | |||||
| double* work_lapack = NULL; | |||||
| /* Check leading dimension(s) */ | |||||
| if( ldab < kl+ku+1 ) { | |||||
| info = -7; | |||||
| LAPACKE_xerbla( "LAPACKE_dlangb_work", info ); | |||||
| return info; | |||||
| } | |||||
| if( LAPACKE_lsame( norm, '1' ) || LAPACKE_lsame( norm, 'o' ) ) { | |||||
| norm_lapack = 'i'; | |||||
| } else if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| norm_lapack = '1'; | |||||
| } else { | |||||
| norm_lapack = norm; | |||||
| } | |||||
| /* Allocate memory for work array(s) */ | |||||
| if( LAPACKE_lsame( norm_lapack, 'i' ) ) { | |||||
| work_lapack = (double*)LAPACKE_malloc( sizeof(double) * MAX(1,n) ); | |||||
| if( work_lapack == NULL ) { | |||||
| info = LAPACK_WORK_MEMORY_ERROR; | |||||
| goto exit_level_0; | |||||
| } | |||||
| } | |||||
| /* Call LAPACK function */ | |||||
| res = LAPACK_dlangb( &norm, &n, &ku, &kl, ab, &ldab, work ); | |||||
| /* Release memory and exit */ | |||||
| if( work_lapack ) { | |||||
| LAPACKE_free( work_lapack ); | |||||
| } | |||||
| exit_level_0: | |||||
| if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_dlangb_work", info ); | |||||
| } | |||||
| } else { | |||||
| info = -1; | |||||
| LAPACKE_xerbla( "LAPACKE_dlangb_work", info ); | |||||
| } | |||||
| return res; | |||||
| } | |||||
| @@ -48,16 +48,24 @@ lapack_int LAPACKE_dtpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = info - 1; | info = info - 1; | ||||
| } | } | ||||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | ||||
| lapack_int lda_t = MAX(1,k); | |||||
| lapack_int nrowsA, ncolsA, nrowsV; | |||||
| if ( side == LAPACKE_lsame(side, 'l') ) { nrowsA = k; ncolsA = n; nrowsV = m; } | |||||
| else if ( side == LAPACKE_lsame(side, 'r') ) { nrowsA = m; ncolsA = k; nrowsV = n; } | |||||
| else { | |||||
| info = -2; | |||||
| LAPACKE_xerbla( "LAPACKE_dtpmqrt_work", info ); | |||||
| return info; | |||||
| } | |||||
| lapack_int lda_t = MAX(1,nrowsA); | |||||
| lapack_int ldb_t = MAX(1,m); | lapack_int ldb_t = MAX(1,m); | ||||
| lapack_int ldt_t = MAX(1,ldt); | |||||
| lapack_int ldv_t = MAX(1,ldv); | |||||
| lapack_int ldt_t = MAX(1,nb); | |||||
| lapack_int ldv_t = MAX(1,nrowsV); | |||||
| double* v_t = NULL; | double* v_t = NULL; | ||||
| double* t_t = NULL; | double* t_t = NULL; | ||||
| double* a_t = NULL; | double* a_t = NULL; | ||||
| double* b_t = NULL; | double* b_t = NULL; | ||||
| /* Check leading dimension(s) */ | /* Check leading dimension(s) */ | ||||
| if( lda < m ) { | |||||
| if( lda < ncolsA ) { | |||||
| info = -14; | info = -14; | ||||
| LAPACKE_xerbla( "LAPACKE_dtpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_dtpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| @@ -67,7 +75,7 @@ lapack_int LAPACKE_dtpmqrt_work( int matrix_layout, char side, char trans, | |||||
| LAPACKE_xerbla( "LAPACKE_dtpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_dtpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| } | } | ||||
| if( ldt < nb ) { | |||||
| if( ldt < k ) { | |||||
| info = -12; | info = -12; | ||||
| LAPACKE_xerbla( "LAPACKE_dtpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_dtpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| @@ -83,12 +91,12 @@ lapack_int LAPACKE_dtpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_0; | goto exit_level_0; | ||||
| } | } | ||||
| t_t = (double*)LAPACKE_malloc( sizeof(double) * ldt_t * MAX(1,nb) ); | |||||
| t_t = (double*)LAPACKE_malloc( sizeof(double) * ldt_t * MAX(1,k) ); | |||||
| if( t_t == NULL ) { | if( t_t == NULL ) { | ||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_1; | goto exit_level_1; | ||||
| } | } | ||||
| a_t = (double*)LAPACKE_malloc( sizeof(double) * lda_t * MAX(1,m) ); | |||||
| a_t = (double*)LAPACKE_malloc( sizeof(double) * lda_t * MAX(1,ncolsA) ); | |||||
| if( a_t == NULL ) { | if( a_t == NULL ) { | ||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_2; | goto exit_level_2; | ||||
| @@ -99,10 +107,10 @@ lapack_int LAPACKE_dtpmqrt_work( int matrix_layout, char side, char trans, | |||||
| goto exit_level_3; | goto exit_level_3; | ||||
| } | } | ||||
| /* Transpose input matrices */ | /* Transpose input matrices */ | ||||
| LAPACKE_dge_trans( matrix_layout, ldv, k, v, ldv, v_t, ldv_t ); | |||||
| LAPACKE_dge_trans( matrix_layout, ldt, nb, t, ldt, t_t, ldt_t ); | |||||
| LAPACKE_dge_trans( matrix_layout, k, m, a, lda, a_t, lda_t ); | |||||
| LAPACKE_dge_trans( matrix_layout, m, n, b, ldb, b_t, ldb_t ); | |||||
| LAPACKE_dge_trans( LAPACK_ROW_MAJOR, nrowsV, k, v, ldv, v_t, ldv_t ); | |||||
| LAPACKE_dge_trans( LAPACK_ROW_MAJOR, nb, k, t, ldt, t_t, ldt_t ); | |||||
| LAPACKE_dge_trans( LAPACK_ROW_MAJOR, nrowsA, ncolsA, a, lda, a_t, lda_t ); | |||||
| LAPACKE_dge_trans( LAPACK_ROW_MAJOR, m, n, b, ldb, b_t, ldb_t ); | |||||
| /* Call LAPACK function and adjust info */ | /* Call LAPACK function and adjust info */ | ||||
| LAPACK_dtpmqrt( &side, &trans, &m, &n, &k, &l, &nb, v_t, &ldv_t, t_t, | LAPACK_dtpmqrt( &side, &trans, &m, &n, &k, &l, &nb, v_t, &ldv_t, t_t, | ||||
| &ldt_t, a_t, &lda_t, b_t, &ldb_t, work, &info ); | &ldt_t, a_t, &lda_t, b_t, &ldb_t, work, &info ); | ||||
| @@ -110,7 +118,7 @@ lapack_int LAPACKE_dtpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = info - 1; | info = info - 1; | ||||
| } | } | ||||
| /* Transpose output matrices */ | /* Transpose output matrices */ | ||||
| LAPACKE_dge_trans( LAPACK_COL_MAJOR, k, m, a_t, lda_t, a, lda ); | |||||
| LAPACKE_dge_trans( LAPACK_COL_MAJOR, nrowsA, ncolsA, a_t, lda_t, a, lda ); | |||||
| LAPACKE_dge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); | LAPACKE_dge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); | ||||
| /* Release memory and exit */ | /* Release memory and exit */ | ||||
| LAPACKE_free( b_t ); | LAPACKE_free( b_t ); | ||||
| @@ -0,0 +1,73 @@ | |||||
| /***************************************************************************** | |||||
| Copyright (c) 2022, 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 slangb | |||||
| * Author: Simon Märtens | |||||
| *****************************************************************************/ | |||||
| #include "lapacke_utils.h" | |||||
| float LAPACKE_slangb( int matrix_layout, char norm, lapack_int n, | |||||
| lapack_int kl, lapack_int ku, const float* ab, | |||||
| lapack_int ldab ) | |||||
| { | |||||
| lapack_int info = 0; | |||||
| float res = 0.; | |||||
| float* work = NULL; | |||||
| if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_slangb", -1 ); | |||||
| return -1; | |||||
| } | |||||
| #ifndef LAPACK_DISABLE_NAN_CHECK | |||||
| if( LAPACKE_get_nancheck() ) { | |||||
| /* Optionally check input matrices for NaNs */ | |||||
| if( LAPACKE_sgb_nancheck( matrix_layout, n, n, kl, ku, ab, ldab ) ) { | |||||
| return -6; | |||||
| } | |||||
| } | |||||
| #endif | |||||
| /* Allocate memory for working array(s) */ | |||||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| work = (float*)LAPACKE_malloc( sizeof(float) * MAX(1,n) ); | |||||
| if( work == NULL ) { | |||||
| info = LAPACK_WORK_MEMORY_ERROR; | |||||
| goto exit_level_0; | |||||
| } | |||||
| } | |||||
| /* Call middle-level interface */ | |||||
| res = LAPACKE_slangb_work( matrix_layout, norm, n, kl, ku, ab, ldab, work ); | |||||
| /* Release memory and exit */ | |||||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| LAPACKE_free( work ); | |||||
| } | |||||
| exit_level_0: | |||||
| if( info == LAPACK_WORK_MEMORY_ERROR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_slangb", info ); | |||||
| } | |||||
| return res; | |||||
| } | |||||
| @@ -0,0 +1,83 @@ | |||||
| /***************************************************************************** | |||||
| Copyright (c) 2022, 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 slangb | |||||
| * Author: Simon Märtens | |||||
| *****************************************************************************/ | |||||
| #include "lapacke_utils.h" | |||||
| float LAPACKE_slangb_work( int matrix_layout, char norm, lapack_int n, | |||||
| lapack_int kl, lapack_int ku, const float* ab, | |||||
| lapack_int ldab, float* work ) | |||||
| { | |||||
| lapack_int info = 0; | |||||
| float res = 0.; | |||||
| if( matrix_layout == LAPACK_COL_MAJOR ) { | |||||
| /* Call LAPACK function and adjust info */ | |||||
| res = LAPACK_slangb( &norm, &n, &kl, &ku, ab, &ldab, work ); | |||||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | |||||
| char norm_lapack; | |||||
| float* work_lapack = NULL; | |||||
| /* Check leading dimension(s) */ | |||||
| if( ldab < kl+ku+1 ) { | |||||
| info = -7; | |||||
| LAPACKE_xerbla( "LAPACKE_slangb_work", info ); | |||||
| return info; | |||||
| } | |||||
| if( LAPACKE_lsame( norm, '1' ) || LAPACKE_lsame( norm, 'o' ) ) { | |||||
| norm_lapack = 'i'; | |||||
| } else if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| norm_lapack = '1'; | |||||
| } else { | |||||
| norm_lapack = norm; | |||||
| } | |||||
| /* Allocate memory for work array(s) */ | |||||
| if( LAPACKE_lsame( norm_lapack, 'i' ) ) { | |||||
| work_lapack = (float*)LAPACKE_malloc( sizeof(float) * MAX(1,n) ); | |||||
| if( work_lapack == NULL ) { | |||||
| info = LAPACK_WORK_MEMORY_ERROR; | |||||
| goto exit_level_0; | |||||
| } | |||||
| } | |||||
| /* Call LAPACK function */ | |||||
| res = LAPACK_slangb( &norm, &n, &ku, &kl, ab, &ldab, work ); | |||||
| /* Release memory and exit */ | |||||
| if( work_lapack ) { | |||||
| LAPACKE_free( work_lapack ); | |||||
| } | |||||
| exit_level_0: | |||||
| if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_slangb_work", info ); | |||||
| } | |||||
| } else { | |||||
| info = -1; | |||||
| LAPACKE_xerbla( "LAPACKE_slangb_work", info ); | |||||
| } | |||||
| return res; | |||||
| } | |||||
| @@ -48,16 +48,24 @@ lapack_int LAPACKE_stpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = info - 1; | info = info - 1; | ||||
| } | } | ||||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | ||||
| lapack_int lda_t = MAX(1,k); | |||||
| lapack_int nrowsA, ncolsA, nrowsV; | |||||
| if ( side == LAPACKE_lsame(side, 'l') ) { nrowsA = k; ncolsA = n; nrowsV = m; } | |||||
| else if ( side == LAPACKE_lsame(side, 'r') ) { nrowsA = m; ncolsA = k; nrowsV = n; } | |||||
| else { | |||||
| info = -2; | |||||
| LAPACKE_xerbla( "LAPACKE_stpmqrt_work", info ); | |||||
| return info; | |||||
| } | |||||
| lapack_int lda_t = MAX(1,nrowsA); | |||||
| lapack_int ldb_t = MAX(1,m); | lapack_int ldb_t = MAX(1,m); | ||||
| lapack_int ldt_t = MAX(1,ldt); | |||||
| lapack_int ldv_t = MAX(1,ldv); | |||||
| lapack_int ldt_t = MAX(1,nb); | |||||
| lapack_int ldv_t = MAX(1,nrowsV); | |||||
| float* v_t = NULL; | float* v_t = NULL; | ||||
| float* t_t = NULL; | float* t_t = NULL; | ||||
| float* a_t = NULL; | float* a_t = NULL; | ||||
| float* b_t = NULL; | float* b_t = NULL; | ||||
| /* Check leading dimension(s) */ | /* Check leading dimension(s) */ | ||||
| if( lda < m ) { | |||||
| if( lda < ncolsA ) { | |||||
| info = -14; | info = -14; | ||||
| LAPACKE_xerbla( "LAPACKE_stpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_stpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| @@ -67,7 +75,7 @@ lapack_int LAPACKE_stpmqrt_work( int matrix_layout, char side, char trans, | |||||
| LAPACKE_xerbla( "LAPACKE_stpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_stpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| } | } | ||||
| if( ldt < nb ) { | |||||
| if( ldt < k ) { | |||||
| info = -12; | info = -12; | ||||
| LAPACKE_xerbla( "LAPACKE_stpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_stpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| @@ -83,12 +91,12 @@ lapack_int LAPACKE_stpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_0; | goto exit_level_0; | ||||
| } | } | ||||
| t_t = (float*)LAPACKE_malloc( sizeof(float) * ldt_t * MAX(1,nb) ); | |||||
| t_t = (float*)LAPACKE_malloc( sizeof(float) * ldt_t * MAX(1,k) ); | |||||
| if( t_t == NULL ) { | if( t_t == NULL ) { | ||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_1; | goto exit_level_1; | ||||
| } | } | ||||
| a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,m) ); | |||||
| a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,ncolsA) ); | |||||
| if( a_t == NULL ) { | if( a_t == NULL ) { | ||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_2; | goto exit_level_2; | ||||
| @@ -99,10 +107,10 @@ lapack_int LAPACKE_stpmqrt_work( int matrix_layout, char side, char trans, | |||||
| goto exit_level_3; | goto exit_level_3; | ||||
| } | } | ||||
| /* Transpose input matrices */ | /* Transpose input matrices */ | ||||
| LAPACKE_sge_trans( matrix_layout, ldv, k, v, ldv, v_t, ldv_t ); | |||||
| LAPACKE_sge_trans( matrix_layout, ldt, nb, t, ldt, t_t, ldt_t ); | |||||
| LAPACKE_sge_trans( matrix_layout, k, m, a, lda, a_t, lda_t ); | |||||
| LAPACKE_sge_trans( matrix_layout, m, n, b, ldb, b_t, ldb_t ); | |||||
| LAPACKE_sge_trans( LAPACK_ROW_MAJOR, nrowsV, k, v, ldv, v_t, ldv_t ); | |||||
| LAPACKE_sge_trans( LAPACK_ROW_MAJOR, nb, k, t, ldt, t_t, ldt_t ); | |||||
| LAPACKE_sge_trans( LAPACK_ROW_MAJOR, nrowsA, ncolsA, a, lda, a_t, lda_t ); | |||||
| LAPACKE_sge_trans( LAPACK_ROW_MAJOR, m, n, b, ldb, b_t, ldb_t ); | |||||
| /* Call LAPACK function and adjust info */ | /* Call LAPACK function and adjust info */ | ||||
| LAPACK_stpmqrt( &side, &trans, &m, &n, &k, &l, &nb, v_t, &ldv_t, t_t, | LAPACK_stpmqrt( &side, &trans, &m, &n, &k, &l, &nb, v_t, &ldv_t, t_t, | ||||
| &ldt_t, a_t, &lda_t, b_t, &ldb_t, work, &info ); | &ldt_t, a_t, &lda_t, b_t, &ldb_t, work, &info ); | ||||
| @@ -110,7 +118,7 @@ lapack_int LAPACKE_stpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = info - 1; | info = info - 1; | ||||
| } | } | ||||
| /* Transpose output matrices */ | /* Transpose output matrices */ | ||||
| LAPACKE_sge_trans( LAPACK_COL_MAJOR, k, m, a_t, lda_t, a, lda ); | |||||
| LAPACKE_sge_trans( LAPACK_COL_MAJOR, nrowsA, ncolsA, a_t, lda_t, a, lda ); | |||||
| LAPACKE_sge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); | LAPACKE_sge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); | ||||
| /* Release memory and exit */ | /* Release memory and exit */ | ||||
| LAPACKE_free( b_t ); | LAPACKE_free( b_t ); | ||||
| @@ -0,0 +1,73 @@ | |||||
| /***************************************************************************** | |||||
| Copyright (c) 2022, 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 zlangb | |||||
| * Author: Simon Märtens | |||||
| *****************************************************************************/ | |||||
| #include "lapacke_utils.h" | |||||
| double LAPACKE_zlangb( int matrix_layout, char norm, lapack_int n, | |||||
| lapack_int kl, lapack_int ku, | |||||
| const lapack_complex_double* ab, lapack_int ldab ) | |||||
| { | |||||
| lapack_int info = 0; | |||||
| double res = 0.; | |||||
| double* work = NULL; | |||||
| if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_zlangb", -1 ); | |||||
| return -1; | |||||
| } | |||||
| #ifndef LAPACK_DISABLE_NAN_CHECK | |||||
| if( LAPACKE_get_nancheck() ) { | |||||
| /* Optionally check input matrices for NaNs */ | |||||
| if( LAPACKE_zgb_nancheck( matrix_layout, n, n, kl, ku, ab, ldab ) ) { | |||||
| return -6; | |||||
| } | |||||
| } | |||||
| #endif | |||||
| /* Allocate memory for working array(s) */ | |||||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| work = (double*)LAPACKE_malloc( sizeof(double) * MAX(1,n) ); | |||||
| if( work == NULL ) { | |||||
| info = LAPACK_WORK_MEMORY_ERROR; | |||||
| goto exit_level_0; | |||||
| } | |||||
| } | |||||
| /* Call middle-level interface */ | |||||
| res = LAPACKE_zlangb_work( matrix_layout, norm, n, kl, ku, ab, ldab, work ); | |||||
| /* Release memory and exit */ | |||||
| if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| LAPACKE_free( work ); | |||||
| } | |||||
| exit_level_0: | |||||
| if( info == LAPACK_WORK_MEMORY_ERROR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_zlangb", info ); | |||||
| } | |||||
| return res; | |||||
| } | |||||
| @@ -0,0 +1,84 @@ | |||||
| /***************************************************************************** | |||||
| Copyright (c) 2022, 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 zlangb | |||||
| * Author: Simon Märtens | |||||
| *****************************************************************************/ | |||||
| #include "lapacke_utils.h" | |||||
| double LAPACKE_zlangb_work( int matrix_layout, char norm, lapack_int n, | |||||
| lapack_int kl, lapack_int ku, | |||||
| const lapack_complex_double* ab, lapack_int ldab, | |||||
| double* work ) | |||||
| { | |||||
| lapack_int info = 0; | |||||
| double res = 0.; | |||||
| if( matrix_layout == LAPACK_COL_MAJOR ) { | |||||
| /* Call LAPACK function and adjust info */ | |||||
| res = LAPACK_zlangb( &norm, &n, &kl, &ku, ab, &ldab, work ); | |||||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | |||||
| char norm_lapack; | |||||
| double* work_lapack = NULL; | |||||
| /* Check leading dimension(s) */ | |||||
| if( ldab < kl+ku+1 ) { | |||||
| info = -7; | |||||
| LAPACKE_xerbla( "LAPACKE_zlangb_work", info ); | |||||
| return info; | |||||
| } | |||||
| if( LAPACKE_lsame( norm, '1' ) || LAPACKE_lsame( norm, 'o' ) ) { | |||||
| norm_lapack = 'i'; | |||||
| } else if( LAPACKE_lsame( norm, 'i' ) ) { | |||||
| norm_lapack = '1'; | |||||
| } else { | |||||
| norm_lapack = norm; | |||||
| } | |||||
| /* Allocate memory for work array(s) */ | |||||
| if( LAPACKE_lsame( norm_lapack, 'i' ) ) { | |||||
| work_lapack = (double*)LAPACKE_malloc( sizeof(double) * MAX(1,n) ); | |||||
| if( work_lapack == NULL ) { | |||||
| info = LAPACK_WORK_MEMORY_ERROR; | |||||
| goto exit_level_0; | |||||
| } | |||||
| } | |||||
| /* Call LAPACK function */ | |||||
| res = LAPACK_zlangb( &norm, &n, &ku, &kl, ab, &ldab, work ); | |||||
| /* Release memory and exit */ | |||||
| if( work_lapack ) { | |||||
| LAPACKE_free( work_lapack ); | |||||
| } | |||||
| exit_level_0: | |||||
| if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) { | |||||
| LAPACKE_xerbla( "LAPACKE_zlangb_work", info ); | |||||
| } | |||||
| } else { | |||||
| info = -1; | |||||
| LAPACKE_xerbla( "LAPACKE_zlangb_work", info ); | |||||
| } | |||||
| return res; | |||||
| } | |||||
| @@ -50,16 +50,24 @@ lapack_int LAPACKE_ztpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = info - 1; | info = info - 1; | ||||
| } | } | ||||
| } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | ||||
| lapack_int lda_t = MAX(1,k); | |||||
| lapack_int nrowsA, ncolsA, nrowsV; | |||||
| if ( side == LAPACKE_lsame(side, 'l') ) { nrowsA = k; ncolsA = n; nrowsV = m; } | |||||
| else if ( side == LAPACKE_lsame(side, 'r') ) { nrowsA = m; ncolsA = k; nrowsV = n; } | |||||
| else { | |||||
| info = -2; | |||||
| LAPACKE_xerbla( "LAPACKE_ztpmqrt_work", info ); | |||||
| return info; | |||||
| } | |||||
| lapack_int lda_t = MAX(1,nrowsA); | |||||
| lapack_int ldb_t = MAX(1,m); | lapack_int ldb_t = MAX(1,m); | ||||
| lapack_int ldt_t = MAX(1,ldt); | |||||
| lapack_int ldv_t = MAX(1,ldv); | |||||
| lapack_int ldt_t = MAX(1,nb); | |||||
| lapack_int ldv_t = MAX(1,nrowsV); | |||||
| lapack_complex_double* v_t = NULL; | lapack_complex_double* v_t = NULL; | ||||
| lapack_complex_double* t_t = NULL; | lapack_complex_double* t_t = NULL; | ||||
| lapack_complex_double* a_t = NULL; | lapack_complex_double* a_t = NULL; | ||||
| lapack_complex_double* b_t = NULL; | lapack_complex_double* b_t = NULL; | ||||
| /* Check leading dimension(s) */ | /* Check leading dimension(s) */ | ||||
| if( lda < m ) { | |||||
| if( lda < ncolsA ) { | |||||
| info = -14; | info = -14; | ||||
| LAPACKE_xerbla( "LAPACKE_ztpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_ztpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| @@ -69,7 +77,7 @@ lapack_int LAPACKE_ztpmqrt_work( int matrix_layout, char side, char trans, | |||||
| LAPACKE_xerbla( "LAPACKE_ztpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_ztpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| } | } | ||||
| if( ldt < nb ) { | |||||
| if( ldt < k ) { | |||||
| info = -12; | info = -12; | ||||
| LAPACKE_xerbla( "LAPACKE_ztpmqrt_work", info ); | LAPACKE_xerbla( "LAPACKE_ztpmqrt_work", info ); | ||||
| return info; | return info; | ||||
| @@ -87,13 +95,13 @@ lapack_int LAPACKE_ztpmqrt_work( int matrix_layout, char side, char trans, | |||||
| goto exit_level_0; | goto exit_level_0; | ||||
| } | } | ||||
| t_t = (lapack_complex_double*) | t_t = (lapack_complex_double*) | ||||
| LAPACKE_malloc( sizeof(lapack_complex_double) * ldt_t * MAX(1,nb) ); | |||||
| LAPACKE_malloc( sizeof(lapack_complex_double) * ldt_t * MAX(1,k) ); | |||||
| if( t_t == NULL ) { | if( t_t == NULL ) { | ||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_1; | goto exit_level_1; | ||||
| } | } | ||||
| a_t = (lapack_complex_double*) | a_t = (lapack_complex_double*) | ||||
| LAPACKE_malloc( sizeof(lapack_complex_double) * lda_t * MAX(1,m) ); | |||||
| LAPACKE_malloc( sizeof(lapack_complex_double) * lda_t * MAX(1,ncolsA) ); | |||||
| if( a_t == NULL ) { | if( a_t == NULL ) { | ||||
| info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
| goto exit_level_2; | goto exit_level_2; | ||||
| @@ -105,10 +113,10 @@ lapack_int LAPACKE_ztpmqrt_work( int matrix_layout, char side, char trans, | |||||
| goto exit_level_3; | goto exit_level_3; | ||||
| } | } | ||||
| /* Transpose input matrices */ | /* Transpose input matrices */ | ||||
| LAPACKE_zge_trans( matrix_layout, ldv, k, v, ldv, v_t, ldv_t ); | |||||
| LAPACKE_zge_trans( matrix_layout, ldt, nb, t, ldt, t_t, ldt_t ); | |||||
| LAPACKE_zge_trans( matrix_layout, k, m, a, lda, a_t, lda_t ); | |||||
| LAPACKE_zge_trans( matrix_layout, m, n, b, ldb, b_t, ldb_t ); | |||||
| LAPACKE_zge_trans( LAPACK_ROW_MAJOR, nrowsV, k, v, ldv, v_t, ldv_t ); | |||||
| LAPACKE_zge_trans( LAPACK_ROW_MAJOR, nb, k, t, ldt, t_t, ldt_t ); | |||||
| LAPACKE_zge_trans( LAPACK_ROW_MAJOR, nrowsA, ncolsA, a, lda, a_t, lda_t ); | |||||
| LAPACKE_zge_trans( LAPACK_ROW_MAJOR, m, n, b, ldb, b_t, ldb_t ); | |||||
| /* Call LAPACK function and adjust info */ | /* Call LAPACK function and adjust info */ | ||||
| LAPACK_ztpmqrt( &side, &trans, &m, &n, &k, &l, &nb, v_t, &ldv_t, t_t, | LAPACK_ztpmqrt( &side, &trans, &m, &n, &k, &l, &nb, v_t, &ldv_t, t_t, | ||||
| &ldt_t, a_t, &lda_t, b_t, &ldb_t, work, &info ); | &ldt_t, a_t, &lda_t, b_t, &ldb_t, work, &info ); | ||||
| @@ -116,7 +124,7 @@ lapack_int LAPACKE_ztpmqrt_work( int matrix_layout, char side, char trans, | |||||
| info = info - 1; | info = info - 1; | ||||
| } | } | ||||
| /* Transpose output matrices */ | /* Transpose output matrices */ | ||||
| LAPACKE_zge_trans( LAPACK_COL_MAJOR, k, m, a_t, lda_t, a, lda ); | |||||
| LAPACKE_zge_trans( LAPACK_COL_MAJOR, nrowsA, ncolsA, a_t, lda_t, a, lda ); | |||||
| LAPACKE_zge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); | LAPACKE_zge_trans( LAPACK_COL_MAJOR, m, n, b_t, ldb_t, b, ldb ); | ||||
| /* Release memory and exit */ | /* Release memory and exit */ | ||||
| LAPACKE_free( b_t ); | LAPACKE_free( b_t ); | ||||