From 9764e5c703924f50f980d40ab5388c5e45926880 Mon Sep 17 00:00:00 2001 From: sbite0138 Date: Mon, 28 Nov 2022 23:35:11 +0900 Subject: [PATCH 1/3] fix segfault problem when executing with row major #766 --- LAPACKE/src/lapacke_cgeqrt_work.c | 5 +++-- LAPACKE/src/lapacke_dgeqrt_work.c | 5 +++-- LAPACKE/src/lapacke_sgeqrt_work.c | 5 +++-- LAPACKE/src/lapacke_zgeqrt_work.c | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/LAPACKE/src/lapacke_cgeqrt_work.c b/LAPACKE/src/lapacke_cgeqrt_work.c index 962624d217..823ffc2c09 100644 --- a/LAPACKE/src/lapacke_cgeqrt_work.c +++ b/LAPACKE/src/lapacke_cgeqrt_work.c @@ -46,7 +46,7 @@ lapack_int LAPACKE_cgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,m); - lapack_int ldt_t = MAX(1,ldt); + lapack_int ldt_t = MAX(1,nb); lapack_complex_float* a_t = NULL; lapack_complex_float* t_t = NULL; /* Check leading dimension(s) */ @@ -76,6 +76,7 @@ lapack_int LAPACKE_cgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose input matrices */ LAPACKE_cge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); + LAPACKE_cge_trans( matrix_layout, nb, MIN(m,n), t, ldt, t_t, ldt_t ); /* Call LAPACK function and adjust info */ LAPACK_cgeqrt( &m, &n, &nb, a_t, &lda_t, t_t, &ldt_t, work, &info ); if( info < 0 ) { @@ -83,7 +84,7 @@ lapack_int LAPACKE_cgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose output matrices */ LAPACKE_cge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda ); - LAPACKE_cge_trans( LAPACK_COL_MAJOR, ldt, MIN(m,n), t_t, ldt_t, t, + LAPACKE_cge_trans( LAPACK_COL_MAJOR, nb, MIN(m,n), t_t, ldt_t, t, ldt ); /* Release memory and exit */ LAPACKE_free( t_t ); diff --git a/LAPACKE/src/lapacke_dgeqrt_work.c b/LAPACKE/src/lapacke_dgeqrt_work.c index 8a4c7ceadd..8a16f1e4e0 100644 --- a/LAPACKE/src/lapacke_dgeqrt_work.c +++ b/LAPACKE/src/lapacke_dgeqrt_work.c @@ -45,7 +45,7 @@ lapack_int LAPACKE_dgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,m); - lapack_int ldt_t = MAX(1,ldt); + lapack_int ldt_t = MAX(1,nb); double* a_t = NULL; double* t_t = NULL; /* Check leading dimension(s) */ @@ -73,6 +73,7 @@ lapack_int LAPACKE_dgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose input matrices */ LAPACKE_dge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); + LAPACKE_dge_trans( matrix_layout, nb, MIN(m,n), t, ldt, t_t, ldt_t ); /* Call LAPACK function and adjust info */ LAPACK_dgeqrt( &m, &n, &nb, a_t, &lda_t, t_t, &ldt_t, work, &info ); if( info < 0 ) { @@ -80,7 +81,7 @@ lapack_int LAPACKE_dgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose output matrices */ LAPACKE_dge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda ); - LAPACKE_dge_trans( LAPACK_COL_MAJOR, ldt, MIN(m,n), t_t, ldt_t, t, + LAPACKE_dge_trans( LAPACK_COL_MAJOR, nb, MIN(m,n), t_t, ldt_t, t, ldt ); /* Release memory and exit */ LAPACKE_free( t_t ); diff --git a/LAPACKE/src/lapacke_sgeqrt_work.c b/LAPACKE/src/lapacke_sgeqrt_work.c index 00ca6e5017..d00d04de71 100644 --- a/LAPACKE/src/lapacke_sgeqrt_work.c +++ b/LAPACKE/src/lapacke_sgeqrt_work.c @@ -45,7 +45,7 @@ lapack_int LAPACKE_sgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,m); - lapack_int ldt_t = MAX(1,ldt); + lapack_int ldt_t = MAX(1,nb); float* a_t = NULL; float* t_t = NULL; /* Check leading dimension(s) */ @@ -72,6 +72,7 @@ lapack_int LAPACKE_sgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose input matrices */ LAPACKE_sge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); + LAPACKE_sge_trans( matrix_layout, nb, MIN(m,n), t, ldt, t_t, ldt_t ); /* Call LAPACK function and adjust info */ LAPACK_sgeqrt( &m, &n, &nb, a_t, &lda_t, t_t, &ldt_t, work, &info ); if( info < 0 ) { @@ -79,7 +80,7 @@ lapack_int LAPACKE_sgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose output matrices */ LAPACKE_sge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda ); - LAPACKE_sge_trans( LAPACK_COL_MAJOR, ldt, MIN(m,n), t_t, ldt_t, t, + LAPACKE_sge_trans( LAPACK_COL_MAJOR, nb, MIN(m,n), t_t, ldt_t, t, ldt ); /* Release memory and exit */ LAPACKE_free( t_t ); diff --git a/LAPACKE/src/lapacke_zgeqrt_work.c b/LAPACKE/src/lapacke_zgeqrt_work.c index 8f6f1ed0ba..6ef59bdae0 100644 --- a/LAPACKE/src/lapacke_zgeqrt_work.c +++ b/LAPACKE/src/lapacke_zgeqrt_work.c @@ -46,7 +46,7 @@ lapack_int LAPACKE_zgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,m); - lapack_int ldt_t = MAX(1,ldt); + lapack_int ldt_t = MAX(1,nb); lapack_complex_double* a_t = NULL; lapack_complex_double* t_t = NULL; /* Check leading dimension(s) */ @@ -76,6 +76,7 @@ lapack_int LAPACKE_zgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose input matrices */ LAPACKE_zge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); + LAPACKE_zge_trans( matrix_layout, nb, MIN(m,n), t, ldt, t_t, ldt_t ); /* Call LAPACK function and adjust info */ LAPACK_zgeqrt( &m, &n, &nb, a_t, &lda_t, t_t, &ldt_t, work, &info ); if( info < 0 ) { @@ -83,7 +84,7 @@ lapack_int LAPACKE_zgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose output matrices */ LAPACKE_zge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda ); - LAPACKE_zge_trans( LAPACK_COL_MAJOR, ldt, MIN(m,n), t_t, ldt_t, t, + LAPACKE_zge_trans( LAPACK_COL_MAJOR, nb, MIN(m,n), t_t, ldt_t, t, ldt ); /* Release memory and exit */ LAPACKE_free( t_t ); From a942408a9a83f776f060b1ccf69c383340c1b4f3 Mon Sep 17 00:00:00 2001 From: sbite0138 Date: Thu, 8 Dec 2022 01:55:19 +0900 Subject: [PATCH 2/3] Revert change regarding ldt_t value --- LAPACKE/src/lapacke_cgeqrt_work.c | 2 +- LAPACKE/src/lapacke_dgeqrt_work.c | 2 +- LAPACKE/src/lapacke_sgeqrt_work.c | 2 +- LAPACKE/src/lapacke_zgeqrt_work.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/LAPACKE/src/lapacke_cgeqrt_work.c b/LAPACKE/src/lapacke_cgeqrt_work.c index 823ffc2c09..f9a4e17aae 100644 --- a/LAPACKE/src/lapacke_cgeqrt_work.c +++ b/LAPACKE/src/lapacke_cgeqrt_work.c @@ -46,7 +46,7 @@ lapack_int LAPACKE_cgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,m); - lapack_int ldt_t = MAX(1,nb); + lapack_int ldt_t = MAX(1,ldt); lapack_complex_float* a_t = NULL; lapack_complex_float* t_t = NULL; /* Check leading dimension(s) */ diff --git a/LAPACKE/src/lapacke_dgeqrt_work.c b/LAPACKE/src/lapacke_dgeqrt_work.c index 8a16f1e4e0..aa094f5116 100644 --- a/LAPACKE/src/lapacke_dgeqrt_work.c +++ b/LAPACKE/src/lapacke_dgeqrt_work.c @@ -45,7 +45,7 @@ lapack_int LAPACKE_dgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,m); - lapack_int ldt_t = MAX(1,nb); + lapack_int ldt_t = MAX(1,ldt); double* a_t = NULL; double* t_t = NULL; /* Check leading dimension(s) */ diff --git a/LAPACKE/src/lapacke_sgeqrt_work.c b/LAPACKE/src/lapacke_sgeqrt_work.c index d00d04de71..ecc3f482fb 100644 --- a/LAPACKE/src/lapacke_sgeqrt_work.c +++ b/LAPACKE/src/lapacke_sgeqrt_work.c @@ -45,7 +45,7 @@ lapack_int LAPACKE_sgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,m); - lapack_int ldt_t = MAX(1,nb); + lapack_int ldt_t = MAX(1,ldt); float* a_t = NULL; float* t_t = NULL; /* Check leading dimension(s) */ diff --git a/LAPACKE/src/lapacke_zgeqrt_work.c b/LAPACKE/src/lapacke_zgeqrt_work.c index 6ef59bdae0..1c8be3754e 100644 --- a/LAPACKE/src/lapacke_zgeqrt_work.c +++ b/LAPACKE/src/lapacke_zgeqrt_work.c @@ -46,7 +46,7 @@ lapack_int LAPACKE_zgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { lapack_int lda_t = MAX(1,m); - lapack_int ldt_t = MAX(1,nb); + lapack_int ldt_t = MAX(1,ldt); lapack_complex_double* a_t = NULL; lapack_complex_double* t_t = NULL; /* Check leading dimension(s) */ From b354d10d6f84f6fccbeb1827e015d52eaf35dc5d Mon Sep 17 00:00:00 2001 From: Weslley S Pereira Date: Tue, 23 May 2023 19:03:16 -0600 Subject: [PATCH 3/3] Remove unnecessary transposition of t_t on input --- LAPACKE/src/lapacke_cgeqrt_work.c | 1 - LAPACKE/src/lapacke_dgeqrt_work.c | 1 - LAPACKE/src/lapacke_sgeqrt_work.c | 1 - LAPACKE/src/lapacke_zgeqrt_work.c | 1 - 4 files changed, 4 deletions(-) diff --git a/LAPACKE/src/lapacke_cgeqrt_work.c b/LAPACKE/src/lapacke_cgeqrt_work.c index f9a4e17aae..3f8f0cf179 100644 --- a/LAPACKE/src/lapacke_cgeqrt_work.c +++ b/LAPACKE/src/lapacke_cgeqrt_work.c @@ -76,7 +76,6 @@ lapack_int LAPACKE_cgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose input matrices */ LAPACKE_cge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); - LAPACKE_cge_trans( matrix_layout, nb, MIN(m,n), t, ldt, t_t, ldt_t ); /* Call LAPACK function and adjust info */ LAPACK_cgeqrt( &m, &n, &nb, a_t, &lda_t, t_t, &ldt_t, work, &info ); if( info < 0 ) { diff --git a/LAPACKE/src/lapacke_dgeqrt_work.c b/LAPACKE/src/lapacke_dgeqrt_work.c index aa094f5116..000c94e0b6 100644 --- a/LAPACKE/src/lapacke_dgeqrt_work.c +++ b/LAPACKE/src/lapacke_dgeqrt_work.c @@ -73,7 +73,6 @@ lapack_int LAPACKE_dgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose input matrices */ LAPACKE_dge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); - LAPACKE_dge_trans( matrix_layout, nb, MIN(m,n), t, ldt, t_t, ldt_t ); /* Call LAPACK function and adjust info */ LAPACK_dgeqrt( &m, &n, &nb, a_t, &lda_t, t_t, &ldt_t, work, &info ); if( info < 0 ) { diff --git a/LAPACKE/src/lapacke_sgeqrt_work.c b/LAPACKE/src/lapacke_sgeqrt_work.c index ecc3f482fb..d357845aec 100644 --- a/LAPACKE/src/lapacke_sgeqrt_work.c +++ b/LAPACKE/src/lapacke_sgeqrt_work.c @@ -72,7 +72,6 @@ lapack_int LAPACKE_sgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose input matrices */ LAPACKE_sge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); - LAPACKE_sge_trans( matrix_layout, nb, MIN(m,n), t, ldt, t_t, ldt_t ); /* Call LAPACK function and adjust info */ LAPACK_sgeqrt( &m, &n, &nb, a_t, &lda_t, t_t, &ldt_t, work, &info ); if( info < 0 ) { diff --git a/LAPACKE/src/lapacke_zgeqrt_work.c b/LAPACKE/src/lapacke_zgeqrt_work.c index 1c8be3754e..633111533c 100644 --- a/LAPACKE/src/lapacke_zgeqrt_work.c +++ b/LAPACKE/src/lapacke_zgeqrt_work.c @@ -76,7 +76,6 @@ lapack_int LAPACKE_zgeqrt_work( int matrix_layout, lapack_int m, lapack_int n, } /* Transpose input matrices */ LAPACKE_zge_trans( matrix_layout, m, n, a, lda, a_t, lda_t ); - LAPACKE_zge_trans( matrix_layout, nb, MIN(m,n), t, ldt, t_t, ldt_t ); /* Call LAPACK function and adjust info */ LAPACK_zgeqrt( &m, &n, &nb, a_t, &lda_t, t_t, &ldt_t, work, &info ); if( info < 0 ) {