diff --git a/compute/pzgemm.c b/compute/pzgemm.c index dee1fc2fc8ae80f6dcc294ef37d4fc6c90dda5c7..a863579d66797362f774743317f1418e72c28da1 100644 --- a/compute/pzgemm.c +++ b/compute/pzgemm.c @@ -45,14 +45,12 @@ chameleon_pzgemm_Astat( CHAM_context_t *chamctxt, cham_trans_t transA, cham_tran RUNTIME_sequence_t *sequence = options->sequence; int m, n, k; int tempmm, tempnn, tempkn, tempkm; - int myrank = RUNTIME_comm_rank( chamctxt ); - int reduceC[ C->mt * C->nt ]; + int myrank = RUNTIME_comm_rank( chamctxt ); + int8_t *reduceC = calloc( C->mt * C->nt, sizeof(int8_t) ); /* Set C tiles to redux mode. */ for (n = 0; n < C->nt; n++) { for (m = 0; m < C->mt; m++) { - reduceC[ n * C->mt + m ] = 0; - /* The node owns the C tile. */ if ( C->get_rankof( C(m, n) ) == myrank ) { reduceC[ n * C->mt + m ] = 1; @@ -169,6 +167,7 @@ chameleon_pzgemm_Astat( CHAM_context_t *chamctxt, cham_trans_t transA, cham_tran } } options->forcesub = 0; + free( reduceC ); (void)chamctxt; } diff --git a/compute/pzgenm2.c b/compute/pzgenm2.c index 28aedb8292c7afa1288a990cbff805392ac44c61..36b0ae6ee45dfdd82639f8cc521626da93aee1a8 100644 --- a/compute/pzgenm2.c +++ b/compute/pzgenm2.c @@ -167,8 +167,6 @@ chameleon_pzgenm2( double tol, const CHAM_desc_t *A, double *result, chameleon_desc_destroy( &DROW ); chameleon_desc_destroy( &NRMX ); return; - } else { - normx = *result; } chameleon_desc_init( &NRMSX, CHAMELEON_MAT_ALLOC_GLOBAL, ChamRealDouble, 2, 1, 2, diff --git a/compute/pzhemm.c b/compute/pzhemm.c index 56b2c7267e4eb6279c36c9147eabb9b5fec80b9a..32d949c89cb6212f780e9c59713ec9e22d629bc8 100644 --- a/compute/pzhemm.c +++ b/compute/pzhemm.c @@ -48,13 +48,11 @@ chameleon_pzhemm_Astat( CHAM_context_t *chamctxt, cham_side_t side, cham_uplo_t int k, m, n, l, Am, An; int tempmm, tempnn, tempkn, tempkm; int myrank = RUNTIME_comm_rank( chamctxt ); - int reduceC[ C->mt * C->nt ]; + int8_t *reduceC = calloc( C->mt * C->nt, sizeof(int8_t) ); /* Set C tiles to redux mode */ for (n = 0; n < C->nt; n++) { for (m = 0; m < C->mt; m++) { - reduceC[ n * C->mt + m ] = 0; - /* The node owns the C tile. */ if ( C->get_rankof( C(m, n) ) == myrank ) { reduceC[ n * C->mt + m ] = 1; @@ -124,9 +122,6 @@ chameleon_pzhemm_Astat( CHAM_context_t *chamctxt, cham_side_t side, cham_uplo_t /* * ChamLeft / ChamLower */ - /* Select row or column based on side */ - l = ( side == ChamLeft ) ? m : n; - if (side == ChamLeft) { if (uplo == ChamLower) { for (k = 0; k < C->mt; k++) { @@ -278,6 +273,8 @@ chameleon_pzhemm_Astat( CHAM_context_t *chamctxt, cham_side_t side, cham_uplo_t } } options->forcesub = 0; + free( reduceC ); + (void)chamctxt; } diff --git a/compute/pzsymm.c b/compute/pzsymm.c index 481b32be8722314a7ae92c0939b6b8758df1824c..224137173d589d915a42429d9421088c528078a5 100644 --- a/compute/pzsymm.c +++ b/compute/pzsymm.c @@ -49,13 +49,11 @@ chameleon_pzsymm_Astat( CHAM_context_t *chamctxt, cham_side_t side, cham_uplo_t int k, m, n, l, Am, An; int tempmm, tempnn, tempkn, tempkm; int myrank = RUNTIME_comm_rank( chamctxt ); - int reduceC[ C->mt * C->nt ]; + int8_t *reduceC = calloc( C->mt * C->nt, sizeof(int8_t) ); /* Set C tiles to redux mode */ for (n = 0; n < C->nt; n++) { for (m = 0; m < C->mt; m++) { - reduceC[ n * C->mt + m ] = 0; - /* The node owns the C tile. */ if ( C->get_rankof( C(m, n) ) == myrank ) { reduceC[ n * C->mt + m ] = 1; @@ -125,9 +123,6 @@ chameleon_pzsymm_Astat( CHAM_context_t *chamctxt, cham_side_t side, cham_uplo_t /* * ChamLeft / ChamLower */ - /* Select row or column based on side */ - l = ( side == ChamLeft ) ? m : n; - if (side == ChamLeft) { if (uplo == ChamLower) { for (k = 0; k < C->mt; k++) { @@ -279,6 +274,8 @@ chameleon_pzsymm_Astat( CHAM_context_t *chamctxt, cham_side_t side, cham_uplo_t } } options->forcesub = 0; + free( reduceC ); + (void)chamctxt; } diff --git a/compute/zprint.c b/compute/zprint.c index 3dbd715e2c9120918817caa944836222ce344292..fe44e05d4026610e716744b722447b2e8b9dadd1 100644 --- a/compute/zprint.c +++ b/compute/zprint.c @@ -42,7 +42,6 @@ zprint( const CHAM_desc_t *descA, int tempmm = m == descA->mt-1 ? descA->m-m*descA->mb : descA->mb; int tempnn = n == descA->nt-1 ? descA->n-n*descA->nb : descA->nb; - int minmn = chameleon_min( tempmm, tempnn ); int lda, i; if ( zprint_runtime_id == RUNTIME_SCHED_PARSEC ) { diff --git a/coreblas/include/coreblas/sumsq_update.h b/coreblas/include/coreblas/sumsq_update.h index 11f8503623ac1334c931d5f1fb2f92ae0ffaa899..b0c39dce4b0eee7892d4a9a7fce48508162468ba 100644 --- a/coreblas/include/coreblas/sumsq_update.h +++ b/coreblas/include/coreblas/sumsq_update.h @@ -41,8 +41,8 @@ * The value to integrate into the couple (scale, sumsq) * *******************************************************************************/ -static inline void #if defined(PRECISION_d) || defined(PRECISION_z) +static inline void sumsq_update( int nb, double *scale, double *sumsq, const double *value ) { double absval = fabs(*value); @@ -59,6 +59,7 @@ sumsq_update( int nb, double *scale, double *sumsq, const double *value ) } } #elif defined(PRECISION_s) || defined(PRECISION_c) +static inline void sumsq_update( int nb, float *scale, float *sumsq, const float *value ) { float absval = fabs(*value); @@ -99,8 +100,8 @@ sumsq_update( int nb, float *scale, float *sumsq, const float *value ) * The value to integrate into the couple (scale, sumsq) * *******************************************************************************/ -static inline void #if defined(PRECISION_d) || defined(PRECISION_z) +static inline void sumsq_update_2( const double *scalein, const double *sumsqin, double *scaleout, double *sumsqout ) { if (*scaleout >= 0.) { @@ -115,6 +116,7 @@ sumsq_update_2( const double *scalein, const double *sumsqin, double *scaleout, } } #elif defined(PRECISION_s) || defined(PRECISION_c) +static inline void sumsq_update_2( const float *scalein, const float *sumsqin, float *scaleout, float *sumsqout ) { if (*scaleout >= 0.) { diff --git a/cudablas/compute/cuda_zlarfb.c b/cudablas/compute/cuda_zlarfb.c index 5039d0265ca88a197568f7aa597384f44b212f08..8175d1944d74d50ec90f8d59be655c48c3f87942 100644 --- a/cudablas/compute/cuda_zlarfb.c +++ b/cudablas/compute/cuda_zlarfb.c @@ -45,6 +45,7 @@ CUDA_zlarfb( cham_side_t side, cham_trans_t trans, cublasStatus_t rc; cham_trans_t transT, notransV, transV; cham_uplo_t uplo; + int info = 0; /* Check input arguments */ if ((side != ChamLeft) && (side != ChamRight)) { @@ -111,6 +112,7 @@ CUDA_zlarfb( cham_side_t side, cham_trans_t trans, V, LDV, CUBLAS_SADDR(zzero), WORK, LDWORK ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; // W = W T^H = C^H V T^H CUDA_ztrmm( ChamRight, uplo, transT, ChamNonUnit, @@ -127,6 +129,7 @@ CUDA_zlarfb( cham_side_t side, cham_trans_t trans, WORK, LDWORK, CUBLAS_SADDR(zone), C, LDC ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; } else { // Form C H or C H^H @@ -140,6 +143,7 @@ CUDA_zlarfb( cham_side_t side, cham_trans_t trans, V, LDV, CUBLAS_SADDR(zzero), WORK, LDWORK ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; // W = W T = C V T CUDA_ztrmm( ChamRight, uplo, trans, ChamNonUnit, @@ -156,7 +160,8 @@ CUDA_zlarfb( cham_side_t side, cham_trans_t trans, V, LDV, CUBLAS_SADDR(zone), C, LDC ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; } - return (rc == CUBLAS_STATUS_SUCCESS) ? CHAMELEON_SUCCESS : CHAMELEON_ERR_UNEXPECTED; + return (info == 0) ? CHAMELEON_SUCCESS : CHAMELEON_ERR_UNEXPECTED; } diff --git a/cudablas/compute/cuda_zparfb.c b/cudablas/compute/cuda_zparfb.c index 39aaa7586df4ec0ca904997dd7e9fca7e28c3106..8977eb6a169c64e98da17f6c82edc0195733c6c8 100644 --- a/cudablas/compute/cuda_zparfb.c +++ b/cudablas/compute/cuda_zparfb.c @@ -165,6 +165,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, cham_trans_t transW, transA2; int wssize = 0; int wrsize = 0; + int info = 0; /* Check input arguments */ if ((side != ChamLeft) && (side != ChamRight)) { @@ -315,6 +316,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, A2 /* M2*N2 */, LDA2, CUBLAS_SADDR(zone), workW /* K *N2 */, ldW ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; if ( workC == NULL ) { /* W = op(T) * W */ @@ -331,6 +333,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workW + ldW * j, 1, A1 + LDA1 * j, 1 ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; } /* A2 = A2 - op(V) * W */ @@ -341,6 +344,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workW /* K * N2 */, ldW, CUBLAS_SADDR(zone), A2 /* M2 * N2 */, LDA2 ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; } else { /* Wc = V * op(T) */ @@ -350,6 +354,8 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, CUBLAS_SADDR(zone), workV, ldV, T, LDT, CUBLAS_SADDR(zzero), workC, ldC ); + assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; /* A1 = A1 - opt(T) * W */ rc = cublasZgemm( handle, @@ -359,6 +365,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workW, ldW, CUBLAS_SADDR(zone), A1, LDA1 ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; /* A2 = A2 - Wc * W */ rc = cublasZgemm( handle, @@ -368,6 +375,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workW, ldW, CUBLAS_SADDR(zone), A2, LDA2 ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; } } else { @@ -463,6 +471,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workV /* K *N2 */, ldV, CUBLAS_SADDR(zone), workW /* M1*K */, ldW); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; if ( workC == NULL ) { /* W = W * op(T) */ @@ -479,6 +488,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workW + ldW * j, 1, A1 + LDA1 * j, 1 ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; } /* A2 = A2 - W * op(V) */ @@ -489,6 +499,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workV /* K *N2 */, ldV, CUBLAS_SADDR(zone), A2 /* M2*N2 */, LDA2); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; } else { /* A1 = A1 - W * opt(T) */ @@ -499,6 +510,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, T, LDT, CUBLAS_SADDR(zone), A1, LDA1 ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; /* Wc = op(T) * V */ rc = cublasZgemm( handle, @@ -508,6 +520,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workV, ldV, CUBLAS_SADDR(zzero), workC, ldC ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; /* A2 = A2 - W * Wc */ rc = cublasZgemm( handle, @@ -517,6 +530,7 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, workC, ldC, CUBLAS_SADDR(zone), A2, LDA2 ); assert( rc == CUBLAS_STATUS_SUCCESS ); + info += (rc == CUBLAS_STATUS_SUCCESS) ? 0 : 1; } } } @@ -525,5 +539,5 @@ CUDA_zparfb( cham_side_t side, cham_trans_t trans, return CHAMELEON_ERR_NOT_SUPPORTED; } - return (rc == CUBLAS_STATUS_SUCCESS) ? CHAMELEON_SUCCESS : CHAMELEON_ERR_UNEXPECTED; + return (info == 0) ? CHAMELEON_SUCCESS : CHAMELEON_ERR_UNEXPECTED; } diff --git a/runtime/starpu/control/runtime_control.c b/runtime/starpu/control/runtime_control.c index d527cd56b307ad2dc033bf7ecc878a26cddff523..450fecf315ff69f85e62c2b790eb6fee6cfe30a4 100644 --- a/runtime/starpu/control/runtime_control.c +++ b/runtime/starpu/control/runtime_control.c @@ -45,7 +45,7 @@ void chameleon_starpu_parallel_worker_init( starpu_sched_opt_t *sched_opt ) char level[256]; int argc = strchr( env_pw_level, ':') == NULL ? 1 : 2; - int match = sscanf( env_pw_level, "%[^:]:%d", level, &pw_level_number ); + int match = sscanf( env_pw_level, "%255[^:]:%d", level, &pw_level_number ); #if !defined(CHAMELEON_KERNELS_MT) chameleon_warning("chameleon_starpu_parallel_worker_init()", "CHAMELEON has been compiled with multi-threaded kernels disabled (-DCHAMELEON_KERNELS_MT=OFF). This won't break the execution, but you may not obtain the performance gain expected. It is recommended to recompile with -DCHAMELEON_KERNELS_MT=ON.\n"); diff --git a/runtime/starpu/control/runtime_descriptor.c b/runtime/starpu/control/runtime_descriptor.c index 3438d0cb28cd51e549a488987ccd3d17e8afdaa2..36dda081062b9840531622c0c46e4de29a1eaaf1 100644 --- a/runtime/starpu/control/runtime_descriptor.c +++ b/runtime/starpu/control/runtime_descriptor.c @@ -339,9 +339,7 @@ void RUNTIME_data_flush( const RUNTIME_sequence_t *sequence, int64_t nn = n + (A->j / A->nb); int64_t shift = ((int64_t)A->lmt) * nn + mm; starpu_data_handle_t *handle = A->schedopt; - CHAM_tile_t *tile = A->tiles; handle += shift; - tile += shift; if (*handle == NULL) { return; @@ -403,7 +401,7 @@ void *RUNTIME_data_getaddr( const CHAM_desc_t *A, int m, int n ) ptrtile += ((int64_t)A->lmt) * nn + mm; if ( *ptrtile != NULL ) { - return *ptrtile; + return (void*)(*ptrtile); } int home_node = -1; @@ -443,5 +441,5 @@ void *RUNTIME_data_getaddr( const CHAM_desc_t *A, int m, int n ) tile->name, *ptrtile, A->mpitag + A->lmt * nn + mm ); #endif assert( *ptrtile ); - return *ptrtile; + return (void*)(*ptrtile); } diff --git a/runtime/starpu/control/runtime_tags.c b/runtime/starpu/control/runtime_tags.c index 32c481a0d11a0970bd502bfc5800f0de4a6ead1d..3030d12c5a346dc9cdcebe5f95445b5fa6b2082e 100644 --- a/runtime/starpu/control/runtime_tags.c +++ b/runtime/starpu/control/runtime_tags.c @@ -165,6 +165,14 @@ chameleon_starpu_tag_release( int64_t min ) cst_range_t *current = cst_first; assert( cst_first != NULL ); /* At least one range must be registered */ + if ( current == NULL ) { +#if defined(CHAMELEON_DEBUG_STARPU) + fprintf( stderr, "chameleon_starpu_tag: FAILED to release [%ld,...]\n", + min ); +#endif + + return; + } while ( (current != NULL) && (current->min < min) ) { prev = current; diff --git a/testing/parameters.c b/testing/parameters.c index b94b54701591c29a8faf16ab5dd8803011477eba..8f6e1f4adb390c137411f0abf2222685b56b2415 100644 --- a/testing/parameters.c +++ b/testing/parameters.c @@ -305,7 +305,7 @@ void parameters_read( parameter_t *param, const char *values ) { - int range = ( strchr( values, ':' ) != NULL ); + int range = (values != NULL) && ( strchr( values, ':' ) != NULL ); /* If we have a ranged of integer values */ if ( range ) diff --git a/testing/testing_zgesvd.c b/testing/testing_zgesvd.c index 3f8b023fe5a6c2515e90bba3ad9f08a3e898638c..6c1509e3ae73c65560567b0e6106b55a94971856 100644 --- a/testing/testing_zgesvd.c +++ b/testing/testing_zgesvd.c @@ -53,7 +53,8 @@ flops_zgesvd( int M, int N, int K, cham_job_t jobu, cham_job_t jobvt ) ; } - return -1; + flops *= -1.; /* make it negative as long as the formulae is not complete */ + return flops; } int @@ -236,6 +237,10 @@ testing_zgesvd_std( run_arg_list_t *args, int check ) /* Fills the matrix with random values */ hres = CHAMELEON_zlatms( M, N, ChamDistUniform, seedA, ChamNonsymPosv, D, mode, cond, 1., A, LDA ); if ( hres != 0 ) { + free( D ); + free( S ); + if ( U ) { free( U ); } + if ( Vt ) { free( Vt ); } return hres; } /* @@ -262,13 +267,10 @@ testing_zgesvd_std( run_arg_list_t *args, int check ) } free( A ); + free( D ); free( S ); - if ( (jobu == ChamAllVec) || (jobu == ChamSVec) ) { - free( U ); - } - if ( (jobvt == ChamAllVec) || (jobvt == ChamSVec) ) { - free( Vt ); - } + if ( U ) { free( U ); } + if ( Vt ) { free( Vt ); } CHAMELEON_Desc_Destroy( &descT ); return hres; diff --git a/testing/testing_zunglq.c b/testing/testing_zunglq.c index 6e2aa96a15f96c1c0e095ba068475397fa3907e4..63bc4daeed11fbaa3c2a551af9f5588d4d30876e 100644 --- a/testing/testing_zunglq.c +++ b/testing/testing_zunglq.c @@ -80,6 +80,12 @@ testing_zunglq_desc( run_arg_list_t *args, int check ) /* Fills the matrix with random values */ CHAMELEON_zplrnt_Tile( descA, seedA ); hres = CHAMELEON_zgelqf_Tile( descA, descT ); + if ( hres != CHAMELEON_SUCCESS ) { + CHAMELEON_Desc_Flush( descA, test_data.sequence ); + CHAMELEON_Desc_Flush( descT, test_data.sequence ); + CHAMELEON_Desc_Flush( descQ, test_data.sequence ); + return hres; + } /* Calculates the solution */ testing_start( &test_data ); diff --git a/testing/testing_zunglq_hqr.c b/testing/testing_zunglq_hqr.c index e55034cd05d65e1af0279ee6cf9f66e74916ce94..63f922a7eaf4c6201287d7df1b7e8201b9cb7316 100644 --- a/testing/testing_zunglq_hqr.c +++ b/testing/testing_zunglq_hqr.c @@ -87,6 +87,13 @@ testing_zunglq_hqr_desc( run_arg_list_t *args, int check ) /* Fills the matrix with random values */ CHAMELEON_zplrnt_Tile( descA, seedA ); hres = CHAMELEON_zgelqf_param_Tile( &qrtree, descA, descTS, descTT ); + if ( hres != CHAMELEON_SUCCESS ) { + CHAMELEON_Desc_Flush( descA, test_data.sequence ); + CHAMELEON_Desc_Flush( descTS, test_data.sequence ); + CHAMELEON_Desc_Flush( descTT, test_data.sequence ); + CHAMELEON_Desc_Flush( descQ, test_data.sequence ); + return hres; + } /* Calculates the solution */ testing_start( &test_data ); diff --git a/testing/testing_zungqr.c b/testing/testing_zungqr.c index fae6002db07acb71f3105d08f49e9ffd570402d7..1a719e929650901f75eafad5efa63fa136f8587f 100644 --- a/testing/testing_zungqr.c +++ b/testing/testing_zungqr.c @@ -80,6 +80,12 @@ testing_zungqr_desc( run_arg_list_t *args, int check ) /* Fills the matrix with random values */ CHAMELEON_zplrnt_Tile( descA, seedA ); hres = CHAMELEON_zgeqrf_Tile( descA, descT ); + if ( hres != CHAMELEON_SUCCESS ) { + CHAMELEON_Desc_Flush( descA, test_data.sequence ); + CHAMELEON_Desc_Flush( descT, test_data.sequence ); + CHAMELEON_Desc_Flush( descQ, test_data.sequence ); + return hres; + } /* Calculates the solution */ testing_start( &test_data ); diff --git a/testing/testing_zungqr_hqr.c b/testing/testing_zungqr_hqr.c index 8935e0f7a1ec37784379843ac539a31431f2fac3..e8f26af0596fb8f26710c28a166cba1b82a67101 100644 --- a/testing/testing_zungqr_hqr.c +++ b/testing/testing_zungqr_hqr.c @@ -87,6 +87,13 @@ testing_zungqr_hqr_desc( run_arg_list_t *args, int check ) /* Fills the matrix with random values */ CHAMELEON_zplrnt_Tile( descA, seedA ); hres = CHAMELEON_zgeqrf_param_Tile( &qrtree, descA, descTS, descTT ); + if ( hres != CHAMELEON_SUCCESS ) { + CHAMELEON_Desc_Flush( descA, test_data.sequence ); + CHAMELEON_Desc_Flush( descTS, test_data.sequence ); + CHAMELEON_Desc_Flush( descTT, test_data.sequence ); + CHAMELEON_Desc_Flush( descQ, test_data.sequence ); + return hres; + } /* Calculates the solution */ testing_start( &test_data );