diff --git a/timing/CMakeLists.txt b/timing/CMakeLists.txt index 721b4fbd3516f5e4a662f0f0eef6e49dffe2f5d0..47db669ce369b6d2418872f562cfd21eb1cfa909 100644 --- a/timing/CMakeLists.txt +++ b/timing/CMakeLists.txt @@ -83,6 +83,7 @@ set(ZSRC time_zgels_tile.c time_zgeqrf.c time_zgeqrf_tile.c + time_zgeqrs_tile.c time_zgetrf_incpiv.c time_zgetrf_incpiv_tile.c time_zgetrf_nopiv.c @@ -93,6 +94,7 @@ set(ZSRC time_zposv_tile.c time_zpotrf.c time_zpotrf_tile.c + time_zpotrs_tile.c time_zsytrf_tile.c time_zpotri_tile.c ################## diff --git a/timing/time_zgeqrs_tile.c b/timing/time_zgeqrs_tile.c new file mode 100644 index 0000000000000000000000000000000000000000..a1adcd274d0451db3c9bb0cfc894e648140df911 --- /dev/null +++ b/timing/time_zgeqrs_tile.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_zgeqrs_Tile" +/* See Lawn 41 page 120 */ +#define _FMULS FMULS_GEQRS( M, N, NRHS ) +#define _FADDS FADDS_GEQRS( M, N, NRHS ) + +#include "./timing.c" + +static int +RunTest(int *iparam, double *dparam, morse_time_t *t_) +{ + MORSE_desc_t *descT; + PASTE_CODE_IPARAM_LOCALS( iparam ); + + check = 1; + M = N; + + /* Allocate Data */ + PASTE_CODE_ALLOCATE_MATRIX_TILE( descA, 1, MORSE_Complex64_t, MorseComplexDouble, LDA, M, N ); + PASTE_CODE_ALLOCATE_MATRIX_TILE( descX, ( check && M == N ), MORSE_Complex64_t, MorseComplexDouble, LDB, M, NRHS ); + PASTE_CODE_ALLOCATE_MATRIX_TILE( descAC, ( check && M == N ), MORSE_Complex64_t, MorseComplexDouble, LDA, M, N ); + PASTE_CODE_ALLOCATE_MATRIX_TILE( descB, ( check && M == N ), MORSE_Complex64_t, MorseComplexDouble, LDB, M, NRHS ); + + MORSE_zplrnt_Tile( descA, 5373 ); + + /* Save A for check */ + if (check == 1 && M == N){ + MORSE_zlacpy_Tile(MorseUpperLower, descA, descAC); + } + + /* Allocate Workspace */ + MORSE_Alloc_Workspace_zgels_Tile(M, N, &descT, P, Q); + memset(descT->mat, 0, (descT->llm*descT->lln)*sizeof(MorseComplexDouble)); + + /* MORSE ZGEQRF */ + MORSE_zgeqrf_Tile( descA, descT ); + + /* Check the solution */ + if ( check && M == N ) + { + /* Initialize and save B */ + MORSE_zplrnt_Tile( descX, 2264 ); + MORSE_zlacpy_Tile(MorseUpperLower, descX, descB); + + /* Compute the solution */ + START_TIMING(); + MORSE_zgeqrs_Tile( descA, descT, descX ); + STOP_TIMING(); + + /* Check solution */ + dparam[IPARAM_ANORM] = MORSE_zlange_Tile(MorseInfNorm, descAC); + dparam[IPARAM_BNORM] = MORSE_zlange_Tile(MorseInfNorm, descB); + dparam[IPARAM_XNORM] = MORSE_zlange_Tile(MorseInfNorm, descX); + MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans, 1.0, descAC, descX, -1.0, descB ); + dparam[IPARAM_RES] = MORSE_zlange_Tile(MorseInfNorm, descB); + PASTE_CODE_FREE_MATRIX( descX ); + PASTE_CODE_FREE_MATRIX( descAC ); + PASTE_CODE_FREE_MATRIX( descB ) + } + + /* Free data */ + MORSE_Dealloc_Workspace(&descT); + PASTE_CODE_FREE_MATRIX( descA ); + + return 0; +} diff --git a/timing/time_zpotrs_tile.c b/timing/time_zpotrs_tile.c new file mode 100644 index 0000000000000000000000000000000000000000..bf7a813a1c413d28685eeebfba33fcd253ccb7e1 --- /dev/null +++ b/timing/time_zpotrs_tile.c @@ -0,0 +1,80 @@ +/** + * + * @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_zpotrs_Tile" +/* See Lawn 41 page 120 */ +#define _FMULS FMULS_POTRS( N, NRHS ) +#define _FADDS FADDS_POTRS( N, NRHS ) + +#include "./timing.c" + +static int +RunTest(int *iparam, double *dparam, morse_time_t *t_) +{ + PASTE_CODE_IPARAM_LOCALS( iparam ); + int uplo = MorseUpper; + + LDA = max(LDA, N); + check = 1; + + /* Allocate Data */ + PASTE_CODE_ALLOCATE_MATRIX_TILE( descA, 1, MORSE_Complex64_t, MorseComplexDouble, LDA, N, N ); + PASTE_CODE_ALLOCATE_MATRIX_TILE( descB, check, MORSE_Complex64_t, MorseComplexDouble, LDB, N, NRHS ); + PASTE_CODE_ALLOCATE_MATRIX_TILE( descAC, check, MORSE_Complex64_t, MorseComplexDouble, LDA, N, N ); + PASTE_CODE_ALLOCATE_MATRIX_TILE( descX, check, MORSE_Complex64_t, MorseComplexDouble, LDB, N, NRHS ); + MORSE_zplghe_Tile( (double)N, descA, 51 ); + + /* Save A for check */ + if (check == 1){ + MORSE_zlacpy_Tile(MorseUpperLower, descA, descAC); + } + + //RUNTIME_zlocality_allrestrict( STARPU_CUDA ); + + /* MORSE ZPOTRF */ + MORSE_zpotrf_Tile(uplo, descA); + + /* Check the solution */ + if ( check ) + { + /* Initialize and save B */ + MORSE_zplrnt_Tile( descB, 7672 ); + MORSE_zlacpy_Tile(MorseUpperLower, descB, descX); + + /* Compute the solution */ + START_TIMING(); + MORSE_zpotrs_Tile( uplo, descA, descX ); + STOP_TIMING(); + + /* Check solution */ + dparam[IPARAM_ANORM] = MORSE_zlange_Tile(MorseInfNorm, descAC); + dparam[IPARAM_BNORM] = MORSE_zlange_Tile(MorseInfNorm, descB); + dparam[IPARAM_XNORM] = MORSE_zlange_Tile(MorseInfNorm, descX); + MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans, 1.0, descAC, descX, -1.0, descB ); + dparam[IPARAM_RES] = MORSE_zlange_Tile(MorseInfNorm, descB); + + PASTE_CODE_FREE_MATRIX( descB ); + PASTE_CODE_FREE_MATRIX( descAC ); + PASTE_CODE_FREE_MATRIX( descX ); + + } + PASTE_CODE_FREE_MATRIX( descA ); + + return 0; +}