add print and sprint dim and tensor for debug
This commit is contained in:
@@ -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);
|
printf("(%s)->size = %ld | (%s)->rank = %ld \n",msg,d->size,msg,d->rank);
|
||||||
for(size_t i=0; i<d->size; ++i)
|
for(size_t i=0; i<d->size; ++i)
|
||||||
printf("[%ld: %ld] |", i,d->perm[i]);
|
printf("[%ld: %ld] |", i,d->perm[i]);
|
||||||
if(endian)
|
/* if(endian)
|
||||||
printf("litle endian (true)\n");
|
printf("\nendian (true): the bigest index varies first, e.g: [x0,x1,x2,...,xn] xn is the bigest index\n");
|
||||||
else
|
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; i<strlen(dimSzCh);++i)
|
||||||
|
(*dimContent)[cur++]=dimSzCh[i];
|
||||||
|
(*dimContent)[cur++]='=';
|
||||||
|
val=TYPE_SIZE_T_TO_STR(d->size);
|
||||||
|
for(size_t c=0;c<strlen(val);++c)
|
||||||
|
(*dimContent)[cur++]=val[c];
|
||||||
|
free(val); val = NULL;
|
||||||
|
(*dimContent)[cur++]=' ';
|
||||||
|
(*dimContent)[cur++]='/';
|
||||||
|
(*dimContent)[cur++]=' ';
|
||||||
|
char *dimRkCh="dim->rank";
|
||||||
|
for(size_t i=0; i<strlen(dimRkCh);++i)
|
||||||
|
(*dimContent)[cur++]=dimRkCh[i];
|
||||||
|
(*dimContent)[cur++]='=';
|
||||||
|
val=TYPE_SIZE_T_TO_STR(d->rank);
|
||||||
|
for(size_t c=0;c<strlen(val);++c)
|
||||||
|
(*dimContent)[cur++]=val[c];
|
||||||
|
free(val); val = NULL;
|
||||||
|
(*dimContent)[cur++]=' ';
|
||||||
|
(*dimContent)[cur++]='\n';
|
||||||
|
(*dimContent)[cur++]='[';
|
||||||
|
for(size_t i=0; i<d->size;++i){
|
||||||
|
(*dimContent)[cur++]=' ';
|
||||||
|
val=TYPE_SIZE_T_TO_STR(d->perm[i]);
|
||||||
|
for(size_t c=0;c<strlen(val);++c)
|
||||||
|
(*dimContent)[cur++]=val[c];
|
||||||
|
free(val); val = NULL;
|
||||||
|
(*dimContent)[cur++]=',';
|
||||||
|
|
||||||
|
}
|
||||||
|
(*dimContent)[cur++]=']';
|
||||||
|
|
||||||
|
(*dimContent)[cur++]='\n';
|
||||||
|
(*dimContent)[cur++]='\0';
|
||||||
|
|
||||||
|
return cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateRankDim(dimension *dim){
|
void updateRankDim(dimension *dim){
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ void add_dimension(dimension **d, dimension *d0, dimension *d1);
|
|||||||
void min_dimension(dimension **d, dimension *d0, dimension *d1);
|
void min_dimension(dimension **d, dimension *d0, dimension *d1);
|
||||||
|
|
||||||
void printDebug_dimension(dimension *d, char *msg);
|
void printDebug_dimension(dimension *d, char *msg);
|
||||||
|
size_t sprint_dimension(char **dimContent, dimension *d);
|
||||||
|
|
||||||
void updateRankDim(dimension *dim);
|
void updateRankDim(dimension *dim);
|
||||||
size_t LineFromCoord(size_t *coo, dimension *dim);
|
size_t LineFromCoord(size_t *coo, dimension *dim);
|
||||||
|
|||||||
@@ -161,6 +161,25 @@ TEST(Coord_linear){
|
|||||||
free(coord);
|
free(coord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(sprint_dim){
|
||||||
|
dimension *D=create_dim(4);
|
||||||
|
D->perm[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){
|
int main(int argc, char **argv){
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -343,9 +343,11 @@ void print_tensor_msg_##type(tensor_##type *T,char *msg) {\
|
|||||||
if (endian ) {\
|
if (endian ) {\
|
||||||
begin = (T->dim->size) - 1; end = 0;\
|
begin = (T->dim->size) - 1; end = 0;\
|
||||||
iter = decr; cond = isGreatEqThan; \
|
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{\
|
}else{\
|
||||||
begin = 0 ; end = (T->dim->size) - 1; \
|
begin = 0 ; end = (T->dim->size) - 1; \
|
||||||
iter = incr; cond = isLessEqThan; \
|
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){\
|
for(long int i=0;i<(T->dim)->rank;++i){\
|
||||||
vCoordFromLin(coord,i,T->dim);\
|
vCoordFromLin(coord,i,T->dim);\
|
||||||
@@ -378,8 +380,8 @@ size_t sprint_tensor_##type(char **tensorContent,tensor_##type *T, bool withInde
|
|||||||
free(*tensorContent);\
|
free(*tensorContent);\
|
||||||
*tensorContent = NULL; \
|
*tensorContent = NULL; \
|
||||||
}\
|
}\
|
||||||
size_t sz = ((T->dim)->rank)*(32+ withIndex * 5*(T->dim)->size + 9 );\
|
size_t sz = ((T->dim)->rank)*(32+ withIndex * 5*(T->dim)->size + 129 );\
|
||||||
printf("malloc %ld char\n",sz);\
|
/*printf("malloc %ld char\n",sz);*/\
|
||||||
*tensorContent = malloc(sz ) ;\
|
*tensorContent = malloc(sz ) ;\
|
||||||
size_t cur=0;\
|
size_t cur=0;\
|
||||||
long int *coord = malloc(sizeof(long int)*(T->dim)->size); \
|
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 ) {\
|
if (endian ) {\
|
||||||
begin = (T->dim->size) - 1; end = 0;\
|
begin = (T->dim->size) - 1; end = 0;\
|
||||||
iter = decr; cond = isGreatEqThan; \
|
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;c<strlen(val);++c)\
|
||||||
|
(*tensorContent)[cur++]=val[c];\
|
||||||
|
free(val); val = NULL;\
|
||||||
}else{\
|
}else{\
|
||||||
begin = 0 ; end = (T->dim->size) - 1; \
|
begin = 0 ; end = (T->dim->size) - 1; \
|
||||||
iter = incr; cond = isLessEqThan; \
|
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;c<strlen(val);++c)\
|
||||||
|
(*tensorContent)[cur++]=val[c];\
|
||||||
|
free(val); val = NULL;\
|
||||||
}\
|
}\
|
||||||
for(long int i=0;i<(T->dim)->rank;++i){\
|
for(long int i=0;i<(T->dim)->rank;++i){\
|
||||||
vCoordFromLin(coord,i,T->dim);\
|
vCoordFromLin(coord,i,T->dim);\
|
||||||
|
|||||||
+65
-13
@@ -380,9 +380,9 @@ TEST(sprinttens){
|
|||||||
TEST(Split_randomInit){
|
TEST(Split_randomInit){
|
||||||
dimension *d0=create_dim(3);
|
dimension *d0=create_dim(3);
|
||||||
|
|
||||||
d0->perm[0]=4;
|
d0->perm[0]=2;
|
||||||
d0->perm[1]=3;
|
d0->perm[1]=3;
|
||||||
d0->perm[2]=5;
|
d0->perm[2]=4;
|
||||||
|
|
||||||
|
|
||||||
updateRankDim(d0);
|
updateRankDim(d0);
|
||||||
@@ -399,20 +399,22 @@ TEST(Split_randomInit){
|
|||||||
|
|
||||||
tensor_TYPE_FLOAT *Tpart1=NULL, *Tpart2=NULL;
|
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_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_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(Tpart1->dim,"dim part1 ");
|
||||||
printDebug_dimension(Tpart2->dim,"dim part2 ");
|
// printDebug_dimension(Tpart2->dim,"dim part2 ");
|
||||||
printDebug_dimension(M0->dim,"dim root ");
|
// printDebug_dimension(M0->dim,"dim root ");
|
||||||
|
|
||||||
free_tensor_TYPE_FLOAT(M0);
|
free_tensor_TYPE_FLOAT(M0);
|
||||||
free(Tpart1->dim);
|
free_dimension(Tpart1->dim);
|
||||||
free(Tpart2->dim);
|
free_dimension(Tpart2->dim);
|
||||||
free(Tpart1);
|
free(Tpart1);
|
||||||
free(Tpart2);
|
free(Tpart2);
|
||||||
}
|
}
|
||||||
@@ -421,6 +423,7 @@ TEST(Split_randomInit){
|
|||||||
#if 1
|
#if 1
|
||||||
|
|
||||||
TEST(Split_randomInit){
|
TEST(Split_randomInit){
|
||||||
|
endian=false;
|
||||||
dimension *d0=create_dim(3);
|
dimension *d0=create_dim(3);
|
||||||
|
|
||||||
d0->perm[0]=4;
|
d0->perm[0]=4;
|
||||||
@@ -441,7 +444,9 @@ TEST(Split_randomInit){
|
|||||||
|
|
||||||
tensor_TYPE_FLOAT *Tpart1=NULL, *Tpart2=NULL;
|
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(Tpart1, " Tpart1 1");
|
||||||
print_tensor_float(Tpart2, "Tpart2 ..");
|
print_tensor_float(Tpart2, "Tpart2 ..");
|
||||||
@@ -451,8 +456,55 @@ TEST(Split_randomInit){
|
|||||||
printDebug_dimension(M0->dim,"dim root ");
|
printDebug_dimension(M0->dim,"dim root ");
|
||||||
|
|
||||||
free_tensor_TYPE_FLOAT(M0);
|
free_tensor_TYPE_FLOAT(M0);
|
||||||
free(Tpart1->dim);
|
free_dimension(Tpart1->dim);
|
||||||
free(Tpart2->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(Tpart1);
|
||||||
free(Tpart2);
|
free(Tpart2);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user