From 8aa7843f0eac7f257f30d296ff6ecdb687e683a6 Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Thu, 20 Aug 2020 05:27:42 +0100 Subject: [PATCH] Updated init parameter to be tensor vector --- src/Manager.hpp | 4 ++-- src/OpBase.hpp | 2 +- src/OpCreateTensor.cpp | 18 +++++++++++------ src/OpCreateTensor.hpp | 2 +- src/OpMult.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++ src/OpMult.hpp | 40 ++++++++++++++++++++++++++++++++++++ src/main.cpp | 12 +++++------ 7 files changed, 108 insertions(+), 16 deletions(-) create mode 100644 src/OpMult.cpp create mode 100644 src/OpMult.hpp diff --git a/src/Manager.hpp b/src/Manager.hpp index 5d65e6013..de7099f29 100644 --- a/src/Manager.hpp +++ b/src/Manager.hpp @@ -28,7 +28,7 @@ class Manager // Evaluate actions template - void evalOp(TArgs&&... args) + void evalOp(std::vector> tensors) { SPDLOG_DEBUG("Kompute Manager eval triggered"); Sequence sq( @@ -36,7 +36,7 @@ class Manager SPDLOG_DEBUG("Kompute Manager created sequence"); sq.begin(); SPDLOG_DEBUG("Kompute Manager sequence begin"); - sq.record(std::forward(args)...); + sq.record(tensors); SPDLOG_DEBUG("Kompute Manager sequence end"); sq.end(); SPDLOG_DEBUG("Kompute Manager sequence eval"); diff --git a/src/OpBase.hpp b/src/OpBase.hpp index 2cf6213da..17a7acdc1 100644 --- a/src/OpBase.hpp +++ b/src/OpBase.hpp @@ -37,7 +37,7 @@ class OpBase SPDLOG_DEBUG("Compute OpBase destructor started"); } - virtual void init(std::shared_ptr tensor, ...) { + virtual void init(std::vector> tensors) { SPDLOG_DEBUG("Kompute OpBase init called"); } diff --git a/src/OpCreateTensor.cpp b/src/OpCreateTensor.cpp index 99546f2e5..bd99f6882 100644 --- a/src/OpCreateTensor.cpp +++ b/src/OpCreateTensor.cpp @@ -23,23 +23,29 @@ OpCreateTensor::~OpCreateTensor() { } void -OpCreateTensor::init(std::shared_ptr tensor, ...) +OpCreateTensor::init(std::vector> tensors) { SPDLOG_DEBUG("Kompute OpCreateTensor init called"); - this->mPrimaryTensor = tensor; + if (tensors.size() < 1) { + throw std::runtime_error("Kompute OpCreateTensor called with less than 1 tensor"); + } else if (tensors.size() > 1) { + spdlog::warn("Kompute OpCreateTensor called with more than 1 tensor"); + } + + this->mPrimaryTensor = tensors[0]; std::vector data = this->mPrimaryTensor->data(); - if (tensor->tensorType() == Tensor::TensorTypes::eDevice) { - tensor->init(this->mPhysicalDevice, this->mDevice, this->mCommandBuffer); + if (this->mPrimaryTensor->tensorType() == Tensor::TensorTypes::eDevice) { + this->mPrimaryTensor->init(this->mPhysicalDevice, this->mDevice, this->mCommandBuffer); - this->mStagingTensor = std::make_shared(tensor->data(), Tensor::TensorTypes::eStaging); + this->mStagingTensor = std::make_shared(this->mPrimaryTensor->data(), Tensor::TensorTypes::eStaging); this->mStagingTensor->init(this->mPhysicalDevice, this->mDevice, this->mCommandBuffer, data); } else { - tensor->init(this->mPhysicalDevice, this->mDevice, this->mCommandBuffer, data); + this->mPrimaryTensor->init(this->mPhysicalDevice, this->mDevice, this->mCommandBuffer, data); } } diff --git a/src/OpCreateTensor.hpp b/src/OpCreateTensor.hpp index aed91e8b6..da63c092c 100644 --- a/src/OpCreateTensor.hpp +++ b/src/OpCreateTensor.hpp @@ -27,7 +27,7 @@ class OpCreateTensor : public OpBase ~OpCreateTensor(); - void init(std::shared_ptr tensor, ...) override; + void init(std::vector> tensors) override; void record() override; diff --git a/src/OpMult.cpp b/src/OpMult.cpp new file mode 100644 index 000000000..8e339f0fe --- /dev/null +++ b/src/OpMult.cpp @@ -0,0 +1,46 @@ + + +#include "Tensor.hpp" + +#include "OpMult.hpp" + +namespace kp { + +OpMult::OpMult() { + SPDLOG_DEBUG("Kompute OpMult constructor base"); + +} + +OpMult::OpMult(std::shared_ptr physicalDevice, + std::shared_ptr device, + std::shared_ptr commandBuffer) + : OpBase(physicalDevice, device, commandBuffer) +{ + SPDLOG_DEBUG("Kompute OpMult constructor with params"); +} + +OpMult::~OpMult() { + SPDLOG_DEBUG("Kompute OpMult destructor started"); +} + +void +OpMult::init(std::vector> tensors) +{ + SPDLOG_DEBUG("Kompute OpMult init called"); + + if (tensors.size() < 2) { + throw std::runtime_error("Kompute OpMult called with less than 1 tensor"); + } else if (tensors.size() > 2) { + spdlog::warn("Kompute OpMult called with more than 2 tensor"); + } + +} + +void +OpMult::record() +{ + SPDLOG_DEBUG("Kompute OpMult record called"); + +} + +} diff --git a/src/OpMult.hpp b/src/OpMult.hpp new file mode 100644 index 000000000..3cae68efa --- /dev/null +++ b/src/OpMult.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include +#include + +// SPDLOG_ACTIVE_LEVEL must be defined before spdlog.h import +#if DEBUG +#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_DEBUG +#endif + +#include + +#include "Tensor.hpp" + +#include "OpBase.hpp" + +namespace kp { + +class OpMult : public OpBase +{ + public: + OpMult(); + + OpMult(std::shared_ptr physicalDevice, + std::shared_ptr device, + std::shared_ptr commandBuffer); + + ~OpMult(); + + void init(std::vector> tensors) override; + + void record() override; + + private: + + std::shared_ptr mPrimaryTensor; + std::shared_ptr mStagingTensor; +}; + +} // End namespace kp diff --git a/src/main.cpp b/src/main.cpp index f1a274d7f..f6468b594 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -623,16 +623,16 @@ main() kp::Manager mgr; spdlog::info("Creating first tensor"); - kp::Tensor tensorOne({0.0, 1.0, 2.0}); - mgr.evalOp(std::shared_ptr{&tensorOne}); + std::shared_ptr tensorOne{new kp::Tensor({0.0, 1.0, 2.0})}; + mgr.evalOp({tensorOne}); spdlog::info("Creating second tensor"); - kp::Tensor tensorTwo({1.0, 2.0, 3.0}); - mgr.evalOp(std::shared_ptr{&tensorTwo}); + std::shared_ptr tensorTwo{new kp::Tensor({0.0, 1.0, 2.0})}; + mgr.evalOp({tensorTwo}); spdlog::info("Called manager eval success"); - spdlog::info("Tensor one: {}", tensorOne.data()); - spdlog::info("Tensor two: {}", tensorTwo.data()); + spdlog::info("Tensor one: {}", tensorOne->data()); + spdlog::info("Tensor two: {}", tensorTwo->data()); return 0; } catch (const std::exception& exc) {