MCPcopy Create free account
hub / github.com/MegEngine/MegCC / parseInputShapes

Function parseInputShapes

compiler/tools/mgb-runner/main.cpp:65–120  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63}
64
65bool parseInputShapes(
66 std::string s,
67 std::vector<std::map<std::string, megdnn::TensorShape>>& map_vec) {
68 if (s.empty())
69 return false;
70 llvm::SmallVector<llvm::StringRef> shapes_group;
71 llvm::SplitString(s, shapes_group, ":");
72 for (auto&& shape_str : shapes_group) {
73 llvm::SmallVector<llvm::StringRef> shapes;
74 llvm::SplitString(shape_str, shapes, ";");
75 std::map<std::string, megdnn::TensorShape> map;
76 for (auto&& shape : shapes) {
77 llvm::StringRef nameString, shapeString;
78 std::tie(nameString, shapeString) = shape.split("=");
79 if (!shapeString.startswith("(") || !shapeString.endswith(")")) {
80 llvm::errs() << "invalid shape expression " << shape
81 << " the format of shape expression should be "
82 "tensor_name=(dim0, dim1, dim2)";
83 return false;
84 }
85 llvm::SmallVector<llvm::StringRef> dims;
86 llvm::SplitString(shapeString.drop_front(1).drop_back(1), dims, ", ");
87 if (dims.empty() || dims.size() > megdnn::TensorShape::MAX_NDIM) {
88 llvm::errs() << "invalid dnn tensor shape " << shapeString << "\n";
89 return false;
90 }
91 megdnn::TensorShape tshape;
92 tshape.ndim = dims.size();
93 for (size_t i = 0; i < tshape.ndim; ++i) {
94 if (dims[i].getAsInteger(0, tshape[i])) {
95 llvm::errs() << "invalid dimension " << dims[i] << "\n";
96 return false;
97 }
98 }
99 if (!map.emplace(nameString.str(), tshape).second) {
100 llvm::errs() << "duplicated tensor name " << nameString << "\n";
101 return false;
102 }
103 }
104 if (map.size() > 0) {
105 llvm::outs() << "Model input tensor shape:\n";
106 for (auto& it : map) {
107 llvm::outs() << " input name= " << it.first << ". ";
108 llvm::outs() << "shape= [";
109 for (size_t dim = 0; dim < it.second.ndim; dim++) {
110 if (dim != 0)
111 llvm::outs() << ",";
112 llvm::outs() << it.second.shape[dim];
113 }
114 llvm::outs() << "]\n";
115 }
116 }
117 map_vec.push_back(map);
118 }
119 return true;
120}
121
122bool parseInputData(

Callers 3

runFunction · 0.70
mainFunction · 0.50
mainFunction · 0.50

Calls

no outgoing calls

Tested by

no test coverage detected