| @@ -2185,8 +2185,9 @@ Status DavinciModel::CopyInputData(const InputData &input_data, bool device_data | |||
| const std::vector<DataBuffer> &blobs = input_data.blobs; | |||
| for (const auto &data : new_input_data_info_) { | |||
| if (data.first >= blobs.size()) { | |||
| GELOGE(FAILED, "Blobs not match: blobs=%zu, tensor=%zu, index=%u, size=%ld", blobs.size(), | |||
| new_input_data_info_.size(), data.first, data.second.GetDataInfo().at(0).first); | |||
| GELOGE(FAILED, "Blobs not match: blobs=%zu, tensor=%zu, index=%u, size=%ld, op_name(%s)", blobs.size(), | |||
| new_input_data_info_.size(), data.first, data.second.GetDataInfo().at(0).first, | |||
| data.second.GetOpName().c_str()); | |||
| return FAILED; | |||
| } | |||
| @@ -2197,13 +2198,14 @@ Status DavinciModel::CopyInputData(const InputData &input_data, bool device_data | |||
| } | |||
| uint64_t data_size = data.second.GetDataSize(); | |||
| GE_CHK_BOOL_RET_STATUS(data_size >= data_buf.length, PARAM_INVALID, | |||
| "input data size(%lu) does not match model required size(%lu), ret failed.", data_buf.length, | |||
| data_size); | |||
| "input data size(%lu) does not match model required size(%lu), op_name(%s) ret failed.", | |||
| data_buf.length, data_size, data.second.GetOpName().c_str()); | |||
| void *mem_addr = data.second.GetBasicAddr(); | |||
| void *data_buf_addr = reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(data_buf.data)); | |||
| uint64_t data_buf_length = data_buf.length; | |||
| GELOGI("CopyPlainData memcpy graph_%u type[F] input[%u] dst[%p] src[%p] mem_size[%lu] datasize[%lu]", | |||
| runtime_param_.graph_id, data.first, mem_addr, data_buf_addr, data_size, data_buf_length); | |||
| GELOGI("CopyPlainData memcpy graph_%u type[F] input[%s] rank[%u] dst[%p] src[%p] mem_size[%lu] datasize[%lu]", | |||
| runtime_param_.graph_id, data.second.GetOpName().c_str(), data.first, mem_addr, data_buf_addr, data_size, | |||
| data_buf_length); | |||
| GE_CHK_RT_RET(rtMemcpy(mem_addr, data_size, data_buf_addr, data_buf_length, kind)); | |||
| } | |||
| @@ -3444,7 +3446,7 @@ Status DavinciModel::UpdateIoTaskArgs(const std::map<uint32_t, ZeroCopyOffset> & | |||
| } | |||
| if (!CheckInputAndModelSize(buffer.length, data.second.GetDataSize(), is_dynamic)) { | |||
| GELOGE(FAILED, "Check input size and model size failed"); | |||
| GELOGE(FAILED, "Check input size and model size failed, op[%s]", data.second.GetOpName().c_str()); | |||
| return FAILED; | |||
| } | |||
| @@ -35,6 +35,7 @@ Status ZeroCopyOffset::InitInputDataInfo(int64_t output_size, void *virtual_addr | |||
| GELOGI("[ZCPY] Start to InitInputDataInfo of %s, total_data_size is %ld, virtual_addr is %p", | |||
| op_desc->GetName().c_str(), output_size, virtual_addr); | |||
| basic_addr_ = virtual_addr; | |||
| op_name_ = op_desc->GetName(); | |||
| (void)ge::AttrUtils::GetListInt(op_desc, ATTR_ZERO_COPY_BASIC_OFFSET, zero_copy_basic_offset_); | |||
| (void)ge::AttrUtils::GetListInt(op_desc, ATTR_ZERO_COPY_RELATIVE_OFFSET, zero_copy_relative_offset_); | |||
| GE_CHK_BOOL_EXEC(zero_copy_basic_offset_.size() == zero_copy_relative_offset_.size(), return PARAM_INVALID, | |||
| @@ -82,6 +83,7 @@ Status ZeroCopyOffset::InitOutputDataInfo(const vector<int64_t> &input_size_list | |||
| GELOGD("Tensor data size: GetSize=%ld, GetTensorSizeInBytes=%ld", input_size_list[idx], size); | |||
| basic_addr_ = virtual_addr_list[idx]; | |||
| op_name_ = op_desc->GetName(); | |||
| (void)ge::AttrUtils::GetListInt(op_desc, ATTR_ZERO_COPY_BASIC_OFFSET, zero_copy_basic_offset_); | |||
| (void)ge::AttrUtils::GetListInt(op_desc, ATTR_ZERO_COPY_RELATIVE_OFFSET, zero_copy_relative_offset_); | |||
| GE_CHK_BOOL_EXEC(zero_copy_basic_offset_.size() == zero_copy_relative_offset_.size(), return PARAM_INVALID, | |||
| @@ -66,9 +66,12 @@ class ZeroCopyOffset { | |||
| int64_t GetDataSize() const { return data_size_; } | |||
| // value of *outside_addrs_ from davinci_model | |||
| std::vector<std::map<const void *, std::vector<void *>>> &GetOutsideAddrs() { return outside_addrs_; } | |||
| // name of op | |||
| std::string GetOpName() const { return op_name_; } | |||
| private: | |||
| void *basic_addr_ = nullptr; | |||
| std::string op_name_; | |||
| uint32_t data_count_ = 0; | |||
| std::vector<std::pair<int64_t, void *>> data_info_; | |||
| vector<int64_t> relative_offset_; | |||
| @@ -80,4 +83,4 @@ class ZeroCopyOffset { | |||
| std::vector<int64_t> zero_copy_relative_offset_; | |||
| }; | |||
| } // namespace ge | |||
| #endif // GE_GRAPH_LOAD_NEW_MODEL_MANAGER_ZERO_COPY_OFFSET_H_ | |||
| #endif // GE_GRAPH_LOAD_NEW_MODEL_MANAGER_ZERO_COPY_OFFSET_H_ | |||
| @@ -614,32 +614,32 @@ Status ge::GraphPartitioner::AddPartitionsToGraphNode(vector<ge::SubGraphInfoPtr | |||
| } | |||
| // flush parent node of subgraph | |||
| sub_graph->SetParentNode(compute_graph->GetParentNode()); | |||
| (void) AttrUtils::SetStr(*sub_graph, ATTR_NAME_PARENT_GRAPH_NAME, compute_graph->GetName()); | |||
| auto sgi = MakeShared<SubGraphInfo>(); | |||
| if (sgi == nullptr) { | |||
| GELOGE(GE_GRAPH_PARAM_NULLPTR, "[GraphPartitioner]: MakeShared sub graph info failed."); | |||
| return FAILED; | |||
| } | |||
| // set engine name | |||
| sgi->SetEngineName(engine_name); | |||
| // set stream label | |||
| string sub_graph_stream; | |||
| if (AttrUtils::GetStr(sub_graph->GetDirectNode().at(0)->GetOpDesc(), ATTR_NAME_STREAM_LABEL, sub_graph_stream)) { | |||
| sgi->SetStreamLabel(sub_graph_stream); | |||
| } | |||
| /// for now inputFlag is the same before and after partition. It should | |||
| /// be changed according to the real partition | |||
| std::vector<bool> sub_graph_input(graph_info_.input_size_, true); | |||
| std::vector<bool> sub_graph_output(graph_info_.output_size_, true); | |||
| sgi->SetSubGraph(sub_graph); | |||
| sgi->SetOutputFlag(sub_graph_output); | |||
| sgi->SetInputFlag(sub_graph_input); | |||
| sgi->SetOutputContext(graph_info_.output_name_); | |||
| AddEndPldInformationToSubGraphInfo(sgi); | |||
| GELOGI("[GraphPartitioner]: subGraph engine name is %s, graph name is %s, stream label is %s", | |||
| engine_name.c_str(), | |||
| sub_graph->GetName().c_str(), | |||
| sgi->GetStreamLabel().empty() ? "null" : sgi->GetStreamLabel().c_str()); | |||
| (void)AttrUtils::SetStr(*sub_graph, ATTR_NAME_PARENT_GRAPH_NAME, compute_graph->GetName()); | |||
| GELOGD("set attr success. subgraph(%s) with parent graph(%s)", sub_graph->GetName().c_str(), | |||
| compute_graph->GetName().c_str()); | |||
| auto sgi = MakeShared<SubGraphInfo>(); | |||
| if (sgi == nullptr) { | |||
| GELOGE(GE_GRAPH_PARAM_NULLPTR, "[GraphPartitioner]: MakeShared sub graph info failed."); | |||
| return FAILED; | |||
| } | |||
| // set engine name | |||
| sgi->SetEngineName(engine_name); | |||
| // set stream label | |||
| string sub_graph_stream; | |||
| if (AttrUtils::GetStr(sub_graph->GetDirectNode().at(0)->GetOpDesc(), ATTR_NAME_STREAM_LABEL, sub_graph_stream)) { | |||
| sgi->SetStreamLabel(sub_graph_stream); | |||
| } | |||
| /// for now inputFlag is the same before and after partition. It should | |||
| /// be changed according to the real partition | |||
| std::vector<bool> sub_graph_input(graph_info_.input_size_, true); | |||
| std::vector<bool> sub_graph_output(graph_info_.output_size_, true); | |||
| sgi->SetSubGraph(sub_graph); | |||
| sgi->SetOutputFlag(sub_graph_output); | |||
| sgi->SetInputFlag(sub_graph_input); | |||
| sgi->SetOutputContext(graph_info_.output_name_); | |||
| AddEndPldInformationToSubGraphInfo(sgi); | |||
| GELOGI("[GraphPartitioner]: subGraph engine name is %s, graph name is %s, stream label is %s", engine_name.c_str(), | |||
| sub_graph->GetName().c_str(), sgi->GetStreamLabel().empty() ? "null" : sgi->GetStreamLabel().c_str()); | |||
| if (engine_name != input_subgraph_name) { // do not add Data subGraph into SubGraphInfo | |||
| output_subgraphs.push_back(sgi); | |||
| } else { | |||