MCPcopy Create free account
hub / github.com/alibaba/MNN / registerSubGraph

Method registerSubGraph

express/Executor.cpp:629–679  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

627}
628
629bool Executor::registerSubGraph(const std::string& submoduleName, VARPS outputs, VARPS inputs) {
630#ifndef MNN_REDUCE_SIZE
631 if (mSubGraph.find(submoduleName) != mSubGraph.end()) {
632 MNN_PRINT("Executor Error: Subgraph has exists: %s\n", submoduleName.c_str());
633 return false;
634 }
635 std::shared_ptr<SubGraph> graph(new SubGraph);
636 std::vector<std::string> subInputs(inputs.size());
637 std::vector<std::string> subOutputs(outputs.size());
638 for (int i=0; i<inputs.size(); ++i) {
639 if (inputs[i]->name().empty()) {
640 MNN_PRINT("Executor Error: input %d name empty\n", i);
641 return false;
642 }
643 subInputs[i] = inputs[i]->name();
644 }
645 for (int i=0; i<outputs.size(); ++i) {
646 if (outputs[i]->name().empty()) {
647 MNN_PRINT("Executor Error: output %d name empty\n", i);
648 return false;
649 }
650 subOutputs[i] = outputs[i]->name();
651 }
652 std::unique_ptr<MNN::SubGraphProtoT> subInfo(new MNN::SubGraphProtoT);
653 subInfo->name = submoduleName;
654 std::unique_ptr<MNN::NetT> subNet(new MNN::NetT);
655 std::vector<MNN::Express::VARP> combine = inputs;
656 combine.insert(combine.end(), outputs.begin(), outputs.end());
657 Variable::save(combine, subNet.get());
658 std::map<std::string, int> subTensorMap;
659 for (int i=0; i<subNet->tensorName.size(); ++i) {
660 subTensorMap.insert(std::make_pair(subNet->tensorName[i], i));
661 }
662 subInfo->tensors = std::move(subNet->tensorName);
663 subInfo->inputs.resize(inputs.size());
664 for (int i=0; i<inputs.size(); ++i) {
665 subInfo->inputs[i] = subTensorMap[subInputs[i]];
666 }
667 subInfo->outputs.resize(outputs.size());
668 for (int i=0; i<outputs.size(); ++i) {
669 subInfo->outputs[i] = subTensorMap[subOutputs[i]];
670 }
671 subInfo->nodes = std::move(subNet->oplists);
672 for (int i=0; i<subNet->subgraphs.size(); ++i) {
673 graph->depends.emplace_back(subNet->subgraphs[i]->name);
674 }
675 graph->info = std::move(subInfo);
676 mSubGraph.insert(std::make_pair(submoduleName, graph));
677#endif
678 return true;
679}
680
681std::shared_ptr<Executor::SubGraph> Executor::findSubGraph(const std::string& submoduleName) {
682#ifndef MNN_REDUCE_SIZE

Callers 3

_turnGRU2WhileMethod · 0.80
_LSTMToWhileMethod · 0.80
runMethod · 0.80

Calls 11

saveFunction · 0.50
findMethod · 0.45
endMethod · 0.45
c_strMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
nameMethod · 0.45
insertMethod · 0.45
beginMethod · 0.45
getMethod · 0.45
resizeMethod · 0.45

Tested by 1

runMethod · 0.64