diff --git a/compute/pzplghe.c b/compute/pzplghe.c index 26fa75c031c2b85b57ae60b972c87d3f934f9a90..e1d73ad6bbe78e3999cbc1358bbe6775d441a6bd 100644 --- a/compute/pzplghe.c +++ b/compute/pzplghe.c @@ -75,6 +75,7 @@ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A, A->m, m*A->mb, n*A->nb, seed ); } } + break; case ChamUpperLower: default: diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c index cddda67a55e03239b06ab91726bb23ef8546268c..73f05ceaf0764f15f64b248bee1765ab8468bb59 100644 --- a/compute/pzplgsy.c +++ b/compute/pzplgsy.c @@ -75,6 +75,7 @@ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_ A->m, m*A->mb, n*A->nb, seed ); } } + break; case ChamUpperLower: default: diff --git a/compute/zheevd.c b/compute/zheevd.c index f794669c146c5cdbcd8768d5cb5b4bf9c7457be7..9c12a00ba366d4a6080e403a995258701ebdb07b 100644 --- a/compute/zheevd.c +++ b/compute/zheevd.c @@ -437,6 +437,8 @@ int CHAMELEON_zheevd_Tile_Async( cham_job_t jobz, cham_uplo_t uplo, V = malloc( N * N * sizeof(CHAMELEON_Complex64_t) ); if (V == NULL) { chameleon_error("CHAMELEON_zheevd_Tile_Async", "malloc(V) failed"); + free(E); + free(Q2); free(V); return CHAMELEON_ERR_OUT_OF_RESOURCES; } diff --git a/compute/ztile.c b/compute/ztile.c index 00c63cc16fdfdfc2b02a34170eb65b6c70e685d8..580f520d6c247265be34d6207a2e38e04a7ac795 100644 --- a/compute/ztile.c +++ b/compute/ztile.c @@ -75,9 +75,14 @@ int CHAMELEON_zLapack_to_Tile( CHAMELEON_Complex64_t *Af77, int LDA, CHAM_desc_t } /* Create the B descriptor to handle the Lapack format matrix */ - CHAMELEON_Desc_Create_User( &B, Af77, ChamComplexDouble, A->mb, A->nb, A->bsiz, - LDA, A->n, 0, 0, A->m, A->n, 1, 1, - chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); + status = CHAMELEON_Desc_Create_User( &B, Af77, ChamComplexDouble, A->mb, A->nb, A->bsiz, + LDA, A->n, 0, 0, A->m, A->n, 1, 1, + chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); + if ( status != CHAMELEON_SUCCESS ) { + chameleon_error("CHAMELEON_zTile_to_Lapack", "Failed to create the descriptor"); + return status; + } + /* Start the computation */ chameleon_sequence_create( chamctxt, &sequence ); @@ -151,9 +156,13 @@ int CHAMELEON_zTile_to_Lapack( CHAM_desc_t *A, CHAMELEON_Complex64_t *Af77, int } /* Create the B descriptor to handle the Lapack format matrix */ - CHAMELEON_Desc_Create_User( &B, Af77, ChamComplexDouble, A->mb, A->nb, A->bsiz, - LDA, A->n, 0, 0, A->m, A->n, 1, 1, - chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); + status = CHAMELEON_Desc_Create_User( &B, Af77, ChamComplexDouble, A->mb, A->nb, A->bsiz, + LDA, A->n, 0, 0, A->m, A->n, 1, 1, + chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); + if ( status != CHAMELEON_SUCCESS ) { + chameleon_error("CHAMELEON_zTile_to_Lapack", "Failed to create the descriptor"); + return status; + } /* Start the computation */ chameleon_sequence_create( chamctxt, &sequence ); diff --git a/control/descriptor.c b/control/descriptor.c index 52584a44646b9fd1305876708626cc7423b8d9f4..3df1e6766a307741a76f806bec4b5042de487224 100644 --- a/control/descriptor.c +++ b/control/descriptor.c @@ -559,8 +559,6 @@ int CHAMELEON_Desc_Create_User( CHAM_desc_t **descptr, void *mat, cham_flttype_t CHAM_desc_t *desc; int status; - *descptr = NULL; - chamctxt = chameleon_context_self(); if (chamctxt == NULL) { chameleon_error("CHAMELEON_Desc_Create_User", "CHAMELEON not initialized"); diff --git a/control/workspace.c b/control/workspace.c index c7b010c3e604689fd1547a0917cf8ac1e3645f45..52fb945ab041d03441f1081a22a83cb6094c2bdb 100644 --- a/control/workspace.c +++ b/control/workspace.c @@ -71,8 +71,8 @@ int chameleon_alloc_ibnb_tile(int M, int N, cham_tasktype_t func, int type, CHAM NT *= 2; } - lm = IB * MT; - ln = NB * NT; + lm = (int64_t)IB * (int64_t)MT; + ln = (int64_t)NB * (int64_t)NT; return CHAMELEON_Desc_Create( desc, CHAMELEON_MAT_ALLOC_TILE, type, IB, NB, IB*NB, lm, ln, 0, 0, lm, ln, p, q ); @@ -109,8 +109,8 @@ int chameleon_alloc_ipiv(int M, int N, cham_tasktype_t func, int type, CHAM_desc NT = (N%NB==0) ? (N/NB) : ((N/NB)+1); MT = (M%NB==0) ? (M/NB) : ((M/NB)+1); - lm = IB * MT; - ln = NB * NT; + lm = (int64_t)IB * (int64_t)MT; + ln = (int64_t)NB * (int64_t)NT; size = (size_t)(chameleon_min(MT, NT) * NB * NT * sizeof(int)); if (size == 0) { diff --git a/coreblas/compute/core_zlatro.c b/coreblas/compute/core_zlatro.c index eb276e3732470a8c9004153d314f109087aa8cd9..e86b2b17c9584af4c1d2a58f37b6f32f1a01e161 100644 --- a/coreblas/compute/core_zlatro.c +++ b/coreblas/compute/core_zlatro.c @@ -117,7 +117,9 @@ int CORE_zlatro(cham_uplo_t uplo, cham_trans_t trans, CORE_zlacpy(uplo, M, N, A, LDA, B, LDB); } else { - if (trans == ChamConjTrans) { +#if defined(PRECISION_z) || defined(PRECISION_c) + if (trans == ChamConjTrans) + { if(uplo == ChamUpper) { for(j=0; j<N; j++) for(i=0; i<chameleon_min(j+1,M); i++) @@ -134,7 +136,9 @@ int CORE_zlatro(cham_uplo_t uplo, cham_trans_t trans, B[j+i*LDB] = conj(A[i+j*LDA]); } } - else { + else +#endif + { if(uplo==ChamUpper) { for(j=0;j<N;j++) for(i=0;i<chameleon_min(j+1,M);i++) diff --git a/coreblas/compute/core_ztile.c b/coreblas/compute/core_ztile.c index def292605dddc3090255e8f1dd559f044ddd3bfc..a1ff2c1839f2e05fde45ee546b2b71b6b2800144 100644 --- a/coreblas/compute/core_ztile.c +++ b/coreblas/compute/core_ztile.c @@ -783,8 +783,8 @@ TCORE_zunmlq( cham_side_t side, cham_trans_t trans, int M, int N, - int IB, int K, + int IB, const CHAM_tile_t * V, const CHAM_tile_t * T, CHAM_tile_t * C, @@ -795,7 +795,7 @@ TCORE_zunmlq( cham_side_t side, assert( T->format & CHAMELEON_TILE_FULLRANK ); assert( C->format & CHAMELEON_TILE_FULLRANK ); return CORE_zunmlq( - side, trans, M, N, IB, K, V->mat, V->ld, T->mat, T->ld, C->mat, C->ld, WORK, LDWORK ); + side, trans, M, N, K, IB, V->mat, V->ld, T->mat, T->ld, C->mat, C->ld, WORK, LDWORK ); } int diff --git a/hqr b/hqr index 621a15b8241717f9e8eb5774eadcb6b6d394e99a..c05aef8974161f46281170232fbe604f3fe2a68d 160000 --- a/hqr +++ b/hqr @@ -1 +1 @@ -Subproject commit 621a15b8241717f9e8eb5774eadcb6b6d394e99a +Subproject commit c05aef8974161f46281170232fbe604f3fe2a68d diff --git a/new-testing/testing_zcheck.c b/new-testing/testing_zcheck.c index 52fc9f396d5b2945a961a89fcf20dc27e560d51e..d2f33920eee681d4a84140c4e62a522e7ca9abc3 100644 --- a/new-testing/testing_zcheck.c +++ b/new-testing/testing_zcheck.c @@ -87,13 +87,13 @@ int check_zmatrices( run_arg_list_t *args, cham_uplo_t uplo, CHAM_desc_t *descA, } else { Anorm = LAPACKE_zlantr_work( LAPACK_COL_MAJOR, 'M', chameleon_lapack_const(uplo), 'N', - M, N, B, LDA, work ); + M, N, A, LDA, work ); } /* Computes the difference with the core function */ CORE_zgeadd( ChamNoTrans, M, N, 1, A, LDA, -1, B, LDA ); - /* Computes the residue's norm */ + /* Computes the residual's norm */ if ( uplo == ChamUpperLower ) { Rnorm = LAPACKE_zlange_work( LAPACK_COL_MAJOR, 'M', M, N, B, LDA, work ); } @@ -608,20 +608,26 @@ int check_zsymm( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_side_t s CHAMELEON_Complex64_t mzone = -1.0; if ( side == ChamLeft ) { +#if defined(PRECISION_z) || defined(PRECISION_c) if ( matrix_type == ChamHermitian ) { Anorm = CHAMELEON_zlanhe_Tile(ChamInfNorm, uplo, descA); } - else { + else +#endif + { Anorm = CHAMELEON_zlansy_Tile(ChamInfNorm, uplo, descA); } Bnorm = CHAMELEON_zlange_Tile(ChamOneNorm, descB); LDA = M; An = M; } else { +#if defined(PRECISION_z) || defined(PRECISION_c) if ( matrix_type == ChamHermitian ) { Anorm = CHAMELEON_zlanhe_Tile(ChamOneNorm, uplo, descA); } - else { + else +#endif + { Anorm = CHAMELEON_zlansy_Tile(ChamOneNorm, uplo, descA); } Bnorm = CHAMELEON_zlange_Tile(ChamInfNorm, descB); @@ -650,12 +656,15 @@ int check_zsymm( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_side_t s double eps = LAPACKE_dlamch_work('e'); /* Makes the multiplication with the core function */ +#if defined(PRECISION_z) || defined(PRECISION_c) if ( matrix_type == ChamHermitian ) { cblas_zhemm( CblasColMajor, (CBLAS_SIDE)side, (CBLAS_UPLO)uplo, M, N, CBLAS_SADDR(alpha), A, LDA, B, LDB, CBLAS_SADDR(beta), Cref, LDC ); } - else { + else +#endif + { cblas_zsymm( CblasColMajor, (CBLAS_SIDE)side, (CBLAS_UPLO)uplo, M, N, CBLAS_SADDR(alpha), A, LDA, B, LDB, CBLAS_SADDR(beta), Cref, LDC ); @@ -764,11 +773,14 @@ int check_zsyrk( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_uplo_t u } /* Computes the norms for comparing */ +#if defined(PRECISION_z) || defined(PRECISION_c) if ( matrix_type == ChamHermitian ) { Crefnorm = CHAMELEON_zlanhe_Tile( ChamInfNorm, uplo, descCref ); Cchamnorm = CHAMELEON_zlanhe_Tile( ChamInfNorm, uplo, descC ); } - else { + else +#endif + { Crefnorm = CHAMELEON_zlansy_Tile( ChamInfNorm, uplo, descCref ); Cchamnorm = CHAMELEON_zlansy_Tile( ChamInfNorm, uplo, descC ); } @@ -796,6 +808,7 @@ int check_zsyrk( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_uplo_t u double *work = malloc(sizeof(double)*N); /* Makes the multiplication with the core function */ +#if defined(PRECISION_z) || defined(PRECISION_c) if ( matrix_type == ChamHermitian ) { if ( descB == NULL ) { cblas_zherk( CblasColMajor, (CBLAS_UPLO)uplo, (CBLAS_TRANSPOSE)trans, @@ -807,8 +820,12 @@ int check_zsyrk( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_uplo_t u N, K, CBLAS_SADDR(alpha), A, LDA, B, LDA, creal(beta), Cref, LDC ); ABnorm = 2. * Anorm * Bnorm; } + + Clapacknorm = LAPACKE_zlanhe_work( LAPACK_COL_MAJOR, 'I', chameleon_lapack_const(uplo), N, Cref, LDC, work ); } - else { + else +#endif + { if ( descB == NULL ) { cblas_zsyrk( CblasColMajor, (CBLAS_UPLO)uplo, (CBLAS_TRANSPOSE)trans, N, K, CBLAS_SADDR(alpha), A, LDA, CBLAS_SADDR(beta), Cref, LDC ); @@ -819,22 +836,22 @@ int check_zsyrk( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_uplo_t u N, K, CBLAS_SADDR(alpha), A, LDA, B, LDA, CBLAS_SADDR(beta), Cref, LDC ); ABnorm = 2. * Anorm * Bnorm; } - } - if ( matrix_type == ChamHermitian ) { - Clapacknorm = LAPACKE_zlanhe_work( LAPACK_COL_MAJOR, 'I', chameleon_lapack_const(uplo), N, Cref, LDC, work ); - } - else { + Clapacknorm = LAPACKE_zlansy_work( LAPACK_COL_MAJOR, 'I', chameleon_lapack_const(uplo), N, Cref, LDC, work ); } + CORE_ztradd( uplo, ChamNoTrans, N, N, -1., C, LDC, 1., Cref, LDC ); /* Computes the norm with the core function's result */ +#if defined(PRECISION_z) || defined(PRECISION_c) if ( matrix_type == ChamHermitian ) { Rnorm = LAPACKE_zlanhe_work( LAPACK_COL_MAJOR, 'M', chameleon_lapack_const(uplo), N, Cref, LDC, NULL ); } - else { + else +#endif + { Rnorm = LAPACKE_zlansy_work( LAPACK_COL_MAJOR, 'M', chameleon_lapack_const(uplo), N, Cref, LDC, NULL ); } result = Rnorm / ((ABnorm + Crefnorm) * K * eps);