From 10c84d75fc8708a6c217fcc44712d4caa54da8b8 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Tue, 18 Nov 2025 22:38:56 +0100 Subject: [PATCH] Fix Tensor issues --- include/backend.hpp | 5 +++-- include/tensor.hpp | 12 +++++++++--- src/layers/dense.cpp | 8 +++++--- src/tensor.cpp | 21 ++++----------------- 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/include/backend.hpp b/include/backend.hpp index 1c69e51..07045dd 100644 --- a/include/backend.hpp +++ b/include/backend.hpp @@ -2,10 +2,11 @@ #include -#include "tensor.hpp" - namespace CUDANet { +// Forward declaration +class Tensor; + class Backend { public: // Memory management diff --git a/include/tensor.hpp b/include/tensor.hpp index b122fb0..c42d1e1 100644 --- a/include/tensor.hpp +++ b/include/tensor.hpp @@ -34,15 +34,21 @@ public: size_t numel() const; template - const T* data() const; + const T* data() const { + return static_cast(d_ptr); + } template - T* data(); + T* data() { + return static_cast(d_ptr); + } void zero(); template - void set_data(T *data); + void set_data(T *data) { + backend->copy_to_device(*this, data, total_size); + } private: Shape shape; diff --git a/src/layers/dense.cpp b/src/layers/dense.cpp index bdaa5ee..1ba8c4c 100644 --- a/src/layers/dense.cpp +++ b/src/layers/dense.cpp @@ -10,10 +10,10 @@ Dense::Dense(CUDANet::Backend* backend, CUDANet::Shape in, CUDANet::Shape out) in_shape(in), out_shape(out), weights( - CUDANet::Tensor{{in[0] * out[0]}, CUDANet::DType::FLOAT32, backend} + CUDANet::Tensor(Shape{in[0] * out[0]}, CUDANet::DType::FLOAT32, backend) ), - biases(CUDANet::Tensor({out[0]}, CUDANet::DType::FLOAT32, backend)), - output(CUDANet::Tensor({out[0]}, CUDANet::DType::FLOAT32, backend)) { + biases(CUDANet::Tensor(Shape{out[0]}, CUDANet::DType::FLOAT32, backend)), + output(CUDANet::Tensor(Shape{out[0]}, CUDANet::DType::FLOAT32, backend)) { // Allocate memory for weights and biases if (in.size() != 1) { @@ -35,6 +35,8 @@ Dense::Dense(CUDANet::Backend* backend, CUDANet::Shape in, CUDANet::Shape out) biases.zero(); } +Dense::~Dense() {} + CUDANet::Tensor& Dense::forward(const CUDANet::Tensor& input) { backend->dense(weights, biases, input, output, in_shape[0], out_shape[0]); return output; diff --git a/src/tensor.cpp b/src/tensor.cpp index bed6f8c..5750d49 100644 --- a/src/tensor.cpp +++ b/src/tensor.cpp @@ -68,8 +68,10 @@ Tensor& Tensor::operator=(Tensor&& other) noexcept { } Tensor::~Tensor() { - backend->deallocate(d_ptr); - d_ptr = nullptr; + if (backend && d_ptr) { + backend->deallocate(d_ptr); + d_ptr = nullptr; + } } size_t Tensor::numel() const { @@ -80,21 +82,6 @@ size_t Tensor::size() const { return total_size; } -template -const T* Tensor::data() const { - return static_cast(d_ptr); -} - -template -T* Tensor::data() { - return static_cast(d_ptr); -} - void Tensor::zero() { backend->zero(*this); } - -template -void Tensor::set_data(T *data) { - backend->copy_to_device(*this, data, total_size); -} \ No newline at end of file