From 5da5a7ad0d7328702d392dd39e0a42e6d8ef9fab Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Thu, 16 May 2024 19:34:58 -0300 Subject: [PATCH] batched matmul cuda --- norch/csrc/cuda.cu | 36 ++++++++++++++++++++++++++++++++++++ norch/csrc/cuda.h | 3 +++ norch/csrc/tensor.cpp | 2 +- norch/libtensor.so | Bin 155760 -> 160224 bytes 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/norch/csrc/cuda.cu b/norch/csrc/cuda.cu index 460baec..e79955a 100644 --- a/norch/csrc/cuda.cu +++ b/norch/csrc/cuda.cu @@ -379,6 +379,42 @@ __host__ void matmul_tensor_cuda(Tensor* tensor1, Tensor* tensor2, float* result cudaDeviceSynchronize(); } +__global__ void batched_matmul_tensor_cuda_kernel(float* data1, float* data2, float* result_data, int batch_size, int rows1, int cols1, int cols2) { + int batch = blockIdx.z; + int row = blockIdx.y * blockDim.y + threadIdx.y; + int col = blockIdx.x * blockDim.x + threadIdx.x; + + if (row < rows1 && col < cols2) { + float sum = 0.0f; + for (int k = 0; k < cols1; ++k) { + sum += data1[batch * rows1 * cols1 + row * cols1 + k] * + data2[batch * cols1 * cols2 + k * cols2 + col]; + } + result_data[batch * rows1 * cols2 + row * cols2 + col] = sum; + } +} + +__host__ void batched_matmul_tensor_cuda(Tensor* tensor1, Tensor* tensor2, float* result_data) { + + int batch_size = tensor2->shape[0]; + int rows1 = tensor1->shape[1]; + int cols1 = tensor1->shape[2]; + int cols2 = tensor2->shape[2]; + + dim3 threadsPerBlock(16, 16); + dim3 number_of_blocks((cols2 + threadsPerBlock.x - 1) / threadsPerBlock.x, (rows1 + threadsPerBlock.y - 1) / threadsPerBlock.y); + batched_matmul_tensor_cuda_kernel<<>>(tensor1->data, tensor2->data, result_data, batch_size, rows1, cols1, cols2); + + + cudaError_t error = cudaGetLastError(); + if (error != cudaSuccess) { + printf("CUDA error: %s\n", cudaGetErrorString(error)); + exit(-1); + } + + cudaDeviceSynchronize(); +} + __global__ void tensor_pow_scalar_cuda_kernel(float* data, float exponent, float* result_data, int size) { int i = blockIdx.x * blockDim.x + threadIdx.x; diff --git a/norch/csrc/cuda.h b/norch/csrc/cuda.h index e333ea7..5d5e353 100644 --- a/norch/csrc/cuda.h +++ b/norch/csrc/cuda.h @@ -34,6 +34,9 @@ __global__ void matmul_tensor_cuda_kernel(float* data1, float* data2, float* result_data, int rows1, int cols1, int cols2); __host__ void matmul_tensor_cuda(Tensor* tensor1, Tensor* tensor2, float* result_data); + __global__ void batched_matmul_tensor_cuda_kernel(float* data1, float* data2, float* result_data, int batch_size, int rows1, int cols1, int cols2); + __host__ void batched_matmul_tensor_cuda(Tensor* tensor1, Tensor* tensor2, float* result_data); + __global__ void tensor_pow_scalar_cuda_kernel(float* data, float exponent, float* result_data, int size); __host__ void tensor_pow_scalar_cuda(Tensor* tensor, float exponent, float* result_data); diff --git a/norch/csrc/tensor.cpp b/norch/csrc/tensor.cpp index bdb432a..104994e 100644 --- a/norch/csrc/tensor.cpp +++ b/norch/csrc/tensor.cpp @@ -695,7 +695,7 @@ extern "C" { float* result_data; cudaMalloc((void **)&result_data, size * sizeof(float)); - //batched_matmul_tensor_cuda(tensor1, tensor2, result_data); + batched_matmul_tensor_cuda(tensor1, tensor2, result_data); return create_tensor(result_data, shape, ndim, device); } else { diff --git a/norch/libtensor.so b/norch/libtensor.so index c0f88c28312a014cd7198a82bee5bcb903f9429f..06f1149ad1e7f471af0f85187b24903bc3f88fb5 100755 GIT binary patch delta 43047 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 U(4X>cnS=xJw%*dgNx1R<1Nw(G3jhEB