From 144e6e10cd950c6882f19b806a4c9cec1ce0880c Mon Sep 17 00:00:00 2001 From: Mathieu Faverge <mathieu.faverge@inria.fr> Date: Thu, 18 May 2023 10:33:23 +0200 Subject: [PATCH] testing/getrf: Integrate the IPIV in the interface to call getrf algorithm --- testing/testing_zgetrf.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/testing/testing_zgetrf.c b/testing/testing_zgetrf.c index c6b69612a..5657d49b6 100644 --- a/testing/testing_zgetrf.c +++ b/testing/testing_zgetrf.c @@ -44,7 +44,7 @@ testing_zgetrf_desc( run_arg_list_t *args, int check ) int minMN = chameleon_min( M, N ); /* Descriptors */ - CHAM_desc_t *descA; + CHAM_desc_t *descA, *descIPIV; void *ws = NULL; CHAMELEON_Set( CHAMELEON_TILE_SIZE, nb ); @@ -52,6 +52,8 @@ testing_zgetrf_desc( run_arg_list_t *args, int check ) /* Creates the matrices */ CHAMELEON_Desc_Create( &descA, (void*)(-mtxfmt), ChamComplexDouble, nb, nb, nb * nb, LDA, N, 0, 0, M, N, P, Q ); + CHAMELEON_Desc_Create( + &descIPIV, CHAMELEON_MAT_ALLOC_TILE, ChamInteger, nb, 1, nb, minMN, 1, 0, 0, minMN, 1, P, Q ); /* Fills the matrix with random values */ if ( diag == ChamUnit ) { @@ -69,11 +71,12 @@ testing_zgetrf_desc( run_arg_list_t *args, int check ) /* Calculates the solution */ testing_start( &test_data ); if ( async ) { - hres = CHAMELEON_zgetrf_Tile_Async( descA, ws, test_data.sequence, &test_data.request ); + hres = CHAMELEON_zgetrf_Tile_Async( descA, descIPIV, ws, test_data.sequence, &test_data.request ); CHAMELEON_Desc_Flush( descA, test_data.sequence ); + CHAMELEON_Desc_Flush( descIPIV, test_data.sequence ); } else { - hres = CHAMELEON_zgetrf_Tile( descA ); + hres = CHAMELEON_zgetrf_Tile( descA, descIPIV ); } test_data.hres = hres; testing_stop( &test_data, flops_zgetrf( M, N ) ); @@ -81,14 +84,19 @@ testing_zgetrf_desc( run_arg_list_t *args, int check ) /* Checks the factorization and residual */ #if !defined(CHAMELEON_SIMULATION) if ( check ) { - CHAM_desc_t *descA0c; + CHAM_desc_t *descA0c, *descIPIVc; CHAM_desc_t *descA0 = CHAMELEON_Desc_Copy( descA, CHAMELEON_MAT_ALLOC_TILE ); + int *ipiv; /* Create A0c as local to rank 0 on all nodes to gather the matrix */ CHAMELEON_Desc_Create_User( &descA0c, (void*)CHAMELEON_MAT_ALLOC_GLOBAL, ChamComplexDouble, nb, nb, nb*nb, M, N, 0, 0, M, N, 1, 1, chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); + CHAMELEON_Desc_Create_User( + &descIPIVc, (void*)CHAMELEON_MAT_ALLOC_GLOBAL, ChamInteger, + nb, 1, nb, M, 1, 0, 0, M, 1, 1, 1, + chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); if ( diag == ChamUnit ) { CHAMELEON_zplgtr_Tile( 0, ChamUpper, descA0c, seedA ); @@ -98,21 +106,19 @@ testing_zgetrf_desc( run_arg_list_t *args, int check ) CHAMELEON_zplrnt_Tile( descA0c, seedA ); } + /* Cheat code: float (s) is the same size as int */ + CHAMELEON_slacpy_Tile( ChamUpperLower, descIPIV, descIPIVc ); + ipiv = descIPIVc->mat; + /* Compute the permutation of A0: P * A0 */ if ( CHAMELEON_Comm_rank() == 0 ) { - int i, j; - int *ipiv = (int *)calloc( M, sizeof(int) ); - - for (i = 0; i < M; i++) { - ipiv[i] = i+1; - } - LAPACKE_zlaswp( LAPACK_COL_MAJOR, N, descA0c->mat, M, 1, M, ipiv, 1 ); - free( ipiv ); } CHAMELEON_zlacpy_Tile( ChamUpperLower, descA0c, descA0 ); CHAMELEON_Desc_Destroy( &descA0c ); + CHAMELEON_Desc_Destroy( &descIPIVc ); + hres += check_zxxtrf( args, ChamGeneral, ChamUpperLower, descA0, descA ); @@ -125,6 +131,7 @@ testing_zgetrf_desc( run_arg_list_t *args, int check ) } CHAMELEON_Desc_Destroy( &descA ); + CHAMELEON_Desc_Destroy( &descIPIV ); return hres; } -- GitLab