|
|
|
@@ -2802,6 +2802,19 @@ void DavinciModel::UnbindTaskSinkStream() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void *DavinciModel::GetRunAddress(void *addr) const { |
|
|
|
if (fixed_mem_base_ == reinterpret_cast<uintptr_t>(mem_base_)) { |
|
|
|
return addr; |
|
|
|
} |
|
|
|
|
|
|
|
uintptr_t ptr = reinterpret_cast<uintptr_t>(io_addrs[i]); |
|
|
|
if ((fixed_mem_base_ <= ptr) && (ptr < fixed_mem_base_ + runtime_param_.mem_size)) { |
|
|
|
return mem_base_ + (ptr - fixed_mem_base_); |
|
|
|
} else { |
|
|
|
return addr; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Status DavinciModel::CreateKnownZeroCopyMap(const vector<void *> &inputs, const vector<void *> &outputs) { |
|
|
|
GELOGI("in, inputs size: %zu, input addr size: %zu, outputs size: %zu, output addr size: %zu", |
|
|
|
inputs.size(), input_addrs_list_.size(), outputs.size(), output_addrs_list_.size()); |
|
|
|
@@ -2814,8 +2827,9 @@ Status DavinciModel::CreateKnownZeroCopyMap(const vector<void *> &inputs, const |
|
|
|
known_output_data_info_.clear(); |
|
|
|
for (size_t i = 0; i < inputs.size(); ++i) { |
|
|
|
const vector<void *> &addr_list = input_addrs_list_[i]; |
|
|
|
known_input_data_info_[addr_list[kDataIndex]] = inputs[i]; |
|
|
|
GELOGI("input %zu, v addr %p, p addr %p", i, addr_list[kDataIndex], inputs[i]); |
|
|
|
void *addr = GetRunAddress(addr_list[kDataIndex]); |
|
|
|
known_input_data_info_[addr] = inputs[i]; |
|
|
|
GELOGI("input %zu, v addr %p, r addr %p, p addr %p", i, addr_list[kDataIndex], addr, inputs[i]); |
|
|
|
} |
|
|
|
|
|
|
|
if (output_addrs_list_.empty()) { |
|
|
|
@@ -2824,8 +2838,9 @@ Status DavinciModel::CreateKnownZeroCopyMap(const vector<void *> &inputs, const |
|
|
|
} |
|
|
|
const vector<void *> &addr_list = output_addrs_list_.front(); |
|
|
|
for (size_t i = 0; i < addr_list.size() && i < outputs.size(); ++i) { |
|
|
|
known_output_data_info_[addr_list[i]] = outputs[i]; |
|
|
|
GELOGI("output %zu, v addr %p, p addr %p", i, addr_list[i], outputs[i]); |
|
|
|
void *addr = GetRunAddress(addr_list[kDataIndex]); |
|
|
|
known_output_data_info_[addr] = outputs[i]; |
|
|
|
GELOGI("output %zu, v addr %p, r addr %p, p addr %p", i, addr_list[i], addr, outputs[i]); |
|
|
|
} |
|
|
|
|
|
|
|
GELOGI("success, known input data info size: %zu, known output data info size: %zu", |
|
|
|
@@ -2840,22 +2855,14 @@ void DavinciModel::SetTotalIOAddrs(const vector<void *> &io_addrs) { |
|
|
|
} |
|
|
|
|
|
|
|
for (size_t i = 0; i < io_addrs.size(); ++i) { |
|
|
|
uintptr_t addr = reinterpret_cast<uintptr_t>(io_addrs[i]); |
|
|
|
if ((fixed_mem_base_ <= addr) && (addr < fixed_mem_base_ + runtime_param_.mem_size)) { |
|
|
|
total_io_addrs_.emplace_back(mem_base_ + (addr - fixed_mem_base_)); |
|
|
|
} else { |
|
|
|
total_io_addrs_.emplace_back(io_addrs[i]); |
|
|
|
} |
|
|
|
total_io_addrs_.emplace_back(GetRunAddress(io_addrs[i])); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Status DavinciModel::UpdateKnownZeroCopyAddr(vector<void *> &total_io_addrs) { |
|
|
|
if (fixed_mem_base_ != reinterpret_cast<uintptr_t>(mem_base_)) { |
|
|
|
for (size_t i = 0; i < total_io_addrs.size(); ++i) { |
|
|
|
uintptr_t addr = reinterpret_cast<uintptr_t>(total_io_addrs[i]); |
|
|
|
if ((fixed_mem_base_ <= addr) && (addr < fixed_mem_base_ + runtime_param_.mem_size)) { |
|
|
|
total_io_addrs[i] = mem_base_ + (addr - fixed_mem_base_); |
|
|
|
} |
|
|
|
total_io_addrs[i] = GetRunAddress(total_io_addrs[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|