debug all leak mem with valgrind in ftest and tensor rep

This commit is contained in:
2024-02-08 23:57:10 +01:00
parent 6ae0f7cd75
commit e1171d720b
32 changed files with 1468 additions and 405 deletions
+217 -51
View File
@@ -17,6 +17,8 @@
//#include "permutation_t/permutation_t.h"
#include "tensor_t/tensor_t.h"
#define VALGRING_ 1
TEST(rank){
dimension *D=create_dim(4);
D->perm[0]=2;
@@ -28,6 +30,7 @@ TEST(rank){
tensor_TYPE_FLOAT *tf = CREATE_TENSOR_TYPE_FLOAT(D);
EXPECT_EQ(tf->dim->rank, 180);
free_tensor_TYPE_FLOAT(tf);
}
void print_tensor_float(tensor_TYPE_FLOAT *M, char *msg){
@@ -36,18 +39,23 @@ void print_tensor_float(tensor_TYPE_FLOAT *M, char *msg){
return;
}
LOG("================= %s ===============\n",msg);
#if VALGRING_
for(size_t i=0; i<M->dim->rank;++i)
LOG("[%ld]: %f ",i,M->x[i]);
#endif
LOG("%s","\n");
}
void print_tensor_double(tensor_TYPE_DOUBLE *M, char *msg){
LOG("================= %s ===============\n",msg);
#if VALGRING_
for(size_t i=0; i<M->dim->rank;++i)
LOG("[%ld]: %lf ",i,M->x[i]);
#endif
LOG("%s","\n");
}
@@ -67,9 +75,9 @@ TEST(tensorMinusSubhead_ ){
LOG("M0->dim->rank = %ld\n",M0->dim->rank);
for(size_t i=0; i<M0->dim->rank;++i) M0->x[i]=i*0.1 +1;
endian=false;
//endian=false;
size_t rnkId = 1;
tensor_TYPE_FLOAT *s2h = sub_minus_tensor_head_TYPE_FLOAT(M0,1,rnkId);
tensor_TYPE_FLOAT *s2h = sub_copy_minus_tensor_head_TYPE_FLOAT(M0,1,rnkId);
print_tensor_float(M0, "M0 for sub");
print_tensor_float(s2h, "sub s2h of M0");
@@ -84,6 +92,9 @@ TEST(tensorMinusSubhead_ ){
EXPECT_EQ_TYPE_FLOAT(M0->x[LineFromCoord((size_t[]){i0,i1,rnkId},M0->dim)],s2h->x[LineFromCoord((size_t[]){i0,i1},s2h->dim)]);
}
}
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(s2h);
}
TEST(tensorMinusSubtail ){
@@ -102,12 +113,13 @@ TEST(tensorMinusSubtail ){
LOG("M0->dim->rank = %ld\n",M0->dim->rank);
for(size_t i=0; i<M0->dim->rank;++i) M0->x[i]=i*0.1 +1;
tensor_TYPE_FLOAT *s1t = sub_minus_tensor_tail_TYPE_FLOAT(M0,1,5);
tensor_TYPE_FLOAT *s1t = sub_copy_minus_tensor_tail_TYPE_FLOAT(M0,1,5);
print_tensor_float(M0, "M0 for sub");
print_tensor_float(s1t, "sub s2t of M0 from 5");
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(s1t);
}
@@ -129,7 +141,7 @@ TEST(tensorMinusSubtail ){
//endian=false;
size_t rnkId=3;
tensor_TYPE_FLOAT *s2t = sub_minus_tensor_tail_TYPE_FLOAT(M0,1,rnkId);
tensor_TYPE_FLOAT *s2t = sub_copy_minus_tensor_tail_TYPE_FLOAT(M0,1,rnkId);
@@ -143,6 +155,8 @@ TEST(tensorMinusSubtail ){
}
}
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(s2t);
}
TEST(tensorSubhead_ ){
@@ -161,9 +175,9 @@ TEST(tensorSubhead_ ){
LOG("M0->dim->rank = %ld\n",M0->dim->rank);
for(size_t i=0; i<M0->dim->rank;++i) M0->x[i]=i*0.1 +1;
endian=false;
//endian=false;
size_t rnkId = 1;
tensor_TYPE_FLOAT *s2h = sub_tensor_head_TYPE_FLOAT(M0,2,rnkId);
tensor_TYPE_FLOAT *s2h = sub_copy_tensor_head_TYPE_FLOAT(M0,2,rnkId);
print_tensor_float(M0, "M0 for sub");
print_tensor_float(s2h, "sub s2h of M0");
@@ -178,6 +192,8 @@ TEST(tensorSubhead_ ){
EXPECT_EQ_TYPE_FLOAT(M0->x[LineFromCoord((size_t[]){i0,i1,rnkId},M0->dim)],s2h->x[LineFromCoord((size_t[]){i0,i1},s2h->dim)]);
}
}
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(s2h);
}
TEST(tensorSubtail ){
dimension *d0=create_dim(3);
@@ -196,10 +212,13 @@ TEST(tensorSubtail ){
for(size_t i=0; i<M0->dim->rank;++i) M0->x[i]=i*0.1 +1;
tensor_TYPE_FLOAT *s1t = sub_tensor_tail_TYPE_FLOAT(M0,2,5);
tensor_TYPE_FLOAT *s1t = sub_copy_tensor_tail_TYPE_FLOAT(M0,2,5);
print_tensor_float(M0, "M0 for sub");
print_tensor_float(s1t, "sub s2t of M0 from 5");
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(s1t);
}
@@ -222,7 +241,7 @@ TEST(tensorSubtail ){
//endian=false;
size_t rnkId=3;
tensor_TYPE_FLOAT *s2t = sub_tensor_tail_TYPE_FLOAT(M0,2,rnkId);
tensor_TYPE_FLOAT *s2t = sub_copy_tensor_tail_TYPE_FLOAT(M0,2,rnkId);
@@ -236,23 +255,32 @@ TEST(tensorSubtail ){
}
}
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(s2t);
}
TEST(tensorProd ){
dimension *d0=create_dim(3);
dimension *d1=create_dim(2);
#if VALGRING_
d0->perm[0]=5;
d0->perm[1]=2; //3;
d0->perm[2]=3;
d0->perm[0]=2;
d0->perm[1]=3;
d0->perm[2]=2;
d1->perm[0]=2;
d1->perm[1]=3;
d1->perm[1]=3;//3;
updateRankDim(d0);
updateRankDim(d1);
#else
d0->perm[0]=35;
d0->perm[1]=32; //3;
d0->perm[2]=23;
d1->perm[0]=32;
d1->perm[1]=23;//3;
#endif
tensor_TYPE_FLOAT *M0 = CREATE_TENSOR_TYPE_FLOAT(d0);
tensor_TYPE_FLOAT *M1 = CREATE_TENSOR_TYPE_FLOAT(d1);
@@ -277,18 +305,37 @@ TEST(tensorProd ){
EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,Mn->x,Mn->dim->rank);
print_tensor_float(Mn,"Mn");
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(M1);
free_tensor_TYPE_FLOAT(M);
free_tensor_TYPE_FLOAT(Mn);
}
TEST(tensorContractnProd_TYPE_FLOAT ){
dimension *d0=create_dim(3);
dimension *d1=create_dim(2);
d0->perm[0]=2;
d0->perm[1]=3;
d0->perm[2]=2;
dimension *d1=create_dim(3);
#if VALGRING_
d0->perm[0]=5;
d0->perm[1]=2; //3;
d0->perm[2]=3;
d1->perm[0]=2;
d1->perm[1]=3;
d1->perm[1]=3;//3;
d1->perm[2]=8;
#else
d0->perm[0]=35;
d0->perm[1]=32; //3;
d0->perm[2]=23;
d1->perm[0]=32;
d1->perm[1]=23;//3;
d1->perm[2]=44;
#endif
updateRankDim(d0);
updateRankDim(d1);
@@ -308,8 +355,8 @@ TEST(tensorContractnProd_TYPE_FLOAT ){
tensor_TYPE_FLOAT *M;
tensor_TYPE_FLOAT *MnO;
tensorContractnProd_TYPE_FLOAT(&M, M0,M1,1);
tensorContractnProdNotOpt_TYPE_FLOAT(&MnO, M0,M1,1);
tensorContractnProd_TYPE_FLOAT(&M, M0,M1,2);
tensorContractnProdNotOpt_TYPE_FLOAT(&MnO, M0,M1,2);
print_tensor_float(M,"M");
@@ -320,12 +367,27 @@ TEST(tensorContractnProd_TYPE_FLOAT ){
EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,MnO->x,MnO->dim->rank);
free_tensor_TYPE_FLOAT(M);
free_tensor_TYPE_FLOAT(MnO);
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(M1);
}
TEST(tensorContractnProd_TYPE_FLOAT2 ){
dimension *d0=create_dim(3);
dimension *d1=create_dim(3);
#if VALGRING_
d0->perm[0]=5;
d0->perm[1]=2; //3;
d0->perm[2]=3;
d1->perm[0]=2;
d1->perm[1]=3;//3;
d1->perm[2]=8;
#else
d0->perm[0]=35;
d0->perm[1]=32; //3;
@@ -334,6 +396,7 @@ TEST(tensorContractnProd_TYPE_FLOAT2 ){
d1->perm[0]=32;
d1->perm[1]=23;//3;
d1->perm[2]=44;
#endif
updateRankDim(d0);
updateRankDim(d1);
@@ -365,12 +428,26 @@ TEST(tensorContractnProd_TYPE_FLOAT2 ){
//EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,MnO->x,MnO->dim->rank);
free_tensor_TYPE_FLOAT(M);
free_tensor_TYPE_FLOAT(MnO);
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(M1);
}
TEST(tensorContractnProd_TYPE_DOUBLE2 ){
dimension *d0=create_dim(3);
dimension *d1=create_dim(3);
#if VALGRING_
d0->perm[0]=5;
d0->perm[1]=2; //3;
d0->perm[2]=3;
d1->perm[0]=2;
d1->perm[1]=3;//3;
d1->perm[2]=8;
#else
d0->perm[0]=125;
d0->perm[1]=52; //3;
@@ -379,6 +456,7 @@ TEST(tensorContractnProd_TYPE_DOUBLE2 ){
d1->perm[0]=52;
d1->perm[1]=63;//3;
d1->perm[2]=54;
#endif
updateRankDim(d0);
updateRankDim(d1);
@@ -410,6 +488,10 @@ TEST(tensorContractnProd_TYPE_DOUBLE2 ){
EXPECT_ARRAY_EQ_TYPE_DOUBLE(M->x,M->dim->rank,MnO->x,MnO->dim->rank);
free_tensor_TYPE_DOUBLE(M);
free_tensor_TYPE_DOUBLE(MnO);
free_tensor_TYPE_DOUBLE(M0);
free_tensor_TYPE_DOUBLE(M1);
}
@@ -417,6 +499,16 @@ TEST(tensorContractnProd_TYPE_DOUBLE2 ){
TEST(VStensorContractnProd_TYPE_DOUBLE2 ){
dimension *d0=create_dim(3);
dimension *d1=create_dim(3);
#if VALGRING_
d0->perm[0]=5;
d0->perm[1]=2; //3;
d0->perm[2]=3;
d1->perm[0]=2;
d1->perm[1]=3;//3;
d1->perm[2]=8;
#else
d0->perm[0]=125;
d0->perm[1]=52; //3;
@@ -425,6 +517,7 @@ TEST(VStensorContractnProd_TYPE_DOUBLE2 ){
d1->perm[0]=52;
d1->perm[1]=63;//3;
d1->perm[2]=154;
#endif
updateRankDim(d0);
updateRankDim(d1);
@@ -456,12 +549,26 @@ TEST(VStensorContractnProd_TYPE_DOUBLE2 ){
EXPECT_ARRAY_EQ_TYPE_DOUBLE(M->x,M->dim->rank,MnO->x,MnO->dim->rank);
free_tensor_TYPE_DOUBLE(M);
free_tensor_TYPE_DOUBLE(MnO);
free_tensor_TYPE_DOUBLE(M0);
free_tensor_TYPE_DOUBLE(M1);
}
TEST(Pthread_tensorContractnProd_TYPE_DOUBLE2 ){
dimension *d0=create_dim(3);
dimension *d1=create_dim(3);
#if VALGRING_
d0->perm[0]=5;
d0->perm[1]=2; //3;
d0->perm[2]=3;
d1->perm[0]=2;
d1->perm[1]=3;//3;
d1->perm[2]=8;
#else
d0->perm[0]=125;
d0->perm[1]=52; //3;
@@ -470,6 +577,8 @@ TEST(Pthread_tensorContractnProd_TYPE_DOUBLE2 ){
d1->perm[0]=52;
d1->perm[1]=63;//3;
d1->perm[2]=154;
#endif
updateRankDim(d0);
updateRankDim(d1);
@@ -503,18 +612,36 @@ TEST(Pthread_tensorContractnProd_TYPE_DOUBLE2 ){
EXPECT_ARRAY_EQ_TYPE_DOUBLE(M->x,M->dim->rank,MnO->x,MnO->dim->rank);
free_tensor_TYPE_DOUBLE(M);
free_tensor_TYPE_DOUBLE(MnO);
free_tensor_TYPE_DOUBLE(M0);
free_tensor_TYPE_DOUBLE(M1);
}
TEST(tensorProd_vs ){
dimension *d0=create_dim(3);
dimension *d1=create_dim(2);
d0->perm[0]=12;
d0->perm[1]=13;
d0->perm[2]=12;
#if VALGRING_
d0->perm[0]=2;
d0->perm[1]=3;
d0->perm[2]=2;
d1->perm[0]=21;
d1->perm[1]=23;
d1->perm[0]=2;
d1->perm[1]=3;
#else
d0->perm[0]=212;
d0->perm[1]=13;
d0->perm[2]=22;
d1->perm[0]=121;
d1->perm[1]=43;
#endif
updateRankDim(d0);
updateRankDim(d1);
@@ -529,28 +656,46 @@ TEST(tensorProd_vs ){
for(size_t i=0; i<M1->dim->rank;++i) M1->x[i]=i*0.003 + 2;
tensor_TYPE_FLOAT *M;
tensor_TYPE_FLOAT *Mn;
tensorProd_TYPE_FLOAT(&M,M0,M1);
tensorProdNotOpt_TYPE_FLOAT(&Mn,M0,M1);
//tensorProdNotOpt_TYPE_FLOAT(&Mn,M0,M1);
tensorProd_TYPE_FLOAT(&Mn,M0,M1);
LOG("M->dim->rank = %ld\n",M->dim->rank);
EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,Mn->x,Mn->dim->rank);
free_tensor_TYPE_FLOAT(M);
free_tensor_TYPE_FLOAT(Mn);
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(M1);
}
TEST(tensorProd_vsThread ){
dimension *d0=create_dim(3);
dimension *d1=create_dim(2);
d0->perm[0]=12;
d0->perm[1]=13;
d0->perm[2]=12;
#if VALGRING_
d0->perm[0]=2;
d0->perm[1]=3;
d0->perm[2]=2;
d1->perm[0]=21;
d1->perm[1]=23;
d1->perm[0]=2;
d1->perm[1]=3;
#else
d0->perm[0]=212;
d0->perm[1]=13;
d0->perm[2]=22;
d1->perm[0]=121;
d1->perm[1]=43;
#endif
updateRankDim(d0);
updateRankDim(d1);
@@ -572,24 +717,43 @@ TEST(tensorProd_vsThread ){
size_t nbthread = 5;
tensorProdThread_TYPE_FLOAT(&M,M0,M1,nbthread);
tensorProdNotOpt_TYPE_FLOAT(&Mn,M0,M1);
//tensorProdNotOpt_TYPE_FLOAT(&Mn,M0,M1);
tensorProd_TYPE_FLOAT(&Mn,M0,M1);
LOG("M->dim->rank = %ld\n",M->dim->rank);
//EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,Mn->x,Mn->dim->rank);
EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,Mn->x,Mn->dim->rank);
free_tensor_TYPE_FLOAT(M);
free_tensor_TYPE_FLOAT(Mn);
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(M1);
}
TEST(tensorProd_vsThread2d ){
//endian =true;
dimension *d0=create_dim(3);
dimension *d1=create_dim(2);
d0->perm[0]=12;
d0->perm[1]=13;
d0->perm[2]=12;
#if VALGRING_
d0->perm[0]=2;
d0->perm[1]=3;
d0->perm[2]=2;
d1->perm[0]=21;
d1->perm[1]=23;
d1->perm[0]=2;
d1->perm[1]=3;
#else
d0->perm[0]=212;
d0->perm[1]=13;
d0->perm[2]=22;
d1->perm[0]=121;
d1->perm[1]=43;
#endif
updateRankDim(d0);
updateRankDim(d1);
@@ -600,28 +764,30 @@ TEST(tensorProd_vsThread2d ){
LOG("M0->dim->rank = %ld\n",M0->dim->rank);
LOG("M1->dim->rank = %ld\n",M1->dim->rank);
for(size_t i=0; i<M0->dim->rank;++i) M0->x[i]=i*0.1 +1;
for(size_t i=0; i<M0->dim->rank;++i) M0->x[i]=i*0.01 +1;
for(size_t i=0; i<M1->dim->rank;++i) M1->x[i]=i*0.003 + 2;
tensor_TYPE_FLOAT *M;
tensor_TYPE_FLOAT *Mn;
size_t nbthread = 5;
tensorProdThread2d_TYPE_FLOAT(&M,M0,M1,nbthread);
tensorProdNotOpt_TYPE_FLOAT(&Mn,M0,M1);
tensorProdThrea2d_TYPE_FLOAT(&M,M0,M1,nbthread);
//tensorProdNotOpt_TYPE_FLOAT(&Mn,M0,M1);
tensorProd_TYPE_FLOAT(&Mn,M0,M1);
LOG("M->dim->rank = %ld\n",M->dim->rank);
LOG("Mn->dim->rank = %ld\n",Mn->dim->rank);
EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,Mn->x,Mn->dim->rank);
free_tensor_TYPE_FLOAT(M);
free_tensor_TYPE_FLOAT(Mn);
free_tensor_TYPE_FLOAT(M0);
free_tensor_TYPE_FLOAT(M1);
}
int main(int argc, char **argv){