#pragma once #include #include "backend/backend.hpp" #include namespace CUDANet::Backend { enum class DType { FLOAT32, // FLOAT16, // Not implemented yet // INT32, // Not implemented yet }; typedef std::vector Shape; class Tensor { public: Tensor() = default; Tensor(Shape shape, DType dtype, IBackend* backend); ~Tensor(); void* allocate(); void deallocate(); size_t size() const; size_t numel() const; template const T* data() const; template T* data(); private: Shape shape; DType dtype; IBackend* backend; void* d_ptr; }; } // namespace CUDANet::Backend