diff options
author | Chunseok Lee <chunseok.lee@samsung.com> | 2019-01-08 17:36:34 +0900 |
---|---|---|
committer | Chunseok Lee <chunseok.lee@samsung.com> | 2019-01-08 17:36:34 +0900 |
commit | bd11b24234d7d43dfe05a81c520aa01ffad06e42 (patch) | |
tree | 57d0d4044977e4fa0e50cd9ba40b32006dff19eb /runtimes/neurun/src/dumper/dot/DotDumper.cc | |
parent | 91f4ba45449f700a047a4aeea00b1a7c84e94c75 (diff) | |
download | nnfw-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.cc | 115 |
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 |