From c5e31d9aebe9f7c43fa1740081282dc876051d77 Mon Sep 17 00:00:00 2001 From: fanasina Date: Wed, 24 Jan 2024 02:13:55 +0100 Subject: [PATCH] debug ftest and update float precision tool --- tensor_t/Makefile | 6 ++ tensor_t/src/tensor_t/tensor_t.h | 2 + tensor_t/test/Makefile | 9 +- tensor_t/test/is_good.c | 109 ++++++++++++++++++-- ytest_t/include_ytest/include/ftest/ftest.h | 4 +- ytest_t/libytest.so | Bin 558784 -> 558784 bytes ytest_t/yftest/include/ftest/ftest.h | 4 +- ytools_t/src/tools_t/tools_t.c | 3 +- 8 files changed, 120 insertions(+), 17 deletions(-) diff --git a/tensor_t/Makefile b/tensor_t/Makefile index 00a350d..78e30d4 100644 --- a/tensor_t/Makefile +++ b/tensor_t/Makefile @@ -22,6 +22,9 @@ DIMSRC_O=$(DIMDIR)/src/dimension_t/dimension_t.o TENSRC=src/tensor_t/tensor_t.c TENSRC_O=$(TENSRC:.c=.o) +clTENSRC=src/tensor_t/cl_tensor_t.c +clTENSRC_O=$(clTENSRC:.c=.o) + PERMSRC_O=$(PERMDIR)/src/permutation_t/permutation_t.o #TOOLSRC_O=$(TOOLDIR)/src/tools_t/tools_t.o @@ -42,6 +45,9 @@ all: $(TENSRC_O) $(TENSRC_O) : $(TENSRC) $(DIMSRC_O) $(PERMSRC_O) $(CC) -o $@ -c $^ $(CFLAGS) +$(clTENSRC_O) : $(clTENSRC) $(TENSRC_O) + $(CC) -o $@ -c $^ $(CFLAGS) + #$(DIMSRC_O) : $(DIMSRC) $(PERMSRC_O) # $(CC) -o $@ -c $< $(CFLAGS) diff --git a/tensor_t/src/tensor_t/tensor_t.h b/tensor_t/src/tensor_t/tensor_t.h index f9b1007..f55c2e7 100644 --- a/tensor_t/src/tensor_t/tensor_t.h +++ b/tensor_t/src/tensor_t/tensor_t.h @@ -3,6 +3,8 @@ #include "dimension_t/dimension_t.h" +void subArray(size_t* dst, size_t* src, size_t debDst, size_t finDst, size_t debSrc); + #define GENERATE_TENSOR_TYPE(type) \ struct tensor_##type{\ dimension *dim;\ diff --git a/tensor_t/test/Makefile b/tensor_t/test/Makefile index 807aff9..32b85e0 100644 --- a/tensor_t/test/Makefile +++ b/tensor_t/test/Makefile @@ -12,19 +12,24 @@ TENSDIR=$(PWD)/.. DIMDIR=$(PWD)/../../dimension_t INCLUDE_DIR=$(PWD)/../src CFLAGS=-I$(INCLUDE_DIR) -I$(YPERMDIR)/src -I$(YTESTDIR)/include_ytest/include -I$(DIMDIR)/src -I$(TENSDIR)/src -LDFLAGS=-L$(YTESTDIR) -lytest +LDFLAGS=-L$(YTESTDIR) -lytest -lOpenCL #SRC_DIR=$(ROOT_DIR)/src #SRC=$(wildcard */*/*.c) SRC=$(wildcard **/**/*.c) #HEADS=$(OBJS:.o=.h) TEST_DIR=$(PWD) + EXECSRC=$(NAME_TEST).c +#EXECSRC=openF.c + EXEC=launch_$(NAME_TEST)_m TENSRC=$(TENSDIR)/src/tensor_t/tensor_t.c TENSRC_O=$(TENSRC:.c=.o) +clTENSRC=$(TENSDIR)/src/tensor_t/cl_tensor_t.c +clTENSRC_O=$(clTENSRC:.c=.o) PERMSRC_O=$(YPERMDIR)/src/permutation_t/permutation_t.o @@ -35,7 +40,7 @@ TOPTARGETS := all clean DEPS=$(DIMDIR) $(YPERMDIR) $(YTESTDIR) $(TENSDIR) -OBJ=$(DIMSRC_O) $(PERMSRC_O) $(TENSRC_O) +OBJ=$(DIMSRC_O) $(PERMSRC_O) $(TENSRC_O) $(clTENSRC_O) LIB_YTEST=$(YTESTDIR)/libytest.so diff --git a/tensor_t/test/is_good.c b/tensor_t/test/is_good.c index 9e44bff..92b328c 100644 --- a/tensor_t/test/is_good.c +++ b/tensor_t/test/is_good.c @@ -16,6 +16,7 @@ //#include "permutation_t/permutation_t.h" #include "tensor_t/tensor_t.h" +#include "tensor_t/cl_tensor_t.h" TEST(rank){ dimension *D=create_dim(4); @@ -36,15 +37,15 @@ void print_tensor_float(tensor_TYPE_FLOAT *M, char *msg){ LOG("[%ld]: %f ",i,M->x[i]); LOG("%s","\n"); - /* - size_t x_index=0 ; - for(size_t i=0; idim->size;++i){ - for(size_t j=0; jdim->perm[i]; ++j){ - LOG("[%3ld:(%ld,%ld)]: %f ",x_index,i,j,M->x[x_index]); - ++x_index; - } +} + + +void print_tensor_double(tensor_TYPE_DOUBLE *M, char *msg){ + LOG("================= %s ===============\n",msg); + for(size_t i=0; idim->rank;++i) + LOG("[%ld]: %lf ",i,M->x[i]); + LOG("%s","\n"); - } */ } @@ -136,7 +137,6 @@ TEST(tensorContractnProd_TYPE_FLOAT ){ } - TEST(tensorContractnProd_TYPE_FLOAT2 ){ dimension *d0=create_dim(3); dimension *d1=create_dim(3); @@ -175,13 +175,102 @@ TEST(tensorContractnProd_TYPE_FLOAT2 ){ print_tensor_float(MnO,"MnO"); // for(size_t i=0;idim->rank;++i) - // EXPECT_EQ_TYPE_FLOAT(M->x[i],MnO->x[i]); + // EXPECT_EQ_TYPE_FLOAT(M->x[i],MnO->x[i]); EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,MnO->x,MnO->dim->rank); } +TEST(cl_tensorContractnProd_TYPE_FLOAT2 ){ + dimension *d0=create_dim(3); + dimension *d1=create_dim(3); + + 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]=4; + + updateRankDim(d0); + updateRankDim(d1); + + + tensor_TYPE_FLOAT *M0 = CREATE_TENSOR_TYPE_FLOAT(d0); + tensor_TYPE_FLOAT *M1 = CREATE_TENSOR_TYPE_FLOAT(d1); + + LOG("M0->dim->rank = %ld\n",M0->dim->rank); + LOG("M1->dim->rank = %ld\n",M1->dim->rank); + for(size_t i=0; idim->rank;++i) M0->x[i]=i*0.1 +1; + for(size_t i=0; idim->rank;++i) M1->x[i]=i*0.003 + 2; + + print_tensor_float(M0,"M0"); + print_tensor_float(M1,"M1"); + + tensor_TYPE_FLOAT *M; + tensor_TYPE_FLOAT *MnO; + + tensorContractnProd_TYPE_FLOAT(&M, M0,M1,2); + print_tensor_float(M,"M"); + cl_tensorContractnProd_TYPE_FLOAT(&MnO, M0,M1,2); + + + print_tensor_float(MnO,"MnO"); + + // for(size_t i=0;idim->rank;++i) + // EXPECT_EQ_TYPE_FLOAT(M->x[i],MnO->x[i]); + + EXPECT_ARRAY_EQ_TYPE_FLOAT(M->x,M->dim->rank,MnO->x,MnO->dim->rank); + + +} + +TEST(cl_tensorContractnProd_TYPE_DOUBLE2 ){ + dimension *d0=create_dim(3); + dimension *d1=create_dim(3); + + 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]=4; + + updateRankDim(d0); + updateRankDim(d1); + + + tensor_TYPE_DOUBLE *M0 = CREATE_TENSOR_TYPE_DOUBLE(d0); + tensor_TYPE_DOUBLE *M1 = CREATE_TENSOR_TYPE_DOUBLE(d1); + + LOG("M0->dim->rank = %ld\n",M0->dim->rank); + LOG("M1->dim->rank = %ld\n",M1->dim->rank); + for(size_t i=0; idim->rank;++i) M0->x[i]=i*0.1 +1; + for(size_t i=0; idim->rank;++i) M1->x[i]=i*0.003 + 2; + + print_tensor_double(M0,"M0"); + print_tensor_double(M1,"M1"); + + tensor_TYPE_DOUBLE *M; + tensor_TYPE_DOUBLE *MnO; + + tensorContractnProd_TYPE_DOUBLE(&M, M0,M1,2); + print_tensor_double(M,"M"); + cl_tensorContractnProd_TYPE_DOUBLE(&MnO, M0,M1,2); + + + print_tensor_double(MnO,"MnO"); + + // for(size_t i=0;idim->rank;++i) + // EXPECT_EQ_TYPE_DOUBLE(M->x[i],MnO->x[i]); + + EXPECT_ARRAY_EQ_TYPE_DOUBLE(M->x,M->dim->rank,MnO->x,MnO->dim->rank); + + +} int main(int argc, char **argv){ diff --git a/ytest_t/include_ytest/include/ftest/ftest.h b/ytest_t/include_ytest/include/ftest/ftest.h index 46f67bf..98fec1b 100644 --- a/ytest_t/include_ytest/include/ftest/ftest.h +++ b/ytest_t/include_ytest/include/ftest/ftest.h @@ -349,8 +349,8 @@ do{ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 %s failed %s \n",name_f,msg_call); \ - \ - }else { \ + } \ + } else { \ if(expected_##OP##_name_##type(var1, var2, name_f)){ \ /*IFTESTPASS_NAME(OP,type,var1,var2,name_f,msg_call);*/ \ if(verb==NORMAL){PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 %s passed %s \n\n",name_f,msg_call);} \ diff --git a/ytest_t/libytest.so b/ytest_t/libytest.so index 34be837599c7bc7b3a0df97c8a33f8f11717fc13..a3ca4f8bbf2c5082c586ecb61777e7c967cabbc8 100644 GIT binary patch delta 20161 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 l{`QV-Zcdy0T{-+)vbT0_{9Fw{vU7sK;ZxY delta 20161 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 YUL`YsTVnf_&7AANpXw(}SN2cGLbasU7T diff --git a/ytest_t/yftest/include/ftest/ftest.h b/ytest_t/yftest/include/ftest/ftest.h index 46f67bf..98fec1b 100644 --- a/ytest_t/yftest/include/ftest/ftest.h +++ b/ytest_t/yftest/include/ftest/ftest.h @@ -349,8 +349,8 @@ do{ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 %s failed %s \n",name_f,msg_call); \ - \ - }else { \ + } \ + } else { \ if(expected_##OP##_name_##type(var1, var2, name_f)){ \ /*IFTESTPASS_NAME(OP,type,var1,var2,name_f,msg_call);*/ \ if(verb==NORMAL){PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 %s passed %s \n\n",name_f,msg_call);} \ diff --git a/ytools_t/src/tools_t/tools_t.c b/ytools_t/src/tools_t/tools_t.c index 0e58668..2c3b095 100644 --- a/ytools_t/src/tools_t/tools_t.c +++ b/ytools_t/src/tools_t/tools_t.c @@ -77,7 +77,8 @@ TYPE_STRING TYPE_STRING_TO_STR(TYPE_STRING var){ // with gcc we can change value of theses PRECISION_TYPES below with: gcc -D PRECISION_TYPE_FLOAT=100000 for instance! #ifndef PRECISION_TYPE_FLOAT - #define PRECISION_TYPE_FLOAT 100000000 + /*#define PRECISION_TYPE_FLOAT 100000000*/ + #define PRECISION_TYPE_FLOAT 100000 #endif #ifndef PRECISION_TYPE_DOUBLE #define PRECISION_TYPE_DOUBLE 100000000000