Fix dynamic getnext

pull/842/head
zhangxiaokun 4 years ago
parent f50d4662b1
commit 0c14832647

@ -2456,19 +2456,10 @@ Status DavinciModel::InitOutputTensorInfo(const OpDescPtr &op_desc) {
GE_IF_BOOL_EXEC(ret != GRAPH_SUCCESS,
GELOGE(ret, "Get size from TensorDesc failed, op:%s, input id:%zu", op_desc->GetName().c_str(), i);
return ret);
std::vector<int64_t> output_shape = input_desc->GetShape().GetDims();
if (is_online_infer_dynamic_) {
if (merge_nodes_gear_and_real_out_size_info_.find(i) != merge_nodes_gear_and_real_out_size_info_.end()) {
auto gear_and_real_out_size_info = merge_nodes_gear_and_real_out_size_info_[i];
size = gear_and_real_out_size_info[cur_dynamic_dims_];
auto gear_and_real_out_shape_info = merge_nodes_gear_and_real_out_shape_info_[i];
output_shape = gear_and_real_out_shape_info[cur_dynamic_dims_];
is_dynamic_ = true;
}
}
GELOGI("Output size is %ld, output shape is %s.", size, formats::JoinToString(output_shape).c_str());
output_buffer_size_.push_back(size);
output_shape_info_.push_back(output_shape);
const GeShape &shape = input_desc->GetShape();
GELOGI("Output size is %ld, output shape is %s.", size, formats::JoinToString(shape.GetDims()).c_str());
output_buffer_size_.emplace_back(size);
output_shape_info_.emplace_back(shape);
}
return SUCCESS;
@ -2481,18 +2472,38 @@ Status DavinciModel::GenOutputTensorInfo(OutputData *output_data, vector<OutputT
return SUCCESS;
}
vector<int64_t> output_buffer_size;
vector<vector<int64_t>> output_shape_info;
size_t output_num = output_buffer_size_.size();
for (size_t i = 0; i < output_num; ++i) {
int64_t output_size = output_buffer_size_[i];
vector<int64_t> output_shape = output_shape_info_[i].GetDims();
if (is_online_infer_dynamic_) {
if (merge_nodes_gear_and_real_out_size_info_.find(i) != merge_nodes_gear_and_real_out_size_info_.end()) {
auto gear_and_real_out_size_info = merge_nodes_gear_and_real_out_size_info_[i];
output_size = gear_and_real_out_size_info[cur_dynamic_dims_];
auto gear_and_real_out_shape_info = merge_nodes_gear_and_real_out_shape_info_[i];
output_shape = gear_and_real_out_shape_info[cur_dynamic_dims_];
is_dynamic_ = true;
}
}
GELOGI("Output size is %ld, output shape is %s.", output_size, formats::JoinToString(output_shape).c_str());
output_buffer_size.push_back(output_size);
output_shape_info.push_back(output_shape);
}
GELOGI("Output blobs size:%zu, model id:%u", output_buffer_size_.size(), model_id_);
for (size_t i = 0; i < output_buffer_size_.size(); ++i) {
std::unique_ptr<uint8_t[]> data_buf(new (std::nothrow) uint8_t[output_buffer_size_[i]]);
for (size_t i = 0; i < output_buffer_size.size(); ++i) {
std::unique_ptr<uint8_t[]> data_buf(new (std::nothrow) uint8_t[output_buffer_size[i]]);
if (data_buf == nullptr) {
GELOGE(GE_GRAPH_MALLOC_FAILED, "Malloc buffer failed.");
return GE_GRAPH_MALLOC_FAILED;
}
output_data->blobs.push_back({data_buf.get(), static_cast<uint64_t>(output_buffer_size_[i]), false});
ge::OutputTensorInfo output;
output.dims = output_shape_info_[i];
output_data->blobs.push_back({data_buf.get(), static_cast<uint64_t>(output_buffer_size[i]), false});
OutputTensorInfo output;
output.dims = output_shape_info[i];
output.data = std::move(data_buf);
output.length = output_buffer_size_[i];
output.length = output_buffer_size[i];
outputs.emplace_back(std::move(output));
GELOGD("Output index:%zu, output dims is %s, data length:%lu.", i,
formats::JoinToString(output.dims).c_str(), output.length);

@ -1038,7 +1038,7 @@ class DavinciModel {
vector<vector<void *>> output_addrs_list_;
vector<int64_t> output_buffer_size_;
vector<vector<int64_t>> output_shape_info_;
vector<GeShape> output_shape_info_;
vector<InputOutputDescInfo> output_descs_;
vector<uint32_t> output_formats_;

Loading…
Cancel
Save