From 0e6d45c15a73138fe945d7709765d02e70911c44 Mon Sep 17 00:00:00 2001 From: Mathieu Faverge <mathieu.faverge@inria.fr> Date: Fri, 14 Apr 2017 17:48:00 +0200 Subject: [PATCH] Add a new OOC_User function and simplifies OOC --- control/descriptor.c | 73 ++++++++++++++++++++++++++++++++++++-------- include/morse.h.in | 11 ++++--- timing/timing.h | 22 ++++++------- 3 files changed, 79 insertions(+), 27 deletions(-) diff --git a/control/descriptor.c b/control/descriptor.c index fc9adb216..b7963cf76 100644 --- a/control/descriptor.c +++ b/control/descriptor.c @@ -522,14 +522,14 @@ int MORSE_Desc_Create_User(MORSE_desc_t **descptr, void *mat, MORSE_enum dtyp, i morse = morse_context_self(); if (morse == NULL) { - morse_error("MORSE_Desc_Create", "MORSE not initialized"); + morse_error("MORSE_Desc_Create_User", "MORSE not initialized"); return MORSE_ERR_NOT_INITIALIZED; } /* Allocate memory and initialize the descriptor */ desc = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t)); if (desc == NULL) { - morse_error("MORSE_Desc_Create", "malloc() failed"); + morse_error("MORSE_Desc_Create_User", "malloc() failed"); return MORSE_ERR_OUT_OF_RESOURCES; } @@ -552,7 +552,7 @@ int MORSE_Desc_Create_User(MORSE_desc_t **descptr, void *mat, MORSE_enum dtyp, i status = morse_desc_check( desc ); if (status != MORSE_SUCCESS) { - morse_error("MORSE_Desc_Create", "invalid descriptor"); + morse_error("MORSE_Desc_Create_User", "invalid descriptor"); MORSE_Desc_Destroy( &desc ); return status; } @@ -566,8 +566,8 @@ int MORSE_Desc_Create_User(MORSE_desc_t **descptr, void *mat, MORSE_enum dtyp, i * * @ingroup Descriptor * - * MORSE_Desc_Create_OOC - Create matrix descriptor for tiled matrix which may - * not fit memory. + * MORSE_Desc_Create_OOC_User - Create matrix descriptor for tiled matrix which + * may not fit memory. * ****************************************************************************** * @@ -605,12 +605,12 @@ int MORSE_Desc_Create_User(MORSE_desc_t **descptr, void *mat, MORSE_enum dtyp, i * \retval MORSE_SUCCESS successful exit * *****************************************************************************/ -int MORSE_Desc_Create_OOC(MORSE_desc_t **descptr, MORSE_enum dtyp, int mb, int nb, int bsiz, - int lm, int ln, int i, int j, int m, int n, int p, int q, - int (*get_rankof)( const MORSE_desc_t*, int, int )) +int MORSE_Desc_Create_OOC_User(MORSE_desc_t **descptr, MORSE_enum dtyp, int mb, int nb, int bsiz, + int lm, int ln, int i, int j, int m, int n, int p, int q, + int (*get_rankof)( const MORSE_desc_t*, int, int )) { #if !defined (CHAMELEON_SCHED_STARPU) - morse_error("MORSE_Desc_Create_Tiles", "Only StarPU supports on-demand tile allocation"); + morse_error("MORSE_Desc_Create_OOC_User", "Only StarPU supports on-demand tile allocation"); return MORSE_ERR_NOT_INITIALIZED; #else MORSE_context_t *morse; @@ -621,13 +621,13 @@ int MORSE_Desc_Create_OOC(MORSE_desc_t **descptr, MORSE_enum dtyp, int mb, int n morse = morse_context_self(); if (morse == NULL) { - morse_error("MORSE_Desc_Create_Tiles", "MORSE not initialized"); + morse_error("MORSE_Desc_Create_OOC_User", "MORSE not initialized"); return MORSE_ERR_NOT_INITIALIZED; } /* Allocate memory and initialize the descriptor */ desc = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t)); if (desc == NULL) { - morse_error("MORSE_Desc_Create_Tiles", "malloc() failed"); + morse_error("MORSE_Desc_Create_OOC_User", "malloc() failed"); return MORSE_ERR_OUT_OF_RESOURCES; } *desc = morse_desc_init_user(dtyp, mb, nb, bsiz, lm, ln, i, j, m, n, p, q, @@ -646,7 +646,7 @@ int MORSE_Desc_Create_OOC(MORSE_desc_t **descptr, MORSE_enum dtyp, int mb, int n status = morse_desc_check( desc ); if (status != MORSE_SUCCESS) { - morse_error("MORSE_Desc_Create_Tiles", "invalid descriptor"); + morse_error("MORSE_Desc_Create_OOC_User", "invalid descriptor"); MORSE_Desc_Destroy( &desc ); return status; } @@ -656,6 +656,55 @@ int MORSE_Desc_Create_OOC(MORSE_desc_t **descptr, MORSE_enum dtyp, int mb, int n #endif } +/** + ***************************************************************************** + * + * @ingroup Descriptor + * + * MORSE_Desc_Create_OOC - Create matrix descriptor for tiled matrix which may + * not fit memory. + * + ****************************************************************************** + * + * @param[out] desc + * On exit, descriptor of the matrix. + * + * @param[in] dtyp + * Data type of the matrix: + * @arg MorseRealFloat: single precision real (S), + * @arg MorseRealDouble: double precision real (D), + * @arg MorseComplexFloat: single precision complex (C), + * @arg MorseComplexDouble: double precision complex (Z). + * + * @param[in] nb + * Number of rows and columns in a tile. + * + * @param[in] m + * Number of rows of the entire matrix. + * + * @param[in] n + * Number of columns of the entire matrix. + * + * @param[in] p + * 2d-block cyclic partitioning, number of tiles in rows. + * + * @param[in] q + * 2d-block cyclic partitioning, number of tiles in columns. + * + ****************************************************************************** + * + * @return + * \retval MORSE_SUCCESS successful exit + * + *****************************************************************************/ +int MORSE_Desc_Create_OOC(MORSE_desc_t **descptr, MORSE_enum dtyp, int mb, int nb, int bsiz, + int lm, int ln, int i, int j, int m, int n, int p, int q) +{ + return MORSE_Desc_Create_OOC_User( descptr, dtyp, mb, nb, bsiz, + lm, ln, i, j, m, n, p, q, + morse_getrankof_2d ); +} + /** ***************************************************************************** * diff --git a/include/morse.h.in b/include/morse.h.in index 35a07e405..b0460b695 100644 --- a/include/morse.h.in +++ b/include/morse.h.in @@ -85,15 +85,18 @@ int MORSE_Element_Size(int type); int MORSE_Desc_Create (MORSE_desc_t **desc, void *mat, MORSE_enum dtyp, int mb, int nb, int bsiz, int lm, int ln, int i, int j, int m, int n, int p, int q); -int MORSE_Desc_Create_OOC (MORSE_desc_t **desc, MORSE_enum dtyp, - int mb, int nb, int bsiz, int lm, int ln, - int i, int j, int m, int n, int p, int q, - int (*get_rankof)( const MORSE_desc_t*, int, int )); int MORSE_Desc_Create_User(MORSE_desc_t **desc, void *mat, MORSE_enum dtyp, int mb, int nb, int bsiz, int lm, int ln, int i, int j, int m, int n, int p, int q, void* (*get_blkaddr)( const MORSE_desc_t*, int, int ), int (*get_blkldd)( const MORSE_desc_t*, int ), int (*get_rankof)( const MORSE_desc_t*, int, int )); +int MORSE_Desc_Create_OOC(MORSE_desc_t **desc, MORSE_enum dtyp, + int mb, int nb, int bsiz, int lm, int ln, + int i, int j, int m, int n, int p, int q); +int MORSE_Desc_Create_OOC_User(MORSE_desc_t **desc, MORSE_enum dtyp, + int mb, int nb, int bsiz, int lm, int ln, + int i, int j, int m, int n, int p, int q, + int (*get_rankof)( const MORSE_desc_t*, int, int )); int MORSE_Desc_Destroy (MORSE_desc_t **desc); int MORSE_Desc_Acquire (MORSE_desc_t *desc); int MORSE_Desc_Release (MORSE_desc_t *desc); diff --git a/timing/timing.h b/timing/timing.h index e4c0dc6fb..1b4bacb35 100644 --- a/timing/timing.h +++ b/timing/timing.h @@ -109,18 +109,18 @@ enum dparam_timing { /* Paste code to allocate a matrix in desc if cond_init is true */ #define PASTE_CODE_ALLOCATE_MATRIX_TILE(_desc_, _cond_, _type_, _type2_, _lda_, _m_, _n_) \ MORSE_desc_t *_desc_ = NULL; \ - int status ## _desc_ ; \ + int status ## _desc_ ; \ if( _cond_ ) { \ - if (ooc) \ - status ## _desc_ = MORSE_Desc_Create_OOC(&(_desc_), _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \ - P, Q, NULL);\ - else if (!bigmat) \ - status ## _desc_ = MORSE_Desc_Create_User(&(_desc_), NULL, _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \ - P, Q, morse_getaddr_null, NULL, NULL);\ - else \ - status ## _desc_ = MORSE_Desc_Create(&(_desc_), NULL, _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \ - P, Q);\ - if (status ## _desc_ != MORSE_SUCCESS) return (status ## _desc_); \ + if (ooc) \ + status ## _desc_ = MORSE_Desc_Create_OOC(&(_desc_), _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \ + P, Q); \ + else if (!bigmat) \ + status ## _desc_ = MORSE_Desc_Create_User(&(_desc_), NULL, _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \ + P, Q, morse_getaddr_null, NULL, NULL); \ + else \ + status ## _desc_ = MORSE_Desc_Create(&(_desc_), NULL, _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \ + P, Q); \ + if (status ## _desc_ != MORSE_SUCCESS) return (status ## _desc_); \ } #define PASTE_CODE_FREE_MATRIX(_desc_) \ -- GitLab