From 2df6c36d99e4283924c0e5cf598aaae6642a4fde Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Fri, 17 May 2024 19:29:16 -0300 Subject: [PATCH] fixed sum axis with keepdim --- build/cpu.o | Bin 10976 -> 10848 bytes build/tensor.o | Bin 43312 -> 43304 bytes norch/csrc/cpu.cpp | 5 +---- norch/csrc/cpu.h | 2 +- norch/csrc/tensor.cpp | 35 ++++++++++++++++++----------------- norch/libtensor.so | Bin 172864 -> 172864 bytes 6 files changed, 20 insertions(+), 22 deletions(-) diff --git a/build/cpu.o b/build/cpu.o index adc39e5238ee388ad81ef0ef6924b00d82d01d9e..6372b93e473468016bdccce213ac77d7ba4524e3 100644 GIT binary patch delta 1139 zcmZuvUr19?7(eIEVk7O|soPr6Vq&+u<%7|~GAk!_;1Wp+4nl+;g6O3naG=nbaxu8v z2GSuYBIqd}#YXgp9yWZ~B!v}0_7JX^u%VE#K~u!_oqNxWh97+A&+q&FzVCeBz4=If zct#QO@_cYaiicG_wxa6MoE}+H^?}r7on*CGwiX?^CH_j4MJLH;NCAPV23aw}T|J}_ z>tbisKt`mX-u$ele+nwjl|>1G59G_@^|UF}NCB^Bfy-h9a3?BFV1yt)8gDl9#luPu z$=-LXi3_a8TecM0QW^rHRVHjVBH4d+45X8t3^7@pAT zcJ#DCHgR^Z2Alc*O7jySjcni&s?};5DdJLYw^mzRD2u-Bh^nu_hcBx1yvvpR-um7~ zpSe#bbM9_I+J?Cya#(sGTxvOJ`;C*5_iU5HL?Q5+`j2_y9|VM25k_ZP*^m&rYHeth z<8h9w9Jkpleum>WI3D1*+-3pKIev}f3mi9pK!`;xJcwr7E#@c}JmvzM%L49k{1tWj zJl;1vI@S>VlI-_=6p}6eQ#cvwSj2dl;!e+%uac#1f~^C52L{OOE`L2Vi4K5wf-@WC zX&FBVUgs~nl8-uHV(;FRm=KI@%;R)O_RvAu?tIt~k?EA|@z%RvYKYF#d5G3qm7qCh z^{iv`hrHUd#@}Rys6Ws~^CyouihlEs!W1hZ;e?y|kGkogqSTKwisDe*7N?7*l@K1L yTS}iW$(aEKPtu7%AAUjK!K%=$K%bEF(sRL!4!h6NeWO#skmI&&-NtCYa{Mm^l0$d^ delta 1260 zcmZuvUr19?7(eG~;ZWQ4-{vCAG~IO>Xg%nV(#j7ml;J~yNRSozrYU47HAY;FE;k`K z5cLow^w2|~GLTUVwujgtAGGKttVZ}SnV{jI3F7+B&Y98hgYTa2{J!7!edqknjbDxT zJ=K&!_q=C7^$+T%FQ%L0VY4r!n>};gCIq|9*kgEW_=1`7fg$@wc*|Y}D^Z9OG~I%j z)z$2UxUZSVx<#zMxPI%i9{Hu{bZN`367-&xEqi|?TWCO>CXol&M+L;o$l7~K2=*rv z{u0qp^Fr`}L!Um&X9W2t!9QyZiDFDwk<}OcH^(9->_lOevm`;yBY0ueKCNPdC}f*i zkm!JreL96DQCR1dmLC!(Y|1kj3B`nz;Y*Q;aSKxVbA7sUiqkMZhj+7zEZBVUXWLvB z6MJ!=>VTlHSg<2;C0T-@5vEv+J6=QVvk?mG`}S+W`Pgt5k6;X^XmSdV_}|p9P_#(Q zQ!TvFEbN#O3)X3DZwA+V|H|wW5Cal)jbt(z16JwU(rzXbg>?4%;7y|>zB3l2_nV6^ zIS|f03JNJ6#eg(TehiG2|0pPE7$WS7<8%S$0)9uUqFzuighT2hI-qHL*GH^x!soc;u0M|uSe&0N8%jC$H^iAJ%z%OdV$e*s-EU@HIs diff --git a/build/tensor.o b/build/tensor.o index 0071d08d1c19ea6783ac31468df999592c89e296..893104690408c2422c28c7d106ccbeac4d8628d0 100644 GIT binary patch literal 43304 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≥3tc|8y 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 jA`!<~S7Bb99^JtGnB!|c*YVr__data[index + i * axis_stride]; } } - for (int j = 0; j < size; j++) { - printf("%f", result_data[j]); - } } } diff --git a/norch/csrc/cpu.h b/norch/csrc/cpu.h index 5fe358c..28404e5 100644 --- a/norch/csrc/cpu.h +++ b/norch/csrc/cpu.h @@ -5,7 +5,7 @@ void add_tensor_cpu(Tensor* tensor1, Tensor* tensor2, float* result_data); void add_broadcasted_tensor_cpu(Tensor* tensor1, Tensor* tensor2, float* result_data, int* broadcasted_shape, int broadcasted_size); -void sum_tensor_cpu(Tensor* tensor, float* result_data, int size, int* shape, int axis, bool keepdim); +void sum_tensor_cpu(Tensor* tensor, float* result_data, int size, int* shape, int axis); void sub_tensor_cpu(Tensor* tensor1, Tensor* tensor2, float* result_data); void sub_broadcasted_tensor_cpu(Tensor* tensor1, Tensor* tensor2, float* result_data, int* broadcasted_shape, int broadcasted_size); void elementwise_mul_tensor_cpu(Tensor* tensor1, Tensor* tensor2, float* result_data); diff --git a/norch/csrc/tensor.cpp b/norch/csrc/tensor.cpp index c945689..b717145 100644 --- a/norch/csrc/tensor.cpp +++ b/norch/csrc/tensor.cpp @@ -192,24 +192,14 @@ extern "C" { shape[0] = 1; ndim = 1; } else { - - if (keepdim) { - shape = (int*) malloc((tensor->ndim) * sizeof(int)); - for (int i = 0; i < tensor->ndim; i++) { - shape[i] = tensor->shape[i]; + shape = (int*) malloc((tensor->ndim - 1) * sizeof(int)); + for (int i = 0, j = 0; i < tensor->ndim; ++i) { + if (i != axis) { + shape[j++] = tensor->shape[i]; } - shape[axis] = 1; - ndim = tensor->ndim; - - } else { - shape = (int*) malloc((tensor->ndim - 1) * sizeof(int)); - for (int i = 0, j = 0; i < tensor->ndim; ++i) { - if (i != axis) { - shape[j++] = tensor->shape[i]; - } - } - ndim = tensor->ndim - 1; } + ndim = tensor->ndim - 1; + } int size = 1; @@ -230,7 +220,18 @@ extern "C" { fprintf(stderr, "Memory allocation failed\n"); exit(1); } - sum_tensor_cpu(tensor, result_data, size, shape, axis, keepdim); + sum_tensor_cpu(tensor, result_data, size, shape, axis); + + if (keepdim) { + shape = (int*) malloc((tensor->ndim) * sizeof(int)); + for (int i = 0; i < tensor->ndim; i++) { + shape[i] = tensor->shape[i]; + } + shape[axis] = 1; + ndim = tensor->ndim; + + } + return create_tensor(result_data, shape, ndim, device); } } diff --git a/norch/libtensor.so b/norch/libtensor.so index 09af449b259d5e11ee27f21d0f339c1a2e53fcef..9212825f2e434aeeaf8c3bd47dd6fe72c899a152 100755 GIT binary patch delta 22187 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

Y)eBGW397Q<|ob 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 delta 22180 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 VX;&I|X1Bgpn#q7tl