summaryrefslogtreecommitdiff
path: root/runtimes/neurun/src/dumper/dot/DotDumper.cc
diff options
context:
space:
mode:
authorChunseok Lee <chunseok.lee@samsung.com>2019-01-08 17:36:34 +0900
committerChunseok Lee <chunseok.lee@samsung.com>2019-01-08 17:36:34 +0900
commitbd11b24234d7d43dfe05a81c520aa01ffad06e42 (patch)
tree57d0d4044977e4fa0e50cd9ba40b32006dff19eb /runtimes/neurun/src/dumper/dot/DotDumper.cc
parent91f4ba45449f700a047a4aeea00b1a7c84e94c75 (diff)
downloadnnfw-bd11b24234d7d43dfe05a81c520aa01ffad06e42.tar.gz
nnfw-bd11b24234d7d43dfe05a81c520aa01ffad06e42.tar.bz2
nnfw-bd11b24234d7d43dfe05a81c520aa01ffad06e42.zip
Imported Upstream version 0.3upstream/0.3
Diffstat (limited to 'runtimes/neurun/src/dumper/dot/DotDumper.cc')
-rw-r--r--runtimes/neurun/src/dumper/dot/DotDumper.cc115
1 files changed, 115 insertions, 0 deletions
diff --git a/runtimes/neurun/src/dumper/dot/DotDumper.cc b/runtimes/neurun/src/dumper/dot/DotDumper.cc
new file mode 100644
index 000000000..1e53ece19
--- /dev/null
+++ b/runtimes/neurun/src/dumper/dot/DotDumper.cc
@@ -0,0 +1,115 @@
+/*
+ * 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 <fstream>
+
+#include "DotDumper.h"
+#include "DotBuilder.h"
+
+namespace neurun
+{
+namespace dumper
+{
+namespace dot
+{
+
+using namespace neurun::graph;
+
+void DotDumper::dumpIfNeeded(const std::string &tag)
+{
+ if (_option == OPTIONS::DUMP_OFF)
+ {
+ return;
+ }
+ neurun::dumper::dot::DotBuilder dot_builder;
+
+ auto &operations = _graph.operations();
+ auto &operands = _graph.operands();
+
+ operations.iterate([&](const model::operation::Index &index, const model::operation::Node &node) {
+ neurun::dumper::dot::DotNodeInfo node_info(_graph, index, node);
+
+ for (auto output : node.getOutputs())
+ {
+ using neurun::dumper::dot::DotOperandInfo;
+ auto child = std::make_shared<DotOperandInfo>(output, operands.at(output),
+ DotOperandInfo::Type::MODEL_OUTPUT);
+ node_info.appendChild(child);
+ }
+
+ dot_builder.update(node_info);
+ });
+
+ operands.iterate([&](const model::operand::Index &index, const model::operand::Object &object) {
+ bool showing_cond = false;
+ auto usage = object.getUsage();
+ if (_option == OPTIONS::SHOW_CONSTANTS)
+ {
+ showing_cond = object.usageIsDefined();
+ }
+ else
+ {
+ showing_cond = (usage == model::operand::OperandUsage::MODEL_INPUT) ||
+ (usage == model::operand::OperandUsage::OPERATION_OUTPUT);
+ }
+ if (usage != model::operand::OperandUsage::OPERATION_OUTPUT)
+ {
+ showing_cond = showing_cond && (object.getUses().size() > 0);
+ }
+ if (showing_cond)
+ {
+ auto type = [&]() {
+ using neurun::dumper::dot::DotOperandInfo;
+ if (_graph.getInputs().contains(index))
+ return DotOperandInfo::Type::MODEL_INPUT;
+ if (_graph.getOutputs().contains(index))
+ return DotOperandInfo::Type::MODEL_OUTPUT;
+ return DotOperandInfo::Type::INTERNAL;
+ }();
+
+ neurun::dumper::dot::DotOperandInfo operand_info(index, object, type);
+
+ for (auto operation_index : object.getUses().list())
+ {
+ auto &node = operations.at(operation_index);
+ auto child =
+ std::make_shared<neurun::dumper::dot::DotNodeInfo>(_graph, operation_index, node);
+ operand_info.appendChild(child);
+ }
+
+ dot_builder.update(operand_info);
+ }
+ });
+
+ // Dump to file
+ {
+ std::string file_name;
+ file_name += tag;
+ file_name += ".dot";
+ std::filebuf fb;
+
+ fb.open(file_name, std::ios::out);
+ std::ostream os(&fb);
+
+ dot_builder.writeDot(os);
+
+ fb.close();
+ }
+}
+
+} // namespace dot
+} // namespace dumper
+} // namespace neurun