|
|
@@ -48,6 +48,8 @@ constexpr char const *kKeyShapeRange = "shape_range"; |
|
|
|
constexpr char const *kKeyValue = "value"; |
|
|
|
constexpr char const *kKeyFormat = "format"; |
|
|
|
constexpr char const *kFileSuffix = ".om"; |
|
|
|
constexpr char const *kKeyDynamicInput = "dynamic_input"; |
|
|
|
constexpr char const *kKeyDynamicOutput = "dynamic_output"; |
|
|
|
constexpr int kDumpJsonIndent = 2; |
|
|
|
constexpr int kShapeRangePairSize = 2; |
|
|
|
constexpr int kShapeRangeLow = 0; |
|
|
@@ -124,6 +126,10 @@ void from_json(const Json &j, SingleOpTensorDesc &desc) { |
|
|
|
if (tensor_name != j.end()) { |
|
|
|
desc.name = tensor_name->get<string>(); |
|
|
|
} |
|
|
|
auto dynamic_input_name = j.find(kKeyDynamicInput); |
|
|
|
if (dynamic_input_name != j.end()) { |
|
|
|
desc.dynamic_input_name = dynamic_input_name->get<string>(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void from_json(const Json &j, SingleOpAttr &attr) { |
|
|
@@ -276,6 +282,23 @@ std::unique_ptr<OpDesc> SingleOpParser::CreateOpDesc(const string &op_type) { |
|
|
|
return std::unique_ptr<OpDesc>(new(std::nothrow) OpDesc(op_type, op_type)); |
|
|
|
} |
|
|
|
|
|
|
|
Status SingleOpParser::UpdateDynamicTensorName(std::vector<SingleOpTensorDesc> &desc) { |
|
|
|
std::map<std::string, int> dynamic_name_map; |
|
|
|
for (auto &tensor : desc) { |
|
|
|
if (tensor.dynamic_input_name.empty()) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
if (dynamic_name_map.find(tensor.dynamic_input_name) == dynamic_name_map.end()) { |
|
|
|
dynamic_name_map[tensor.dynamic_input_name] = 0; |
|
|
|
} else { |
|
|
|
dynamic_name_map[tensor.dynamic_input_name]++; |
|
|
|
} |
|
|
|
tensor.name = tensor.dynamic_input_name + std::to_string(dynamic_name_map[tensor.dynamic_input_name]); |
|
|
|
} |
|
|
|
GELOGD("Update dynamic tensor name success!"); |
|
|
|
return SUCCESS; |
|
|
|
} |
|
|
|
|
|
|
|
Status SingleOpParser::ConvertToBuildParam(int index, |
|
|
|
const SingleOpDesc &single_op_desc, |
|
|
|
SingleOpBuildParam &build_param) { |
|
|
@@ -471,6 +494,11 @@ Status SingleOpParser::ParseSingleOpList(const std::string &file, std::vector<Si |
|
|
|
SingleOpDesc single_op_desc; |
|
|
|
GELOGI("Parsing op[%d], jsonStr = %s", index, single_op_json.dump(kDumpJsonIndent).c_str()); |
|
|
|
single_op_desc = single_op_json; |
|
|
|
if (UpdateDynamicTensorName(single_op_desc.input_desc) != SUCCESS) { |
|
|
|
GELOGE(FAILED, "Update dynamic tensor name failed!"); |
|
|
|
return FAILED; |
|
|
|
} |
|
|
|
|
|
|
|
if (!Validate(single_op_desc)) { |
|
|
|
GELOGE(PARAM_INVALID, "Validate the index[%d] of op failed when read json file[%s].", index, file.c_str()); |
|
|
|
return PARAM_INVALID; |
|
|
|