diff --git a/control/descriptor.c b/control/descriptor.c index 2a23650bb0a7e1d5be0f79765e30912c133105c1..7bb2f2ff1cbbc4ff52cf1638df1fbad46375e0f5 100644 --- a/control/descriptor.c +++ b/control/descriptor.c @@ -987,24 +987,38 @@ static void chameleon_desc_print( const CHAM_desc_t *desc, int shift ) { intptr_t base = (intptr_t)desc->mat; - int m, n; + int m, n, rank; + CHAM_context_t *chamctxt = chameleon_context_self(); + + rank = CHAMELEON_Comm_rank(); for ( n=0; n<desc->nt; n++ ) { for ( m=0; m<desc->mt; m++ ) { const CHAM_tile_t *tile; const CHAM_desc_t *tiledesc; intptr_t ptr; + int trank; + trank = desc->get_rankof( desc, m, n ); tile = desc->get_blktile( desc, m, n ); tiledesc = tile->mat; ptr = ( tile->format == CHAMELEON_TILE_DESC ) ? (intptr_t)(tiledesc->mat) : (intptr_t)(tile->mat); - fprintf( stdout, "%*s%s(%3d,%3d): %d * %d / ld = %d / offset= %ld\n", - shift, " ", desc->name, m, n, tile->m, tile->n, tile->ld, ptr - base ); + if ( trank == rank ) { + fprintf( stdout, "[%2d]%*s%s(%3d,%3d): %d * %d / ld = %d / offset= %ld\n", + rank, shift, " ", desc->name, m, n, tile->m, tile->n, tile->ld, ptr - base ); - if ( tile->format == CHAMELEON_TILE_DESC ) { - chameleon_desc_print( tiledesc, shift+2 ); + if ( tile->format == CHAMELEON_TILE_DESC ) { + chameleon_desc_print( tiledesc, shift+2 ); + } + } + else { + assert( ptr == 0 ); + } + + if ( chamctxt->scheduler != RUNTIME_SCHED_OPENMP ) { + RUNTIME_barrier(chamctxt); } } } diff --git a/control/descriptor_rec.c b/control/descriptor_rec.c index 496a4f4a0ae403ab357c012510123443eb1d3d2e..78634600e9b4a8443d938eb574d349256b8dd69a 100644 --- a/control/descriptor_rec.c +++ b/control/descriptor_rec.c @@ -29,9 +29,22 @@ chameleon_recdesc_create( const char *name, CHAM_desc_t **descptr, void *mat, ch int lm, int ln, int m, int n, int p, int q, blkaddr_fct_t get_blkaddr, blkldd_fct_t get_blkldd, blkrankof_fct_t get_rankof ) { - CHAM_desc_t *desc; + CHAM_context_t *chamctxt; + CHAM_desc_t *desc; int rc; + *descptr = NULL; + + chamctxt = chameleon_context_self(); + if ( chamctxt == NULL ) { + chameleon_error( "CHAMELEON_Recursive_Desc_Create", "CHAMELEON not initialized" ); + return CHAMELEON_ERR_NOT_INITIALIZED; + } + if ( chamctxt->scheduler != RUNTIME_SCHED_STARPU ) { + chameleon_error( "CHAMELEON_Recursive_Desc_Create", "CHAMELEON Recursive descriptors only available with StaRPU" ); + return CHAMELEON_ERR_NOT_INITIALIZED; + } + /* Let's make sure we have at least one couple (mb, nb) defined */ assert( (mb[0] > 0) && (nb[0] > 0) ); diff --git a/testing/testing_zprint.c b/testing/testing_zprint.c index ae489df40c54470faa418ace53693d108dccc8b8..9b571e359c0fa37d63baa7adca97b10257be8bce 100644 --- a/testing/testing_zprint.c +++ b/testing/testing_zprint.c @@ -52,7 +52,7 @@ chameleon_getblkldd_cm( const CHAM_desc_t *A, int m ) int testing_zprint( run_arg_list_t *args, int check ) { - int hres = 0; + int rc, hres = 0; /* Read arguments */ intptr_t mtxfmt = parameters_getvalue_int( "mtxfmt" ); @@ -73,38 +73,57 @@ testing_zprint( run_arg_list_t *args, int check ) CHAMELEON_Set( CHAMELEON_TILE_SIZE, nb ); fprintf( stdout, "--- Tile layout ---\n" ); - CHAMELEON_Desc_Create( + rc = CHAMELEON_Desc_Create( &descA, (void*)(-mtxfmt), ChamComplexDouble, nb, nb, nb * nb, LDA, N, 0, 0, M, N, P, Q ); - CHAMELEON_Desc_Print( descA ); + if ( rc == CHAMELEON_SUCCESS ) { + CHAMELEON_Desc_Print( descA ); + } + else { + fprintf( stdout, "--- Tile layout (FAILED)---\n" ); + hres++; + } CHAMELEON_Desc_Destroy( &descA ); - fprintf( stdout, "--- Lapacke layout ---\n" ); - CHAMELEON_Desc_Create_User( + fprintf( stdout, "--- Lapack layout ---\n" ); + rc = CHAMELEON_Desc_Create_User( &descA, (void*)(-mtxfmt), ChamComplexDouble, nb, nb, nb * nb, LDA, N, 0, 0, M, N, P, Q, chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); - CHAMELEON_Desc_Print( descA ); + if ( rc == CHAMELEON_SUCCESS ) { + CHAMELEON_Desc_Print( descA ); + } + else { + fprintf( stdout, "--- Lapack layout (FAILED)---\n" ); + hres++; + } CHAMELEON_Desc_Destroy( &descA ); - fprintf( stdout, "--- Recursive layout (Tile)---\n" ); - CHAMELEON_Recursive_Desc_Create( - &descA, CHAMELEON_MAT_ALLOC_GLOBAL, ChamComplexDouble, - list_nb, list_nb, LDA, N, M, N, P, Q, - NULL, NULL, NULL ); - - CHAMELEON_Desc_Print( descA ); - CHAMELEON_Desc_Destroy( &descA ); - - fprintf( stdout, "--- Recursive layout (Lapack) ---\n" ); - CHAMELEON_Recursive_Desc_Create( - &descA, CHAMELEON_MAT_ALLOC_GLOBAL, ChamComplexDouble, - list_nb, list_nb, LDA, N, M, N, P, Q, - chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); - - CHAMELEON_Desc_Print( descA ); - CHAMELEON_Desc_Destroy( &descA ); + if ( CHAMELEON_Comm_size() == 0 ) + { + fprintf( stdout, "--- Recursive layout (Tile)---\n" ); + rc = CHAMELEON_Recursive_Desc_Create( + &descA, CHAMELEON_MAT_ALLOC_GLOBAL, ChamComplexDouble, + list_nb, list_nb, LDA, N, M, N, P, Q, + NULL, NULL, NULL ); + + if ( rc == CHAMELEON_SUCCESS ) { + CHAMELEON_Desc_Print( descA ); + } + CHAMELEON_Desc_Destroy( &descA ); + + fprintf( stdout, "--- Recursive layout (Lapack) ---\n" ); + rc = CHAMELEON_Recursive_Desc_Create( + &descA, CHAMELEON_MAT_ALLOC_GLOBAL, ChamComplexDouble, + list_nb, list_nb, LDA, N, M, N, P, Q, + chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL ); + + if ( rc == CHAMELEON_SUCCESS ) { + CHAMELEON_Desc_Print( descA ); + } + CHAMELEON_Desc_Destroy( &descA ); + } run_arg_add_fixdbl( args, "time", 1. ); run_arg_add_fixdbl( args, "gflops", 1. );