};
}
+Stage StageGenerator::generate(
+ const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node)
+{
+ throw std::runtime_error("Wrong Approach");
+}
+
+Stage StageGenerator::generate(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node)
+{
+ throw std::runtime_error("Wrong Approach");
+}
+
+Stage StageGenerator::generate(
+ const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node)
+{
+ throw std::runtime_error("NYI - StageGenerator::generate(TensorConvert::AclFromCommon)");
+}
+
+Stage StageGenerator::generate(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node)
+{
+ throw std::runtime_error("NYI - StageGenerator::generate(TensorConvert::AclToCommon)");
+}
+
} // namespace arm_compute
} // namespace internal
virtual Stage generate(const ::internal::tflite::op::FullyConnected::Node &node) override;
virtual Stage generate(const ::internal::tflite::op::Reshape::Node &node) override;
virtual Stage generate(const ::internal::tflite::op::Softmax::Node &node) override;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node) override;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node) override;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node) override;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node) override;
private:
const ::internal::tflite::operand::Set &_ctx;
};
}
+Stage StageGenerator::generate(
+ const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node)
+{
+ throw std::runtime_error("NYI - StageGenerator::generate(TensorConvert::CpuFromCommon)");
+}
+
+Stage StageGenerator::generate(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node)
+{
+ throw std::runtime_error("NYI - StageGenerator::generate(TensorConvert::CpuToCommon)");
+}
+
+Stage StageGenerator::generate(
+ const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node)
+{
+ throw std::runtime_error("Wrong Approach");
+}
+
+Stage StageGenerator::generate(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node)
+{
+ throw std::runtime_error("Wrong Approach");
+}
+
} // namespace stage
} // namespace internal
virtual Stage generate(const ::internal::tflite::op::FullyConnected::Node &node) override;
virtual Stage generate(const ::internal::tflite::op::Reshape::Node &node) override;
virtual Stage generate(const ::internal::tflite::op::Softmax::Node &node) override;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node) override;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node) override;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node) override;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node) override;
private:
const ::internal::tflite::operand::Set &_ctx;
#include "internal/op/Op.lst"
#undef OP
+
+ // TODO : It's just workaround. It's logic should be changed.
+ _gen_map[typeid(::internal::tflite::op::TensorConvert::CpuFromCommon::Node)] =
+ backend_manager.get("cpu");
+ _gen_map[typeid(::internal::tflite::op::TensorConvert::CpuToCommon::Node)] =
+ backend_manager.get("cpu");
+ _gen_map[typeid(::internal::tflite::op::TensorConvert::AclFromCommon::Node)] =
+ backend_manager.get("acl_cl");
+ _gen_map[typeid(::internal::tflite::op::TensorConvert::AclToCommon::Node)] =
+ backend_manager.get("acl_cl");
}
std::shared_ptr<::internal::IInitializerGenerator>
void visit(const ::internal::tflite::op::FullyConnected::Node &node) override;
void visit(const ::internal::tflite::op::Reshape::Node &node) override;
void visit(const ::internal::tflite::op::Softmax::Node &node) override;
+ void visit(const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node) override;
+ void visit(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node) override;
+ void visit(const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node) override;
+ void visit(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node) override;
private:
const ::internal::tflite::operand::Set &_ctx;
_builder.addStage(stage_gen->generate(node));
}
+void Planner::visit(const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node)
+{
+ throw std::runtime_error("NYI - Planner::visit(TensorConvert::CpuFromCommon");
+}
+
+void Planner::visit(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node)
+{
+ throw std::runtime_error("NYI - Planner::visit(TensorConvert::CpuToCommon");
+}
+
+void Planner::visit(const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node)
+{
+ throw std::runtime_error("NYI - Planner::visit(TensorConvert::FromCommon");
+}
+
+void Planner::visit(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node)
+{
+ throw std::runtime_error("NYI - Planner::visit(TensorConvert::AclToCommon");
+}
+
class TensorMarker : public ::internal::tflite::op::NodeVisitor
{
public:
void visit(const ::internal::tflite::op::FullyConnected::Node &node) override;
void visit(const ::internal::tflite::op::Reshape::Node &node) override;
void visit(const ::internal::tflite::op::Softmax::Node &node) override;
+ void visit(const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node) override;
+ void visit(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node) override;
+ void visit(const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node) override;
+ void visit(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node) override;
private:
void mark(int32_t ind) { _tensor_builder.mark(::internal::tflite::operand::Index{ind}); }
mark(param.input_index);
}
+void TensorMarker::visit(const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node)
+{
+ // DO NOTHING
+}
+
+void TensorMarker::visit(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node)
+{
+ // DO NOTHING
+}
+
+void TensorMarker::visit(const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node)
+{
+ // DO NOTHING
+}
+
+void TensorMarker::visit(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node)
+{
+ // DO NOTHING
+}
+
class ExecutionBuilder final : public IExecutionBuilder
{
public:
virtual Stage generate(const ::internal::tflite::op::FullyConnected::Node &node) = 0;
virtual Stage generate(const ::internal::tflite::op::Reshape::Node &node) = 0;
virtual Stage generate(const ::internal::tflite::op::Softmax::Node &node) = 0;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::CpuFromCommon::Node &node) = 0;
+ virtual Stage generate(const ::internal::tflite::op::TensorConvert::CpuToCommon::Node &node) = 0;
+ virtual Stage
+ generate(const ::internal::tflite::op::TensorConvert::AclFromCommon::Node &node) = 0;
+ virtual Stage generate(const ::internal::tflite::op::TensorConvert::AclToCommon::Node &node) = 0;
};
} // namespace internal
#include "internal/op/Reshape.h"
#include "internal/op/FullyConnected.h"
#include "internal/op/Softmax.h"
+#include "internal/op/TensorConvert_Cpu.h"
+#include "internal/op/TensorConvert_Acl.h"
namespace internal
{
virtual void visit(const Reshape::Node &) = 0;
virtual void visit(const FullyConnected::Node &) = 0;
virtual void visit(const Softmax::Node &) = 0;
+ virtual void visit(const TensorConvert::CpuFromCommon::Node &) = 0;
+ virtual void visit(const TensorConvert::CpuToCommon::Node &) = 0;
+ virtual void visit(const TensorConvert::AclFromCommon::Node &) = 0;
+ virtual void visit(const TensorConvert::AclToCommon::Node &) = 0;
};
} // namespace op
--- /dev/null
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "internal/op/TensorConvert_Acl.h"
+#include "internal/op/NodeVisitor.h"
+
+#include <cassert>
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace AclFromCommon
+{
+
+void Node::accept(NodeVisitor &&v) const { v.visit(*this); }
+
+} // namespace AclFromCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace AclFromCommon
+{
+
+Param::Param(uint32_t inputIndex) { ifm_index = inputIndex; }
+
+} // namespace AclFromCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace AclToCommon
+{
+
+void Node::accept(NodeVisitor &&v) const { v.visit(*this); }
+
+} // namespace AclToCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace AclToCommon
+{
+
+Param::Param(uint32_t outputIndex) { ofm_index = outputIndex; }
+
+} // namespace AclToCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
--- /dev/null
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __INTERNAL_OP_TENSOR_CONVERT_ACL_H__
+#define __INTERNAL_OP_TENSOR_CONVERT_ACL_H__
+
+#include "internal/op/Node.h"
+
+#include <cstdint>
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace AclFromCommon
+{
+
+struct Param
+{
+ int32_t ifm_index;
+
+ Param() = default;
+ Param(uint32_t inputIndex);
+};
+
+class Node final : public op::Node
+{
+public:
+ Node(const Param ¶m) : _param(param)
+ {
+ // DO NOTHING
+ }
+
+public:
+ virtual ~Node() = default;
+
+public:
+ const Param ¶m(void) const { return _param; }
+
+public:
+ void accept(NodeVisitor &&) const override;
+
+private:
+ const Param _param;
+};
+
+} // namespace AclFromCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace AclToCommon
+{
+
+struct Param
+{
+ int32_t ofm_index;
+
+ Param() = default;
+ Param(uint32_t outputIndex);
+};
+
+class Node final : public op::Node
+{
+public:
+ Node(const Param ¶m) : _param(param)
+ {
+ // DO NOTHING
+ }
+
+public:
+ virtual ~Node() = default;
+
+public:
+ const Param ¶m(void) const { return _param; }
+
+public:
+ void accept(NodeVisitor &&) const override;
+
+private:
+ const Param _param;
+};
+
+} // namespace AclToCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+#endif // __INTERNAL_OP_TENSOR_CONVERT_ACL_H__
--- /dev/null
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "internal/op/TensorConvert_Cpu.h"
+#include "internal/op/NodeVisitor.h"
+
+#include <cassert>
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace CpuFromCommon
+{
+
+void Node::accept(NodeVisitor &&v) const { v.visit(*this); }
+
+} // namespace CpuFromCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace CpuFromCommon
+{
+
+Param::Param(uint32_t inputIndex) { ifm_index = inputIndex; }
+
+} // namespace FromCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace CpuToCommon
+{
+
+void Node::accept(NodeVisitor &&v) const { v.visit(*this); }
+
+} // namespace CpuToCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace CpuToCommon
+{
+
+Param::Param(uint32_t outputIndex) { ofm_index = outputIndex; }
+
+} // namespace CpuToCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
--- /dev/null
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __INTERNAL_OP_TENSOR_CONVERT_CPU_H__
+#define __INTERNAL_OP_TENSOR_CONVERT_CPU_H__
+
+#include "internal/op/Node.h"
+
+#include <cstdint>
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace CpuFromCommon
+{
+
+struct Param
+{
+ int32_t ifm_index;
+
+ Param() = default;
+ Param(uint32_t inputIndex);
+};
+
+class Node final : public op::Node
+{
+public:
+ Node(const Param ¶m) : _param(param)
+ {
+ // DO NOTHING
+ }
+
+public:
+ virtual ~Node() = default;
+
+public:
+ const Param ¶m(void) const { return _param; }
+
+public:
+ void accept(NodeVisitor &&) const override;
+
+private:
+ const Param _param;
+};
+
+} // namespace CpuFromCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+namespace internal
+{
+namespace tflite
+{
+namespace op
+{
+namespace TensorConvert
+{
+namespace CpuToCommon
+{
+
+struct Param
+{
+ int32_t ofm_index;
+
+ Param() = default;
+ Param(uint32_t outputIndex);
+};
+
+class Node final : public op::Node
+{
+public:
+ Node(const Param ¶m) : _param(param)
+ {
+ // DO NOTHING
+ }
+
+public:
+ virtual ~Node() = default;
+
+public:
+ const Param ¶m(void) const { return _param; }
+
+public:
+ void accept(NodeVisitor &&) const override;
+
+private:
+ const Param _param;
+};
+
+} // namespace CpuToCommon
+} // namespace TensorConvert
+} // namespace op
+} // namespace tflite
+} // namespace internal
+
+#endif // __INTERNAL_OP_TENSOR_CONVERT_CPU_H__