diff --git a/compute/pzunmlq_param.c b/compute/pzunmlq_param.c index 49c48106003b99fb177296f6db6004c80beb1766..5c584c680383a3e7975c27a575d6ec49ea539374 100644 --- a/compute/pzunmlq_param.c +++ b/compute/pzunmlq_param.c @@ -306,6 +306,7 @@ void morse_pzunmlq_param(const libhqr_tree_t *qrtree, else { for (m = 0; m < B->mt; m++) { tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb; + ldbm = BLKLDD(B, m); MORSE_TASK_zttmlq( &options, side, trans, @@ -406,6 +407,7 @@ void morse_pzunmlq_param(const libhqr_tree_t *qrtree, if(qrtree->gettype(qrtree, k, n) == 0){ for (m = 0; m < B->mt; m++) { tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb; + ldbm = BLKLDD(B, m); MORSE_TASK_ztsmlq( &options, side, trans, @@ -419,6 +421,7 @@ void morse_pzunmlq_param(const libhqr_tree_t *qrtree, else { for (m = 0; m < B->mt; m++) { tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb; + ldbm = BLKLDD(B, m); MORSE_TASK_zttmlq( &options, side, trans, diff --git a/timing/time_zgeqrf_hqr.c b/timing/time_zgeqrf_hqr.c new file mode 100644 index 0000000000000000000000000000000000000000..a475afb035becb399fc5d328678dcab1bdfc9324 --- /dev/null +++ b/timing/time_zgeqrf_hqr.c @@ -0,0 +1,84 @@ +/** + * + * @copyright (c) 2009-2014 The University of Tennessee and The University + * of Tennessee Research Foundation. + * All rights reserved. + * @copyright (c) 2012-2014 Inria. All rights reserved. + * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved. + * + **/ + +/** + * + * @precisions normal z -> c d s + * + **/ +#define _TYPE MORSE_Complex64_t +#define _PREC double +#define _LAMCH LAPACKE_dlamch_work + +#define _NAME "MORSE_zgeqrf_param" +/* See Lawn 41 page 120 */ +#define _FMULS FMULS_GEQRF(M, N) +#define _FADDS FADDS_GEQRF(M, N) + +#include "./timing.c" +#include "timing_zauxiliary.h" + +static int +RunTest(int *iparam, double *dparam, morse_time_t *t_) +{ + MORSE_desc_t *TS; + MORSE_desc_t *TT; + PASTE_CODE_IPARAM_LOCALS( iparam ); + + if ( M != N && check ) { + fprintf(stderr, "Check cannot be perfomed with M != N\n"); + check = 0; + } + + /* Allocate Data */ + PASTE_CODE_ALLOCATE_MATRIX( A, 1, MORSE_Complex64_t, LDA, N ); + + /* Initialize Data */ + MORSE_zplrnt(M, N, A, LDA, 3456); + + /* Allocate Workspace */ + MORSE_Alloc_Workspace_zgels(M, N, &TS, P, Q); + memset(TS->mat, 0, (TS->llm*TS->lln)*sizeof(MorseComplexDouble)); + MORSE_Alloc_Workspace_zgels(M, N, &TT P, Q); + memset(TT->mat, 0, (TT->llm*TT->lln)*sizeof(MorseComplexDouble)); + + /* Save AT in lapack layout for check */ + PASTE_CODE_ALLOCATE_COPY( Acpy, check, MORSE_Complex64_t, A, LDA, N ); + + START_TIMING(); + MORSE_zgeqrf( M, N, A, LDA, TS ); + STOP_TIMING(); + + /* Check the solution */ + if ( check ) + { + PASTE_CODE_ALLOCATE_MATRIX( X, 1, MORSE_Complex64_t, LDB, NRHS ); + MORSE_zplrnt( N, NRHS, X, LDB, 5673 ); + PASTE_CODE_ALLOCATE_COPY( B, 1, MORSE_Complex64_t, X, LDB, NRHS ); + + MORSE_zgeqrs(M, N, NRHS, A, LDA, TS, X, LDB); + + dparam[IPARAM_RES] = z_check_solution(M, N, NRHS, Acpy, LDA, B, X, LDB, + &(dparam[IPARAM_ANORM]), + &(dparam[IPARAM_BNORM]), + &(dparam[IPARAM_XNORM])); + + free( Acpy ); + free( B ); + free( X ); + } + + /* Free Workspace */ + MORSE_Dealloc_Workspace( &TS ); + MORSE_Dealloc_Workspace( &TT ); + free( A ); + + return 0; +} diff --git a/timing/timing.h b/timing/timing.h index 561fed157cdd380d077c4b6c4a52c5eda194fd71..51d8f3dfd8469e8a0a69ec946a03ec45205884df 100644 --- a/timing/timing.h +++ b/timing/timing.h @@ -63,6 +63,17 @@ enum iparam_timing { IPARAM_BOUNDDEPS, IPARAM_BOUNDDEPSPRIO, /* End */ + /* Added for libhqr version */ + IPARAM_NNODES, /* Number of nodes */ + IPARAM_GP, /* Rows in the process grid */ + IPARAM_GQ, /* Columns in the process grid */ + IPARAM_LOWLVL_TREE, /* Tree used for reduction inside nodes */ + IPARAM_HIGHLVL_TREE, /* Tree used for reduction between nodes */ + IPARAM_QR_TS_SZE, /* Size of TS domain */ + IPARAM_QR_HLVL_SZE, /* Size of the high level tree */ + IPARAM_QR_DOMINO, /* Enable/disable the domino tree */ + IPARAM_QR_TSRR, /* Enable/disable the round-robin on TS domain */ + /* End */ IPARAM_SIZEOF };