From fd831f950d39e5dce67744f823fc4c81ed4c36da Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Tue, 21 May 2024 00:38:34 -0300 Subject: [PATCH] fix add min max keepdim --- build/tensor.o | Bin 50768 -> 50320 bytes norch/csrc/tensor.cpp | 83 ++++++++++++++++++--------------------- norch/libtensor.so | Bin 194800 -> 194792 bytes tests/test_operations.py | 1 + 4 files changed, 39 insertions(+), 45 deletions(-) diff --git a/build/tensor.o b/build/tensor.o index d12bc526f48941d9271926bd72e9a6df3e846ecd..85b704a056485eb2ee0d1b300fba4502c79a5ca6 100644 GIT binary patch literal 50320 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 bvb}-y%Z(qOO9gFzUx(cyVPDd}-R=Ju4Zs$I literal 50768 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 W{nwXRw*4>PYWGO!j`G*t|9=3Qdz{Vy diff --git a/norch/csrc/tensor.cpp b/norch/csrc/tensor.cpp index a340c73..63568cc 100644 --- a/norch/csrc/tensor.cpp +++ b/norch/csrc/tensor.cpp @@ -183,11 +183,8 @@ extern "C" { int ndim; int* shape; if (axis == -1) { + shape = (int*) malloc(sizeof(int)); - if (shape == NULL) { - fprintf(stderr, "Memory allocation failed\n"); - exit(1); - } shape[0] = 1; ndim = 1; } else { @@ -198,7 +195,6 @@ extern "C" { } } ndim = tensor->ndim - 1; - } int size = 1; @@ -220,25 +216,27 @@ extern "C" { fprintf(stderr, "Memory allocation failed\n"); exit(1); } + 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++) { - if (axis == -1) { + if (axis == -1){ + ndim = tensor->ndim; + shape = (int*) malloc((tensor->ndim) * sizeof(int)); + for (int i = 0; i < tensor->ndim; i++) { shape[i] = 1; - } else { + } + } else { + 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; } - shape[axis] = 1; - ndim = tensor->ndim; - Tensor* new_tensor = create_tensor(result_data, shape, ndim, device); - return reshape_tensor(new_tensor, shape, ndim); + } - return create_tensor(result_data, shape, ndim, device); - } } @@ -252,12 +250,8 @@ extern "C" { } int ndim; int* shape; - if (axis == -1) { + if (axis == -1) { shape = (int*) malloc(sizeof(int)); - if (shape == NULL) { - fprintf(stderr, "Memory allocation failed\n"); - exit(1); - } shape[0] = 1; ndim = 1; } else { @@ -268,7 +262,6 @@ extern "C" { } } ndim = tensor->ndim - 1; - } int size = 1; @@ -293,18 +286,20 @@ extern "C" { max_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++) { - if (axis == -1) { + if (axis == -1){ + ndim = tensor->ndim; + shape = (int*) malloc((tensor->ndim) * sizeof(int)); + for (int i = 0; i < tensor->ndim; i++) { shape[i] = 1; - } else { + } + } else { + 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; - Tensor* new_tensor = create_tensor(result_data, shape, ndim, device); - return reshape_tensor(new_tensor, shape, ndim); + shape[axis] = 1; + ndim = tensor->ndim; + } } return create_tensor(result_data, shape, ndim, device); @@ -322,11 +317,8 @@ extern "C" { int ndim; int* shape; if (axis == -1) { + shape = (int*) malloc(sizeof(int)); - if (shape == NULL) { - fprintf(stderr, "Memory allocation failed\n"); - exit(1); - } shape[0] = 1; ndim = 1; } else { @@ -337,9 +329,8 @@ extern "C" { } } ndim = tensor->ndim - 1; - } - + int size = 1; for (int i = 0; i < ndim; i++) { size *= shape[i]; @@ -362,18 +353,20 @@ extern "C" { min_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++) { - if (axis == -1) { + if (axis == -1){ + ndim = tensor->ndim; + shape = (int*) malloc((tensor->ndim) * sizeof(int)); + for (int i = 0; i < tensor->ndim; i++) { shape[i] = 1; - } else { + } + } else { + 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; - Tensor* new_tensor = create_tensor(result_data, shape, ndim, device); - return reshape_tensor(new_tensor, shape, ndim); + 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 5d6e518858f33e23124f274788b4c26e00a07c7e..de7ec33a5d384ea53ebe16737bffeeb968ac13c6 100755 GIT binary patch delta 26250 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 I8@2ZT1D!$0tpET3 delta 26844 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 C{QM69 diff --git a/tests/test_operations.py b/tests/test_operations.py index 8a684e9..dffe0a1 100644 --- a/tests/test_operations.py +++ b/tests/test_operations.py @@ -272,6 +272,7 @@ class TestTensorOperations(unittest.TestCase): torch_tensor = torch.tensor([[[1, 2], [3, -4]], [[5, 6], [7, 8]]]).to(self.device) torch_expected = torch.sum(torch_tensor, dim=1, keepdim=True) + print(torch_result, torch_expected) self.assertTrue(utils.compare_torch(torch_result, torch_expected)) def test_max(self):