diff --git a/compute/pzlatms.c b/compute/pzlatms.c index 7a1334d9d479ba16df52429219644160fb8bd4be..ab0cbe473a3e2f647d295fd47ce1cf18fdbc2200 100644 --- a/compute/pzlatms.c +++ b/compute/pzlatms.c @@ -181,7 +181,7 @@ void chameleon_pzlatms( cham_dist_t idist, unsigned long long int seed, cham_sym /* U is of size A->m by min(A->m, A->n) */ chameleon_zdesc_copy_and_restrict( A, &descU, A->m, minmn ); - chameleon_pzplrnt( &descU, seed, sequence, request ); + chameleon_pzplrnt( &descU, descU.m, 0, 0, seed, sequence, request ); /* Shift the seed to generate the next random unitary matrix */ #if !defined(CHAMELEON_SIMULATION) @@ -257,7 +257,7 @@ void chameleon_pzlatms( cham_dist_t idist, unsigned long long int seed, cham_sym /* V is of size min(A->m, A->n) by A->n */ chameleon_zdesc_copy_and_restrict( A, &descV, minmn, A->n ); - chameleon_pzplrnt( &descV, seed, sequence, request ); + chameleon_pzplrnt( &descV, descV.m, 0, 0, seed, sequence, request ); /* Apply a QR factorization */ mat.mt = descV.mt; diff --git a/compute/pzplghe.c b/compute/pzplghe.c index d20b36a617cc1e88b79d6df68bf884fdfcbf92c4..7a1f03120228e8b2e4189f15d783e6ff936395f2 100644 --- a/compute/pzplghe.c +++ b/compute/pzplghe.c @@ -28,7 +28,7 @@ * chameleon_pzplghe - Generate a random hermitian (positive definite if 'bump' is large enough) half-matrix by tiles. */ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A, - unsigned long long int seed, + int bigM, int m0, int n0, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ) { CHAM_context_t *chamctxt; @@ -56,7 +56,7 @@ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A, INSERT_TASK_zplghe( &options, bump, tempmm, tempnn, A(m, n), - A->m, m*A->mb, n*A->nb, seed ); + bigM, m*A->mb + m0, n*A->nb + n0, seed ); } } break; @@ -72,7 +72,7 @@ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A, INSERT_TASK_zplghe( &options, bump, tempmm, tempnn, A(m, n), - A->m, m*A->mb, n*A->nb, seed ); + bigM, m*A->mb + m0, n*A->nb + n0, seed ); } } break; @@ -89,7 +89,7 @@ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A, INSERT_TASK_zplghe( &options, bump, tempmm, tempnn, A(m, n), - A->m, m*A->mb, n*A->nb, seed ); + bigM, m*A->mb + m0, n*A->nb + n0, seed ); } } } diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c index 726543b5ac29735f2df0e6bf347109efd6a34ea8..b9a03562030a64d726f37f42d5af988d875f44bf 100644 --- a/compute/pzplgsy.c +++ b/compute/pzplgsy.c @@ -28,7 +28,7 @@ * chameleon_pzplgsy - Generate a random symmetric (positive definite if 'bump' is large enough) half-matrix by tiles. */ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_t *A, - unsigned long long int seed, + int bigM, int m0, int n0, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ) { CHAM_context_t *chamctxt; @@ -56,7 +56,7 @@ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_ INSERT_TASK_zplgsy( &options, bump, tempmm, tempnn, A(m, n), - A->m, m*A->mb, n*A->nb, seed ); + bigM, m*A->mb + m0, n*A->nb + n0, seed ); } } break; @@ -72,7 +72,7 @@ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_ INSERT_TASK_zplgsy( &options, bump, tempmm, tempnn, A(m, n), - A->m, m*A->mb, n*A->nb, seed ); + bigM, m*A->mb + m0, n*A->nb + n0, seed ); } } break; @@ -89,7 +89,7 @@ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_ INSERT_TASK_zplgsy( &options, bump, tempmm, tempnn, A(m, n), - A->m, m*A->mb, n*A->nb, seed ); + bigM, m*A->mb + m0, n*A->nb + n0, seed ); } } } diff --git a/compute/pzplrnt.c b/compute/pzplrnt.c index 77845a2ed94dabe157e729e1fd017e35f807cede..a0d08d9bea95ba87abe5c833efa04f6f286949a1 100644 --- a/compute/pzplrnt.c +++ b/compute/pzplrnt.c @@ -28,8 +28,9 @@ /** * chameleon_pzplghe - Generate a random matrix by tiles. */ -void chameleon_pzplrnt( CHAM_desc_t *A, unsigned long long int seed, - RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ) +void chameleon_pzplrnt( CHAM_desc_t *A, + int bigM, int m0, int n0, unsigned long long int seed, + RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ) { CHAM_context_t *chamctxt; RUNTIME_option_t options; @@ -52,7 +53,7 @@ void chameleon_pzplrnt( CHAM_desc_t *A, unsigned long long int seed, INSERT_TASK_zplrnt( &options, tempmm, tempnn, A(m, n), - A->m, m*A->mb, n*A->nb, seed ); + bigM, m*A->mb + m0, n*A->nb + n0, seed ); } } RUNTIME_options_finalize(&options, chamctxt); diff --git a/compute/zplghe.c b/compute/zplghe.c index 28f849ea49bcfed4bb915e9712f07253875784b6..ea6a7364f76463233cc13d3f799834a1d82ce51e 100644 --- a/compute/zplghe.c +++ b/compute/zplghe.c @@ -270,7 +270,7 @@ int CHAMELEON_zplghe_Tile_Async( double bump, if (chameleon_min( A->m, A->n ) == 0) return CHAMELEON_SUCCESS; - chameleon_pzplghe( bump, uplo, A, seed, sequence, request ); + chameleon_pzplghe( bump, uplo, A, A->m, A->i, A->j, seed, sequence, request ); return CHAMELEON_SUCCESS; } diff --git a/compute/zplgsy.c b/compute/zplgsy.c index c09673df742f391d0c5f5615a5f44d8121bd17e2..2f592151779d658e7caca905922c17a8a8923e63 100644 --- a/compute/zplgsy.c +++ b/compute/zplgsy.c @@ -272,7 +272,7 @@ int CHAMELEON_zplgsy_Tile_Async( CHAMELEON_Complex64_t bump, if (chameleon_min( A->m, A->n ) == 0) return CHAMELEON_SUCCESS; - chameleon_pzplgsy( bump, uplo, A, seed, sequence, request ); + chameleon_pzplgsy( bump, uplo, A, A->m, A->i, A->j, seed, sequence, request ); return CHAMELEON_SUCCESS; } diff --git a/compute/zplrnt.c b/compute/zplrnt.c index 272e5b4a814008c532ec2b715e8e1999f026aa31..4f25f18a008b184134444bf122addb0f30891803 100644 --- a/compute/zplrnt.c +++ b/compute/zplrnt.c @@ -261,7 +261,7 @@ int CHAMELEON_zplrnt_Tile_Async( CHAM_desc_t *A, if (chameleon_min( A->m, A->n ) == 0) return CHAMELEON_SUCCESS; - chameleon_pzplrnt( A, seed, sequence, request ); + chameleon_pzplrnt( A, A->m, A->i, A->j, seed, sequence, request ); return CHAMELEON_SUCCESS; } diff --git a/control/compute_z.h b/control/compute_z.h index acc3c54458b4d0462be8adbe6f20404daa5cd643..0e3dc6ae213c42a1c2e9a40fee0724c671606895 100644 --- a/control/compute_z.h +++ b/control/compute_z.h @@ -97,9 +97,9 @@ void chameleon_pzlaswp(CHAM_desc_t *B, int *IPIV, int inc, RUNTIME_sequence_t *s void chameleon_pzlaswpc(CHAM_desc_t *B, int *IPIV, int inc, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request); void chameleon_pzlatms( cham_dist_t idist, unsigned long long int seed, cham_sym_t sym, double *D, int mode, double cond, double dmax, CHAM_desc_t *A, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ); void chameleon_pzlauum(cham_uplo_t uplo, CHAM_desc_t *A, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request); -void chameleon_pzplghe(double bump, cham_uplo_t uplo, CHAM_desc_t *A, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ); -void chameleon_pzplgsy(CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_t *A, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ); -void chameleon_pzplrnt(CHAM_desc_t *A, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ); +void chameleon_pzplghe(double bump, cham_uplo_t uplo, CHAM_desc_t *A, int bigM, int m0, int n0, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ); +void chameleon_pzplgsy(CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_t *A, int bigM, int m0, int n0, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ); +void chameleon_pzplrnt(CHAM_desc_t *A, int bigM, int m0, int n0, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ); void chameleon_pzplrnk(int K, CHAM_desc_t *C, unsigned long long int seedA, unsigned long long int seedB, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ); void chameleon_pzpotrf(cham_uplo_t uplo, CHAM_desc_t *A, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request); void chameleon_pzpotrimm(cham_uplo_t uplo, CHAM_desc_t *A, CHAM_desc_t *B, CHAM_desc_t *C, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request); diff --git a/control/descriptor_rec.c b/control/descriptor_rec.c index d595ec08b043b77ffff98ad4aba3132237f9025d..333a4472a44bd5138f4284ca3246a229b32e8cf0 100644 --- a/control/descriptor_rec.c +++ b/control/descriptor_rec.c @@ -17,10 +17,7 @@ * @date 2020-03-03 * */ -#define _GNU_SOURCE 1 #include "control/common.h" -#include <stdlib.h> -#include <stdio.h> #include "chameleon/runtime.h" static int diff --git a/include/chameleon/struct.h b/include/chameleon/struct.h index a43e46d699092a3308f7cfb8896fddc39e8457f2..33f19584eef1dcf1272b96530aff0452caff2bc4 100644 --- a/include/chameleon/struct.h +++ b/include/chameleon/struct.h @@ -158,6 +158,20 @@ CHAM_tile_get_ptr( const CHAM_tile_t *tile ) return tile->mat; } +static inline const char * +CHAM_tile_get_typestr( const CHAM_tile_t *tile ) +{ + if ( tile->format & CHAMELEON_TILE_DESC ) { + return "Desc"; + } + + if ( tile->format & CHAMELEON_TILE_HMAT ) { + return "HMat"; + } + + return "Full"; +} + END_C_DECLS #endif /* _chameleon_struct_h_ */ diff --git a/runtime/starpu/codelets/codelet_zgemm.c b/runtime/starpu/codelets/codelet_zgemm.c index e66b85dedb1c17a8bff8e8ceb49f18fd662060dd..cac587414bc35f51eaa6142f57e07e12195b307d 100644 --- a/runtime/starpu/codelets/codelet_zgemm.c +++ b/runtime/starpu/codelets/codelet_zgemm.c @@ -153,6 +153,14 @@ void INSERT_TASK_zgemm( const RUNTIME_option_t *options, /* Reduce the C access if needed */ accessC = ( beta == 0. ) ? STARPU_W : STARPU_RW; +#if defined(CHAMELEON_KERNELS_TRACE) + { + char *cl_fullname; + chameleon_asprintf( &cl_fullname, "%s( %s, %s, %s )", cl_name, clargs->tileA->name, clargs->tileB->name, clargs->tileC->name ); + cl_name = cl_fullname; + } +#endif + /* Insert the task */ rt_starpu_insert_task( &cl_zgemm, diff --git a/runtime/starpu/codelets/codelet_zherk.c b/runtime/starpu/codelets/codelet_zherk.c index 3cc33f4236be6b6619f91c1032df22e787d11724..c4b6eedd83e4004783b2f5f00c630aa53707918d 100644 --- a/runtime/starpu/codelets/codelet_zherk.c +++ b/runtime/starpu/codelets/codelet_zherk.c @@ -135,6 +135,14 @@ void INSERT_TASK_zherk( const RUNTIME_option_t *options, /* Reduce the C access if needed */ accessC = ( beta == 0. ) ? STARPU_W : STARPU_RW; +#if defined(CHAMELEON_KERNELS_TRACE) + { + char *cl_fullname; + chameleon_asprintf( &cl_fullname, "%s( %s, %s )", cl_name, clargs->tileA->name, clargs->tileC->name ); + cl_name = cl_fullname; + } +#endif + /* Insert the task */ rt_starpu_insert_task( &cl_zherk, diff --git a/runtime/starpu/codelets/codelet_zlauum.c b/runtime/starpu/codelets/codelet_zlauum.c index 700352172f44c4f3fdbda09f0474d073cb44bc44..31f8012645c2065892434d153151db5f9a6642b8 100644 --- a/runtime/starpu/codelets/codelet_zlauum.c +++ b/runtime/starpu/codelets/codelet_zlauum.c @@ -82,6 +82,14 @@ void INSERT_TASK_zlauum( const RUNTIME_option_t *options, /* Fix the worker id */ workerid = (schedopt == NULL) ? -1 : schedopt->workerid; +#if defined(CHAMELEON_KERNELS_TRACE) + { + char *cl_fullname; + chameleon_asprintf( &cl_fullname, "%s( %s )", cl_name, clargs->tileA->name ); + cl_name = cl_fullname; + } +#endif + /* Insert the task */ rt_starpu_insert_task( &cl_zlauum, diff --git a/runtime/starpu/codelets/codelet_zpotrf.c b/runtime/starpu/codelets/codelet_zpotrf.c index 4f58f7239f494902ba2c067a42ff0ca3e853559f..b0f42d459e51bed0c96b41bdde85256a06ca229a 100644 --- a/runtime/starpu/codelets/codelet_zpotrf.c +++ b/runtime/starpu/codelets/codelet_zpotrf.c @@ -98,6 +98,14 @@ void INSERT_TASK_zpotrf( const RUNTIME_option_t *options, /* Fix the worker id */ workerid = (schedopt == NULL) ? -1 : schedopt->workerid; +#if defined(CHAMELEON_KERNELS_TRACE) + { + char *cl_fullname; + chameleon_asprintf( &cl_fullname, "%s( %s )", cl_name, clargs->tileA->name ); + cl_name = cl_fullname; + } +#endif + /* Insert the task */ rt_starpu_insert_task( &cl_zpotrf, diff --git a/runtime/starpu/codelets/codelet_zsyrk.c b/runtime/starpu/codelets/codelet_zsyrk.c index a878aaa19adfc5c60ece27a785a7dd2fd1e67986..49a16f71bbfec0754d540caf48cdd0ed6540a866 100644 --- a/runtime/starpu/codelets/codelet_zsyrk.c +++ b/runtime/starpu/codelets/codelet_zsyrk.c @@ -135,6 +135,14 @@ void INSERT_TASK_zsyrk( const RUNTIME_option_t *options, /* Reduce the C access if needed */ accessC = ( beta == 0. ) ? STARPU_W : STARPU_RW; +#if defined(CHAMELEON_KERNELS_TRACE) + { + char *cl_fullname; + chameleon_asprintf( &cl_fullname, "%s( %s, %s )", cl_name, clargs->tileA->name, clargs->tileC->name ); + cl_name = cl_fullname; + } +#endif + /* Insert the task */ rt_starpu_insert_task( &cl_zsyrk, diff --git a/runtime/starpu/codelets/codelet_ztrmm.c b/runtime/starpu/codelets/codelet_ztrmm.c index 20f86bd38af1f4842aa6e853392f00ed7adfbea3..887ff71d3c7c237d924afe849858ea8d4ba99979 100644 --- a/runtime/starpu/codelets/codelet_ztrmm.c +++ b/runtime/starpu/codelets/codelet_ztrmm.c @@ -128,6 +128,14 @@ void INSERT_TASK_ztrmm( const RUNTIME_option_t *options, /* Fix the worker id */ workerid = (schedopt == NULL) ? -1 : schedopt->workerid; +#if defined(CHAMELEON_KERNELS_TRACE) + { + char *cl_fullname; + chameleon_asprintf( &cl_fullname, "%s( %s, %s )", cl_name, clargs->tileA->name, clargs->tileB->name ); + cl_name = cl_fullname; + } +#endif + /* Insert the task */ rt_starpu_insert_task( &cl_ztrmm, diff --git a/runtime/starpu/codelets/codelet_ztrsm.c b/runtime/starpu/codelets/codelet_ztrsm.c index e40dde763ed018a29003e39bc1b5ee377fbeb4df..2aa43232e8404cfa31431ba7fb3779d3ff0c9e92 100644 --- a/runtime/starpu/codelets/codelet_ztrsm.c +++ b/runtime/starpu/codelets/codelet_ztrsm.c @@ -129,6 +129,14 @@ void INSERT_TASK_ztrsm( const RUNTIME_option_t *options, /* Fix the worker id */ workerid = (schedopt == NULL) ? -1 : schedopt->workerid; +#if defined(CHAMELEON_KERNELS_TRACE) + { + char *cl_fullname; + chameleon_asprintf( &cl_fullname, "%s( %s, %s )", cl_name, clargs->tileA->name, clargs->tileB->name ); + cl_name = cl_fullname; + } +#endif + /* Insert the task */ rt_starpu_insert_task( &cl_ztrsm, diff --git a/runtime/starpu/codelets/codelet_ztrtri.c b/runtime/starpu/codelets/codelet_ztrtri.c index 9732e84c36f4c88c310ee35a8028fc66d4c7b572..9605d034eca04fbced137f051f54b962706c5308 100644 --- a/runtime/starpu/codelets/codelet_ztrtri.c +++ b/runtime/starpu/codelets/codelet_ztrtri.c @@ -96,6 +96,14 @@ void INSERT_TASK_ztrtri( const RUNTIME_option_t *options, /* Fix the worker id */ workerid = (schedopt == NULL) ? -1 : schedopt->workerid; +#if defined(CHAMELEON_KERNELS_TRACE) + { + char *cl_fullname; + chameleon_asprintf( &cl_fullname, "%s( %s )", cl_name, clargs->tileA->name ); + cl_name = cl_fullname; + } +#endif + /* Insert the task */ rt_starpu_insert_task( &cl_ztrtri, diff --git a/runtime/starpu/interface/cham_tile_interface.c b/runtime/starpu/interface/cham_tile_interface.c index c95bf0b85a829b59b3c41e00024f57c4bcd46ad5..4ba295ddc6b5f3ad1981775516d18a00c0bbb404 100644 --- a/runtime/starpu/interface/cham_tile_interface.c +++ b/runtime/starpu/interface/cham_tile_interface.c @@ -536,10 +536,18 @@ static starpu_ssize_t cti_describe( void *data_interface, char *buf, size_t size ) { starpu_cham_tile_interface_t *cham_tile_interface = (starpu_cham_tile_interface_t *) data_interface; +#if defined(CHAMELEON_KERNELS_TRACE) + return snprintf( buf, size, "M%ux%ux%u %s", + (unsigned) cham_tile_interface->tile.m, + (unsigned) cham_tile_interface->tile.n, + (unsigned) cham_tile_interface->flttype, + cham_tile_interface->tile.name); +#else return snprintf( buf, size, "M%ux%ux%u", (unsigned) cham_tile_interface->tile.m, (unsigned) cham_tile_interface->tile.n, (unsigned) cham_tile_interface->flttype ); +#endif } static int cti_copy_any_to_any( void *src_interface, unsigned src_node, @@ -554,11 +562,23 @@ static int cti_copy_any_to_any( void *src_interface, unsigned src_node, size_t ld_dst = cham_tile_dst->tile.ld; int ret = 0; + void *src_mat = CHAM_tile_get_ptr( &(cham_tile_src->tile) ); + void *dst_mat = CHAM_tile_get_ptr( &(cham_tile_dst->tile) ); + +#if defined(CHAMELEON_KERNELS_TRACE) + fprintf( stderr, + "[ANY->ANY] src(%s, type:%s, m=%d, n=%d, ld=%d, ptr:%p) dest(%s, type:%s, m=%d, n=%d, ld=%d, ptr:%p)\n", + cham_tile_src->tile.name, CHAM_tile_get_typestr( &(cham_tile_src->tile) ), + cham_tile_src->tile.m, cham_tile_src->tile.n, cham_tile_src->tile.ld, src_mat, + cham_tile_dst->tile.name, CHAM_tile_get_typestr( &(cham_tile_dst->tile) ), + cham_tile_dst->tile.m, cham_tile_dst->tile.n, cham_tile_dst->tile.ld, dst_mat ); +#endif + #if defined(HAVE_STARPU_INTERFACE_COPY2D) ld_src *= elemsize; ld_dst *= elemsize; - if (starpu_interface_copy2d( (uintptr_t) cham_tile_src->tile.mat, 0, src_node, - (uintptr_t) cham_tile_dst->tile.mat, 0, dst_node, + if (starpu_interface_copy2d( (uintptr_t) src_mat, 0, src_node, + (uintptr_t) dst_mat, 0, dst_node, m * elemsize, n, ld_src, ld_dst, async_data ) ) { ret = -EAGAIN; } @@ -566,8 +586,8 @@ static int cti_copy_any_to_any( void *src_interface, unsigned src_node, if ( (ld_src == m) && (ld_dst == m) ) { /* Optimize unpartitioned and y-partitioned cases */ - if ( starpu_interface_copy( (uintptr_t) cham_tile_src->tile.mat, 0, src_node, - (uintptr_t) cham_tile_dst->tile.mat, 0, dst_node, + if ( starpu_interface_copy( (uintptr_t) src_mat, 0, src_node, + (uintptr_t) dst_mat, 0, dst_node, m * n * elemsize, async_data ) ) { ret = -EAGAIN; @@ -584,8 +604,8 @@ static int cti_copy_any_to_any( void *src_interface, unsigned src_node, uint32_t src_offset = y * ld_src; uint32_t dst_offset = y * ld_dst; - if ( starpu_interface_copy( (uintptr_t) cham_tile_src->tile.mat, src_offset, src_node, - (uintptr_t) cham_tile_dst->tile.mat, dst_offset, dst_node, + if ( starpu_interface_copy( (uintptr_t) srcmat, src_offset, src_node, + (uintptr_t) dstmat, dst_offset, dst_node, m * elemsize, async_data ) ) { ret = -EAGAIN; @@ -651,6 +671,9 @@ starpu_cham_tile_register( starpu_data_handle_t *handleptr, if ( tile->format & CHAMELEON_TILE_FULLRANK ) { cham_tile_interface.allocsize = tile->m * tile->n * elemsize; } + else if ( tile->format & CHAMELEON_TILE_DESC ) { /* Needed in case starpu ask for it */ + cham_tile_interface.allocsize = tile->m * tile->n * elemsize; + } else if ( tile->format & CHAMELEON_TILE_HMAT ) { /* For hmat, allocated data will be handled by hmat library. StarPU cannot allocate it for the library */ cham_tile_interface.allocsize = 0;