@@ -2875,23 +2875,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__); | ||||
@@ -112,11 +112,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.", | ||||