|
|
@@ -3530,6 +3530,31 @@ Status DavinciModel::CopyModelData(const InputData &input_data, OutputData &outp |
|
|
|
return SUCCESS; |
|
|
|
} |
|
|
|
|
|
|
|
void DavinciModel::BuildZeroCopyTasksLookupTable() { |
|
|
|
std::lock_guard<std::mutex> lk(lookup_table_build_lock_); |
|
|
|
if (lookup_table_built_) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
const auto default_label_hash = std::hash<std::string>{}(kDefaultBatchLable); |
|
|
|
for (auto &task : zero_copy_tasks_) { |
|
|
|
auto label_hash = std::hash<std::string>{}(task.GetBatchLabel()); |
|
|
|
auto addr2offsets = task.GetTaskArgsOffset(); |
|
|
|
|
|
|
|
label_hash2tasks_[label_hash].insert(&task); |
|
|
|
if (label_hash == default_label_hash) { |
|
|
|
for (auto &addr2offset : addr2offsets) { |
|
|
|
addr2default_label_tasks_[addr2offset.first].insert(&task); |
|
|
|
} |
|
|
|
} else { |
|
|
|
for (auto &addr2offset : addr2offsets) { |
|
|
|
addr2specific_label_tasks_[addr2offset.first].insert(&task); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
lookup_table_built_ = true; |
|
|
|
} |
|
|
|
|
|
|
|
/// |
|
|
|
/// @ingroup ge |
|
|
|
/// @brief Copy Data addr to model for direct use. |
|
|
@@ -3551,6 +3576,8 @@ Status DavinciModel::UpdateIoTaskArgs(const std::map<uint32_t, ZeroCopyOffset> & |
|
|
|
return ACL_ERROR_GE_PARAM_INVALID; |
|
|
|
} |
|
|
|
|
|
|
|
BuildZeroCopyTasksLookupTable(); |
|
|
|
|
|
|
|
for (const auto &data : data_info) { |
|
|
|
if (data.first >= blobs.size()) { // check data index. |
|
|
|
REPORT_INNER_ERROR("E19999", "is_input:%d, data index:%u from model >= blobs.size:%zu from user, mode_id:%u" |
|
|
|