From 31cf7fbed8768dc0c0c86c84bbf579a72bc0bcb3 Mon Sep 17 00:00:00 2001 From: Mathieu Faverge <mathieu.faverge@inria.fr> Date: Mon, 21 Sep 2020 11:22:01 +0200 Subject: [PATCH] Add a functionnality to dump the memory ration tile by tile after generation --- include/main.h | 1 + src/hchameleon.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ src/testHCHAMELEON.c | 3 +++ 3 files changed, 57 insertions(+) diff --git a/include/main.h b/include/main.h index dfc04f7..a78e860 100644 --- a/include/main.h +++ b/include/main.h @@ -456,6 +456,7 @@ int HCHAMELEON_generate_matrix( cham_flttype_t flttype, int NB, int PQ[2 hmat_interface_t *hi ); int HCHAMELEON_destroy_matrix( HCHAM_desc_t *hdescA ); hmat_info_t HCHAMELEON_getinfo( HCHAM_desc_t *hdesc ); +void HCHAMELEON_getrank( HCHAM_desc_t *hdesc, char *name ); CHAM_desc_t *HCHAMELEON_uncompress_matrix( HCHAM_desc_t *hdesc ); void HCHAMELEON_lapmr( char forward, char trans, int nrhs, HCHAM_desc_t *hdesc, diff --git a/src/hchameleon.c b/src/hchameleon.c index 7d70163..f21dc4f 100644 --- a/src/hchameleon.c +++ b/src/hchameleon.c @@ -10,6 +10,8 @@ #include <coreblas.h> #include <pthread.h> +static FILE *rankfile = NULL; + /** * Detect if the tile is local or not */ @@ -414,6 +416,57 @@ hmat_info_t HCHAMELEON_getinfo( HCHAM_desc_t *hdesc ) return ginfo; } +static int +HCHAMELEON_map_getrank( const CHAM_desc_t *desc, + cham_uplo_t uplo, int m, int n, + CHAM_tile_t *tile, void *op_args ) +{ + size_t lr_size = -1; + + switch( desc->dtyp ) { + case ChamComplexDouble: + lr_size = hmat_zcoefsize( tile->mat ); + break; + case ChamComplexFloat: + lr_size = hmat_ccoefsize( tile->mat ); + break; + case ChamRealDouble: + lr_size = hmat_dcoefsize( tile->mat ); + break; + case ChamRealFloat: + lr_size = hmat_scoefsize( tile->mat ); + break; + default: + fprintf( stderr, "ERROR: unknown data type to get compressed size\n" ); + } + + fprintf( rankfile, "%p;%p;%ld;%ld;%ld;%ld\n", + op_args, tile, (long)m, (long)n, + lr_size, (long)tile->m * (long)tile->n ); + + return 0; +} + +void HCHAMELEON_getrank( HCHAM_desc_t *hdesc, char *name ) +{ + cham_uplo_t uplo = symMatSolver ? ChamLower : ChamUpperLower; + char *rankfilename; + + asprintf( &rankfilename, "initial_size_%s.csv", name ); + rankfile = fopen( rankfilename, "w" ); + free(rankfilename); + + fprintf( rankfile, "matrix_ptr;tile_ptr;tile_m;tile_n;tile_lrsze;tile_frsze\n" ); + + CHAMELEON_map_Tile( uplo, hdesc->super, + HCHAMELEON_map_getrank, hdesc->hi ); + + fclose( rankfile ); + rankfile = NULL; + + return; +} + void HCHAMELEON_lapmr( char forward, char trans, int nrhs, HCHAM_desc_t *hdesc, char *Bptr ) diff --git a/src/testHCHAMELEON.c b/src/testHCHAMELEON.c index cfc81db..a351bf5 100644 --- a/src/testHCHAMELEON.c +++ b/src/testHCHAMELEON.c @@ -79,6 +79,7 @@ int testHCHAMELEON(void) { // Assembly driven by chameleon HCHAM_desc_t hdescA; HCHAMELEON_generate_matrix( chameleonType, NB, dims, &hdescA, hi ); + HCHAMELEON_getrank( &hdescA, "A" ); temps_final = getTime (); temps_cpu = temps_final - temps_initial ; @@ -124,8 +125,10 @@ int testHCHAMELEON(void) { { HCHAM_desc_t hdescB; HCHAMELEON_generate_matrix( chameleonType, NB, dims, &hdescB, hi ); + HCHAMELEON_getrank( &hdescB, "B" ); HCHAM_desc_t hdescC; HCHAMELEON_generate_matrix( chameleonType, NB, dims, &hdescC, hi ); + HCHAMELEON_getrank( &hdescC, "C" ); /* ===================================================================================== */ /* Appelle le produit mat.vec : A.rhs -> solHMAT */ -- GitLab