[debug] fix transpose Opt func and alternative

This commit is contained in:
2026-07-23 00:38:24 +02:00
parent 7581a2612a
commit 3b5185c201
2 changed files with 105 additions and 7 deletions
+40 -5
View File
@@ -876,6 +876,8 @@ void append_array_chainlist_##type(array_chainlist_##type **list_a, type x);\
tensor_##type * create_tensor_from_list_array_##type( array_chainlist_##type *l_a, dimension *part_dim);\
void free_array_chainlist_##type(array_chainlist_##type *l_a);\
tensor_##type * transpose_notOpt_tensor_##type(tensor_##type *org);\
tensor_##type * transpose_Opt0_tensor_##type(tensor_##type *org);\
tensor_##type * transpose_Opt1_tensor_##type(tensor_##type *org);\
tensor_##type * permute_notOpt_tensor_##type(tensor_##type *org, dimension *dshape);\
void update_1tensor_func_##type(tensor_##type *M0, \
type (*func)(type), size_t nbthread);\
@@ -2882,12 +2884,14 @@ tensor_##type * transpose_notOpt_tensor_##type(tensor_##type *org){\
return tens_tr;\
}\
\
\
tensor_##type * transpose_Opt0_tensor_##type(tensor_##type *org){\
size_t dimrnk = org->dim->rank;\
dimension *dim= org->dim;\
size_t dimrnk = dim->rank;\
dimension *dim_tr=create_dim(dimrnk);\
for(size_t i=0; i<dimrnk; ++i) dim_tr->shape[i]=(org->dim)->shape[(dimrnk-1)-i];\
updateDim(dim_tr);\
printDebug_dimension(dim_tr,"dim_trOpt");\
for(size_t i=0; i<dimrnk; ++i) dim_tr->shape[i]=dim->shape[(dimrnk-1)-i];\
/*updateDim(dim_tr);\
printDebug_dimension(dim_tr,"dim_trOpt");*/\
tensor_##type *tens_tr = create_tensor_##type(dim_tr);\
/*tensor_##type *tens_tr = CREATE_TENSOR_##type(dim_tr);*/\
long int cur_tr=0, add_tr=0, minus_tr=0;\
@@ -2900,7 +2904,8 @@ tensor_##type * transpose_Opt0_tensor_##type(tensor_##type *org){\
if(cur_tr + add_tr < dim_tr->basis[l]){\
cur_tr += add_tr;\
/*tens_tr->x[cur_tr] = org->x[i]*/;\
tens_tr->x[i] = org->x[cur_tr];\
/*tens_tr->x[i] = org->x[cur_tr];\
*/tens_tr->x[cur_tr] = org->x[i];\
break;\
}\
minus_tr -= (dim_tr->basis[l]-dim_tr->basis[l+1]);\
@@ -2910,6 +2915,36 @@ tensor_##type * transpose_Opt0_tensor_##type(tensor_##type *org){\
return tens_tr;\
}\
\
tensor_##type * transpose_Opt1_tensor_##type(tensor_##type *org){\
dimension *dim= org->dim;\
/*updateDim(dim);*/\
size_t dimrnk = dim->rank;\
dimension *dim_tr=create_dim(dimrnk);\
for(size_t i=0; i<dimrnk; ++i) dim_tr->shape[i]=dim->shape[(dimrnk-1)-i];\
/*updateDim(dim_tr);\
printDebug_dimension(dim_tr,"dim_trOpt");*/\
tensor_##type *tens_tr = create_tensor_##type(dim_tr);\
/*tensor_##type *tens_tr = CREATE_TENSOR_##type(dim_tr);*/\
long int cur_tr=0, add_tr=0, minus_tr=0;\
tens_tr->x[cur_tr] = org->x[cur_tr];\
for(size_t i=1; i<dim->size; ++i){\
minus_tr =0;\
/*printf("DEBUG: cur_tr=%ld\n",cur_tr);*/\
for(size_t l=0; l<dimrnk; ++l){ \
add_tr = minus_tr + dim->basis[l+1];\
if(cur_tr + add_tr < dim->basis[l]){\
cur_tr += add_tr;\
/*tens_tr->x[cur_tr] = org->x[i]*/;\
tens_tr->x[i] = org->x[cur_tr];\
break;\
}\
minus_tr -= (dim->basis[l]-dim->basis[l+1]);\
}\
/*printf("DEBUG: after cur_tr=%ld\n",cur_tr);*/\
}\
return tens_tr;\
}\
\
tensor_##type * permute_notOpt_tensor_##type(tensor_##type *org, dimension *dshape){\
size_t dimrnk = (org->dim)->rank; \
dimension *dim_tr=create_dim(dimrnk);\