diff --git a/dimension_t/src/dimension_t/dimension_t.c b/dimension_t/src/dimension_t/dimension_t.c index f91a148..1d665e3 100644 --- a/dimension_t/src/dimension_t/dimension_t.c +++ b/dimension_t/src/dimension_t/dimension_t.c @@ -173,10 +173,60 @@ void printDebug_dimension(dimension *d,char *msg){ printf("(%s)->size = %ld | (%s)->rank = %ld \n",msg,d->size,msg,d->rank); for(size_t i=0; isize; ++i) printf("[%ld: %ld] |", i,d->perm[i]); - if(endian) - printf("litle endian (true)\n"); + /* if(endian) + printf("\nendian (true): the bigest index varies first, e.g: [x0,x1,x2,...,xn] xn is the bigest index\n"); else - printf("litle endian (false) \n"); + printf("\nendian (false): the lowest index varies first, e.g: [x0,x1,x2,...,xn] x0 is the lowest index\n"); +*/ +} + +size_t sprint_dimension(char **dimContent, dimension *d){ + if(*dimContent != NULL){ + free(*dimContent); + *dimContent=NULL; + } + size_t nbch=6*d->size+40; + *dimContent = malloc(nbch); + //printf("nbCh=%ld\n",nbch); + char *val=NULL; + size_t cur=0; + char *dimSzCh="dim->size"; + for(size_t i=0; isize); + for(size_t c=0;crank); + for(size_t c=0;csize;++i){ + (*dimContent)[cur++]=' '; + val=TYPE_SIZE_T_TO_STR(d->perm[i]); + for(size_t c=0;cperm[0]=2; + D->perm[1]=3; + D->perm[2]=5; + D->perm[3]=6; + + updateRankDim(D); + + char *dimSTR =NULL; + size_t nb=sprint_dimension(&dimSTR, D); + + LOG(" nb char : %ld\n, dim print:\n%s\n",nb, dimSTR); + + free_dimension(D); + free(dimSTR); +} + + int main(int argc, char **argv){ diff --git a/tensor_t/src/tensor_t/tensor_t.c b/tensor_t/src/tensor_t/tensor_t.c index 899ff0a..26c1079 100644 --- a/tensor_t/src/tensor_t/tensor_t.c +++ b/tensor_t/src/tensor_t/tensor_t.c @@ -343,9 +343,11 @@ void print_tensor_msg_##type(tensor_##type *T,char *msg) {\ if (endian ) {\ begin = (T->dim->size) - 1; end = 0;\ iter = decr; cond = isGreatEqThan; \ + printf("endian(=true): the bigest index varies first, e.g: [x0,x1,x2,...,xn] xn is the bigest index \n");\ }else{\ begin = 0 ; end = (T->dim->size) - 1; \ iter = incr; cond = isLessEqThan; \ + printf("endian(=false): the lowest index varies first, e.g: [x0,x1,x2,...,xn] x0 is the lowest index \n");\ }\ for(long int i=0;i<(T->dim)->rank;++i){\ vCoordFromLin(coord,i,T->dim);\ @@ -378,8 +380,8 @@ size_t sprint_tensor_##type(char **tensorContent,tensor_##type *T, bool withInde free(*tensorContent);\ *tensorContent = NULL; \ }\ - size_t sz = ((T->dim)->rank)*(32+ withIndex * 5*(T->dim)->size + 9 );\ - printf("malloc %ld char\n",sz);\ + size_t sz = ((T->dim)->rank)*(32+ withIndex * 5*(T->dim)->size + 129 );\ + /*printf("malloc %ld char\n",sz);*/\ *tensorContent = malloc(sz ) ;\ size_t cur=0;\ long int *coord = malloc(sizeof(long int)*(T->dim)->size); \ @@ -390,9 +392,19 @@ size_t sprint_tensor_##type(char **tensorContent,tensor_##type *T, bool withInde if (endian ) {\ begin = (T->dim->size) - 1; end = 0;\ iter = decr; cond = isGreatEqThan; \ + val=malloc(128);\ + sprintf(val,"endian(=true): the bigest index varies first, e.g: [x0,x1,x2,...,xn] xn is the bigest index \n");\ + for(size_t c=0;cdim->size) - 1; \ iter = incr; cond = isLessEqThan; \ + val=malloc(128);\ + sprintf(val,"endian(=false): the lowest index varies first, e.g: [x0,x1,x2,...,xn] x0 is the lowest index \n");\ + for(size_t c=0;cdim)->rank;++i){\ vCoordFromLin(coord,i,T->dim);\ diff --git a/tensor_t/test/is_good.c b/tensor_t/test/is_good.c index ac4cc20..94c7de3 100644 --- a/tensor_t/test/is_good.c +++ b/tensor_t/test/is_good.c @@ -380,9 +380,9 @@ TEST(sprinttens){ TEST(Split_randomInit){ dimension *d0=create_dim(3); - d0->perm[0]=4; + d0->perm[0]=2; d0->perm[1]=3; - d0->perm[2]=5; + d0->perm[2]=4; updateRankDim(d0); @@ -399,20 +399,22 @@ TEST(Split_randomInit){ tensor_TYPE_FLOAT *Tpart1=NULL, *Tpart2=NULL; - split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 1, 2); + //split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 1, 2); + //split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 2, 3); + split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 1, 1); print_tensor_float(Tpart1, " Tpart1 1"); - print_tensor_msg_TYPE_FLOAT(Tpart1, " Tpart1 1"); + //print_tensor_msg_TYPE_FLOAT(Tpart1, " Tpart1 1"); print_tensor_float(Tpart2, "Tpart2 .."); - print_tensor_msg_TYPE_FLOAT(Tpart2, "Tpart2 .."); + //print_tensor_msg_TYPE_FLOAT(Tpart2, "Tpart2 .."); - printDebug_dimension(Tpart1->dim,"dim part1 "); - printDebug_dimension(Tpart2->dim,"dim part2 "); - printDebug_dimension(M0->dim,"dim root "); +// printDebug_dimension(Tpart1->dim,"dim part1 "); +// printDebug_dimension(Tpart2->dim,"dim part2 "); +// printDebug_dimension(M0->dim,"dim root "); free_tensor_TYPE_FLOAT(M0); - free(Tpart1->dim); - free(Tpart2->dim); + free_dimension(Tpart1->dim); + free_dimension(Tpart2->dim); free(Tpart1); free(Tpart2); } @@ -421,6 +423,7 @@ TEST(Split_randomInit){ #if 1 TEST(Split_randomInit){ + endian=false; dimension *d0=create_dim(3); d0->perm[0]=4; @@ -441,7 +444,9 @@ TEST(Split_randomInit){ tensor_TYPE_FLOAT *Tpart1=NULL, *Tpart2=NULL; - split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 2, 1); + split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 2, 4); + //split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 0, 1); + //split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 2, 1); print_tensor_float(Tpart1, " Tpart1 1"); print_tensor_float(Tpart2, "Tpart2 .."); @@ -451,8 +456,55 @@ TEST(Split_randomInit){ printDebug_dimension(M0->dim,"dim root "); free_tensor_TYPE_FLOAT(M0); - free(Tpart1->dim); - free(Tpart2->dim); + free_dimension(Tpart1->dim); + free_dimension(Tpart2->dim); + free(Tpart1); + free(Tpart2); +} +#endif + + +#if 1 + +TEST(SplitOne_randomInit){ + dimension *d0=create_dim(1); + + d0->perm[0]=4; + + + updateRankDim(d0); + + + tensor_TYPE_FLOAT *M0 = CREATE_TENSOR_TYPE_FLOAT(d0); + + LOG("M0->dim->rank = %ld\n",M0->dim->rank); + + init_random_x_TYPE_FLOAT(M0,2.7,5.4,50001); + + print_tensor_float(M0, "M0 random"); + + tensor_TYPE_FLOAT *Tpart1=NULL, *Tpart2=NULL; + + if(endian){ + split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 0, 1); + }else{ + split_tensor_TYPE_FLOAT(M0,&Tpart1,&Tpart2, 0, 3); + } + + print_tensor_float(Tpart1, " Tpart1 1"); + print_tensor_float(Tpart2, "Tpart2 .."); + + printDebug_dimension(Tpart1->dim,"dim part1 "); + printDebug_dimension(Tpart2->dim,"dim part2 "); + printDebug_dimension(M0->dim,"dim root "); + + for(size_t i=0;i<(Tpart1->dim)->rank;++i) Tpart1->x[i]=0; + print_tensor_float(Tpart1, "Tpart1 0"); + print_tensor_float(M0, "M0 Tpart1 0"); + + free_tensor_TYPE_FLOAT(M0); + free_dimension(Tpart1->dim); + free_dimension(Tpart2->dim); free(Tpart1); free(Tpart2); }