From b09b9b9ba013deb4ec458131b09ee7800c6a98b9 Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Tue, 30 Apr 2024 01:16:13 -0300 Subject: [PATCH] Fix pow create another vector --- build/cpu.o | Bin 2400 -> 2400 bytes build/cuda.cu.o | Bin 26880 -> 27072 bytes build/libtensor.so | Bin 46224 -> 50336 bytes build/tensor.o | Bin 14272 -> 15248 bytes csrc/cpu.cpp | 4 +-- csrc/cpu.h | 2 +- csrc/cuda.cu | 8 +++--- csrc/cuda.h | 4 +-- csrc/tensor.cpp | 34 +++++++++++++++++++++--- csrc/tensor.h | 2 +- norch/__pycache__/tensor.cpython-38.pyc | Bin 5638 -> 5724 bytes norch/tensor.py | 12 ++++++--- test.py | 4 ++- 13 files changed, 53 insertions(+), 17 deletions(-) diff --git a/build/cpu.o b/build/cpu.o index b7ee56989c88d3090b82fc5b6a3bb0618d621e07..b6465ab743793c6779de951de0a487b044c5134d 100644 GIT binary patch delta 224 zcmaDL^gw9C0Y+a7kIvc~pZNt{uXuEpo;dFMh5-mXx?OK{JLp)tzNz&Du|2vOx5z}NvW-*{P4Hz?kU4zkRawWSxQyf@s^96PTM#goM89Cztwmm}W delta 205 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 QsJp`KZi|ePVantDAA@4LK>z>% delta 4499 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 diff --git a/build/tensor.o b/build/tensor.o index 34580b528a55ea22ca99cfb41eb948f574c0a84b..1d75a22fc3558d4cc060c05f1cc6cb087f218c33 100644 GIT binary patch delta 1116 zcmZ`&O=wd=5Z<>*+T@uuFMlt-m>44{F(5QCKRty)2|NlV74hOl0!_Mo7kv+t)afey^u+3%Z~Z)Z1Y&o&kt zaVm{GO}Mu0-ay|AvrebmVVg_WYcwdUOrS{M9ptiA+Ak;0I4 zosPK%EHUaFw6}`NJBvdjkoyVEaL^`Wngo{>pP0tTO9UeOTbCj+Donz1G!mGcCUfQa zi=|5W{6cwVes&HkN$YuZ*`tKLEGEQ??m_?aSGPC_sh~2>u`D#%GGm1+&`buEhLOXL zYD0ITGrI%Z$UfjYNQjyp9%;2N_o?l$+Uo0lY7hG~0b(ky>05H#z}YMTPHUXQBOE@( z;p{cdvt8Bkgmx(+N8IKLTpa!oR`5DrKoY-gc!l2$D5Zkc9WMU_m;al?`Tmk0lhD`z zL3Hy#iw2%RY>2~e8Mt{7P79J~pyO4oksATC(S1&Ue~rf+&JVU};Qhio2EHe($rAE~ z>*FTX|H8W*!3&>e?}WxC=7lQ;-Y$h-rH=9DtAMEKSMySCU~k6F0*Oh9fepX7coz0zF(lD0)sdPCqMfE}N(J j5Uk?T&O#5D(L)f*q*jT+VSXr|%XZmWloY&3i?8 delta 629 zcmbPGejtB>29txyMlD_;J^_!;+8>|!1zo>*bi4kTe2`a6QM5Z0%t_e;ko&3;5TvAFHY!Cy;>BuIi zOcpd1XKb3h5vXP%R1Lbbc7RRTi^GKDAQL7ZFuTCyE;M;mH#$ zB)E3SLqsivCvUPaV@ehQMv2%YOARP%vICHrAu>73(vIn=_~cbUN>Bo<#7cunLSnL( tl^v6X#N;d>^}%TJDj-!LIr){99cP6s#9aHyhSuhsCyXJylF1(}size; i++) { - tensor->data[i] = powf(tensor->data[i], power); + result_data[i] = powf(tensor->data[i], power); } } diff --git a/csrc/cpu.h b/csrc/cpu.h index 99b88fe..20c0f2b 100644 --- a/csrc/cpu.h +++ b/csrc/cpu.h @@ -2,4 +2,4 @@ void add_tensor_cpu(Tensor* tensor1, Tensor* tensor2, float* result_data); void sub_tensor_cpu(Tensor* tensor1, Tensor* tensor2, float* result_data); void elementwise_mul_tensor_cpu(Tensor* tensor1, Tensor* tensor2, float* result_data); -void pow_tensor_cpu(Tensor* tensor, float power); \ No newline at end of file +void pow_tensor_cpu(Tensor* tensor, float power, float* result_data); \ No newline at end of file diff --git a/csrc/cuda.cu b/csrc/cuda.cu index 4664b40..d433677 100644 --- a/csrc/cuda.cu +++ b/csrc/cuda.cu @@ -97,17 +97,17 @@ __host__ void elementwise_mul_tensor_cuda(Tensor* tensor1, Tensor* tensor2, floa cudaDeviceSynchronize(); } -__global__ void pow_tensor_cuda_kernel(float* data, float power, int size) { +__global__ void pow_tensor_cuda_kernel(float* data, float power, float* result_data, int size) { int i = blockIdx.x * blockDim.x + threadIdx.x; if (i < size) { - data[i] = powf(data[i], power); + result_data[i] = powf(data[i], power); } } -__host__ void pow_tensor_cuda(Tensor* tensor, float power) { +__host__ void pow_tensor_cuda(Tensor* tensor, float power, float* result_data) { int number_of_blocks = (tensor->size + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; - pow_tensor_cuda_kernel<<>>(tensor->data, power, tensor->size); + pow_tensor_cuda_kernel<<>>(tensor->data, power, result_data, tensor->size); cudaError_t error = cudaGetLastError(); if (error != cudaSuccess) { diff --git a/csrc/cuda.h b/csrc/cuda.h index ea30b04..c1a1404 100644 --- a/csrc/cuda.h +++ b/csrc/cuda.h @@ -13,7 +13,7 @@ __global__ void elementwise_mul_tensor_cuda_kernel(float* data1, float* data2, float* result_data, int size); __host__ void elementwise_mul_tensor_cuda(Tensor* tensor1, Tensor* tensor2, float* result_data); - __global__ void pow_tensor_cuda_kernel(float* data, float power, int size); - __host__ void pow_tensor_cuda(Tensor* tensor, float power); + __global__ void pow_tensor_cuda_kernel(float* data, float power, float* result_data, int size); + __host__ void pow_tensor_cuda(Tensor* tensor, float power, float* result_data); #endif /* CUDA_KERNEL_H_ */ diff --git a/csrc/tensor.cpp b/csrc/tensor.cpp index 5f2b26a..05baef0 100644 --- a/csrc/tensor.cpp +++ b/csrc/tensor.cpp @@ -304,12 +304,40 @@ extern "C" { return create_tensor(result_data, shape, ndim, device); } - void pow_tensor(Tensor* tensor, float power) { + Tensor* pow_tensor(Tensor* tensor, float power) { + char* device = (char*)malloc(strlen(tensor->device) + 1); + if (device != NULL) { + strcpy(device, tensor->device); + } else { + fprintf(stderr, "Memory allocation failed\n"); + exit(-1); + } + int ndim = tensor->ndim; + int* shape = (int*)malloc(ndim * sizeof(int)); + if (shape == NULL) { + fprintf(stderr, "Memory allocation failed\n"); + exit(1); + } + + for (int i = 0; i < ndim; i++) { + shape[i] = tensor->shape[i]; + } + if (strcmp(tensor->device, "cuda") == 0) { - pow_tensor_cuda(tensor, power); + + float* result_data; + cudaMalloc((void **)&result_data, tensor->size * sizeof(float)); + pow_tensor_cuda(tensor, power, result_data); + return create_tensor(result_data, shape, ndim, device); } else { - pow_tensor_cpu(tensor, power); + float* result_data = (float*)malloc(tensor->size * sizeof(float)); + if (result_data == NULL) { + fprintf(stderr, "Memory allocation failed\n"); + exit(1); + } + pow_tensor_cpu(tensor, power, result_data); + return create_tensor(result_data, shape, ndim, device); } } diff --git a/csrc/tensor.h b/csrc/tensor.h index c87f2af..a075fb7 100644 --- a/csrc/tensor.h +++ b/csrc/tensor.h @@ -20,7 +20,7 @@ extern "C" { Tensor* elementwise_mul_tensor(Tensor* tensor1, Tensor* tensor2); void reshape_tensor(Tensor* tensor, int* new_shape, int new_ndim); Tensor* matmul_tensor(Tensor* tensor1, Tensor* tensor2); - void pow_tensor(Tensor* tensor, float power); + Tensor* pow_tensor(Tensor* tensor, float power); void to_device(Tensor* tensor, char* device); } diff --git a/norch/__pycache__/tensor.cpython-38.pyc b/norch/__pycache__/tensor.cpython-38.pyc index 688c842a68f6ee780932432b05a7b16f6d2b30bb..3f68c9e7d044594cf3e45f010293d29df7a2d022 100644 GIT binary patch delta 280 zcmZqExue4u%FD~e00b!o25H4|8~HBqiQEz_N-ZwUDTyyh%`46?iZ3WBy0!TepDOF* zJp#OpIg?dIl!Hqc7BH1CFJvrX$zsi7i{}8*3)pHHvN&rP7c$i{m9R83)H2sF)iB3% z0!6tNa4%#4vblh49w5yFqfSh6xAi==I#U#ckz$C!L#>mFV!^pwN hG5MZIy{J1-s>lOGc!CIT5aBbqNYszfck)3|R{(UyKZ*bV delta 161 zcmcbk)2720%FD~e00d`J4brM)H}YNJ6NwTmN-ZwUDTyyh%`46?iZ3WBirV~%PnDIA z38;_-h@FAB*lx0_h%!?O!{h)FFqT9G3X0r7ggc1v1QA}7Pl)<4dQTP?a|Hl5a3b6Q diff --git a/norch/tensor.py b/norch/tensor.py index 789c788..97c3ec2 100644 --- a/norch/tensor.py +++ b/norch/tensor.py @@ -204,8 +204,14 @@ class Tensor: power = ctypes.c_float(power) Tensor._C.pow_tensor.argtypes = [ctypes.POINTER(CTensor), ctypes.c_float] - Tensor._C.pow_tensor.restype = None + Tensor._C.pow_tensor.restype = ctypes.POINTER(CTensor) - Tensor._C.pow_tensor(self.tensor, power) + result_tensor_ptr = Tensor._C.pow_tensor(self.tensor, power) - return self \ No newline at end of file + result_data = Tensor() + result_data.tensor = result_tensor_ptr + result_data.shape = self.shape.copy() + result_data.ndim = self.ndim + result_data.device = self.device + + return result_data \ No newline at end of file diff --git a/test.py b/test.py index ed5aff9..32946a6 100644 --- a/test.py +++ b/test.py @@ -28,7 +28,9 @@ if __name__ == "__main__": #c = Tensor([[1, 2, 3], [1, 2, 3], [1, 2, 3]])#.to("cuda") #d = b-c - print(a ** 2) + + b = a ** 2 + print(b) #print(a ** 2) """#print(a)