From: @youui Reviewed-by: @xchu42,@liujunzhu Signed-off-by: @liujunzhutags/v1.3.0
| @@ -2874,23 +2874,16 @@ Status DavinciModel::UpdateKnownNodeArgs(const vector<void *> &inputs, const vec | |||||
| GELOGI("DavinciModel::UpdateKnownNodeArgs in"); | GELOGI("DavinciModel::UpdateKnownNodeArgs in"); | ||||
| GE_CHK_STATUS_RET(CreateKnownZeroCopyMap(inputs, outputs), | GE_CHK_STATUS_RET(CreateKnownZeroCopyMap(inputs, outputs), | ||||
| "DavinciModel::UpdateKnownNodeArgs create map for input/output zero copy."); | "DavinciModel::UpdateKnownNodeArgs create map for input/output zero copy."); | ||||
| if (!base_addr_not_changed_) { | |||||
| total_io_addrs_.clear(); | |||||
| orig_total_io_addrs_.clear(); | |||||
| for (size_t task_index = 0; task_index < task_list_.size(); ++task_index) { | |||||
| auto &task = task_list_[task_index]; | |||||
| if (task != nullptr) { | |||||
| Status ret = task->UpdateArgs(); | |||||
| if (ret != SUCCESS) { | |||||
| GELOGE(FAILED, "task %zu created by davinci model is nullptr.", task_index); | |||||
| return FAILED; | |||||
| } | |||||
| total_io_addrs_.clear(); | |||||
| for (size_t task_index = 0; task_index < task_list_.size(); ++task_index) { | |||||
| auto &task = task_list_[task_index]; | |||||
| if (task != nullptr) { | |||||
| Status ret = task->UpdateArgs(); | |||||
| if (ret != SUCCESS) { | |||||
| GELOGE(FAILED, "task %zu created by davinci model is nullptr.", task_index); | |||||
| return FAILED; | |||||
| } | } | ||||
| } | } | ||||
| // cache latest iterator io addr | |||||
| orig_total_io_addrs_ = total_io_addrs_; | |||||
| } else { | |||||
| total_io_addrs_ = orig_total_io_addrs_; | |||||
| } | } | ||||
| GE_CHK_STATUS_RET(UpdateKnownZeroCopyAddr(total_io_addrs_, false), "DavinciModel::UpdateKnownZeroCopyAddr failed."); | GE_CHK_STATUS_RET(UpdateKnownZeroCopyAddr(total_io_addrs_, false), "DavinciModel::UpdateKnownZeroCopyAddr failed."); | ||||
| @@ -534,7 +534,6 @@ class DavinciModel { | |||||
| Status UpdateKnownNodeArgs(const vector<void *> &inputs, const vector<void *> &outputs); | Status UpdateKnownNodeArgs(const vector<void *> &inputs, const vector<void *> &outputs); | ||||
| Status CreateKnownZeroCopyMap(const vector<void *> &inputs, const vector<void *> &outputs); | Status CreateKnownZeroCopyMap(const vector<void *> &inputs, const vector<void *> &outputs); | ||||
| Status UpdateKnownZeroCopyAddr(vector<void *> &total_io_addrs, bool update_args = true); | Status UpdateKnownZeroCopyAddr(vector<void *> &total_io_addrs, bool update_args = true); | ||||
| void SetKnownNodeAddrNotChanged(bool base_addr_not_changed) { base_addr_not_changed_ = base_addr_not_changed; } | |||||
| Status GetOrigInputInfo(uint32_t index, OriginInputInfo &orig_input_info) const; | Status GetOrigInputInfo(uint32_t index, OriginInputInfo &orig_input_info) const; | ||||
| Status GetAllAippInputOutputDims(uint32_t index, vector<InputOutputDims> &input_dims, | Status GetAllAippInputOutputDims(uint32_t index, vector<InputOutputDims> &input_dims, | ||||
| @@ -1007,8 +1006,6 @@ class DavinciModel { | |||||
| map<const void *, void *> known_input_data_info_; | map<const void *, void *> known_input_data_info_; | ||||
| map<const void *, void *> known_output_data_info_; | map<const void *, void *> known_output_data_info_; | ||||
| vector<void *> total_io_addrs_; | vector<void *> total_io_addrs_; | ||||
| vector<void *> orig_total_io_addrs_; | |||||
| bool base_addr_not_changed_ = false; | |||||
| vector<vector<int64_t>> batch_info_; | vector<vector<int64_t>> batch_info_; | ||||
| vector<vector<int64_t>> combined_batch_info_; | vector<vector<int64_t>> combined_batch_info_; | ||||
| @@ -492,11 +492,13 @@ void KernelTaskInfo::SetIoAddrs(const OpDescPtr &op_desc) { | |||||
| Status KernelTaskInfo::CopyNoncontinuousArgs(uint16_t offset) { | Status KernelTaskInfo::CopyNoncontinuousArgs(uint16_t offset) { | ||||
| GE_CHECK_NOTNULL(davinci_model_); | GE_CHECK_NOTNULL(davinci_model_); | ||||
| davinci_model_->UpdateKnownZeroCopyAddr(io_addrs_); | |||||
| auto addr_size = kAddrLen * io_addrs_.size(); | |||||
| // copy new io addrs | |||||
| vector<void *> io_addrs = io_addrs_; | |||||
| davinci_model_->UpdateKnownZeroCopyAddr(io_addrs); | |||||
| auto addr_size = kAddrLen * io_addrs.size(); | |||||
| // copy io addr | // copy io addr | ||||
| errno_t sec_ret = memcpy_s(args_addr.get() + offset, addr_size, io_addrs_.data(), addr_size); | |||||
| errno_t sec_ret = memcpy_s(args_addr.get() + offset, addr_size, io_addrs.data(), addr_size); | |||||
| if (sec_ret != EOK) { | if (sec_ret != EOK) { | ||||
| REPORT_CALL_ERROR("E19999", "Call memcpy_s fail, size:%zu, ret:0x%X, when KernelTaskInfo %s", | REPORT_CALL_ERROR("E19999", "Call memcpy_s fail, size:%zu, ret:0x%X, when KernelTaskInfo %s", | ||||
| addr_size, sec_ret, __FUNCTION__); | addr_size, sec_ret, __FUNCTION__); | ||||
| @@ -105,11 +105,6 @@ Status KnownNodeTask::Init(TaskContext &context) { | |||||
| "known node task allocate workspace failed."); | "known node task allocate workspace failed."); | ||||
| RECORD_EXECUTION_EVENT(context.GetExecutionContext(), context.GetNodeName(), | RECORD_EXECUTION_EVENT(context.GetExecutionContext(), context.GetNodeName(), | ||||
| "[KnownNodeTask_AllocateWorkspace] End, size %zu", davinci_model_->TotalMemSize()); | "[KnownNodeTask_AllocateWorkspace] End, size %zu", davinci_model_->TotalMemSize()); | ||||
| bool addr_not_changed = false; | |||||
| if (davinci_model_->GetRuntimeParam().mem_base == buffer) { | |||||
| addr_not_changed = true; | |||||
| } | |||||
| davinci_model_->SetKnownNodeAddrNotChanged(addr_not_changed); | |||||
| // update mem base | // update mem base | ||||
| davinci_model_->UpdateMemBase(static_cast<uint8_t *>(buffer)); | davinci_model_->UpdateMemBase(static_cast<uint8_t *>(buffer)); | ||||
| GELOGI("KnownNodeTask::Init mem base is %p, size %lu.", | GELOGI("KnownNodeTask::Init mem base is %p, size %lu.", | ||||