|
|
|
@ -30,18 +30,11 @@ ZeroCopyOffset::ZeroCopyOffset() {}
|
|
|
|
|
|
|
|
|
|
ZeroCopyOffset::~ZeroCopyOffset() {}
|
|
|
|
|
|
|
|
|
|
Status ZeroCopyOffset::InitInputDataInfo(const vector<int64_t> &output_size_list,
|
|
|
|
|
const vector<void *> &virtual_addr_list, const OpDescPtr &op_desc,
|
|
|
|
|
Status ZeroCopyOffset::InitInputDataInfo(int64_t output_size, void *virtual_addr, const OpDescPtr &op_desc,
|
|
|
|
|
bool &fusion_flag) {
|
|
|
|
|
GELOGI("[ZCPY] Start to InitInputDataInfo of %s, total_data_size is %ld, virtual_addr is %p",
|
|
|
|
|
op_desc->GetName().c_str(), output_size_list[kDataIndex], virtual_addr_list[kDataIndex]);
|
|
|
|
|
if (output_size_list.empty() || virtual_addr_list.empty() || (output_size_list.size() != virtual_addr_list.size())) {
|
|
|
|
|
GELOGE(PARAM_INVALID, "Data[%s] init failed: Output size is %zu, Output addr is %zu", op_desc->GetName().c_str(),
|
|
|
|
|
output_size_list.size(), virtual_addr_list.size());
|
|
|
|
|
return PARAM_INVALID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
basic_addr_ = virtual_addr_list[kDataIndex];
|
|
|
|
|
op_desc->GetName().c_str(), output_size, virtual_addr);
|
|
|
|
|
basic_addr_ = virtual_addr;
|
|
|
|
|
(void)ge::AttrUtils::GetListInt(op_desc, ATTR_ZERO_COPY_BASIC_OFFSET, zero_copy_basic_offset_);
|
|
|
|
|
(void)ge::AttrUtils::GetListInt(op_desc, ATTR_ZERO_COPY_RELATIVE_OFFSET, zero_copy_relative_offset_);
|
|
|
|
|
GE_CHK_BOOL_EXEC(zero_copy_basic_offset_.size() == zero_copy_relative_offset_.size(), return PARAM_INVALID,
|
|
|
|
@ -53,26 +46,23 @@ Status ZeroCopyOffset::InitInputDataInfo(const vector<int64_t> &output_size_list
|
|
|
|
|
IsL2Fusion(zero_copy_basic_offset_, virtual_addr_offset, fusion_flag);
|
|
|
|
|
|
|
|
|
|
uint32_t out_count = 0;
|
|
|
|
|
data_size_ = output_size_list[kDataIndex];
|
|
|
|
|
data_size_ = output_size;
|
|
|
|
|
if (!fusion_flag) {
|
|
|
|
|
GELOGI("[ZCPY] %s not set l2_fusion.", op_desc->GetName().c_str());
|
|
|
|
|
out_count++;
|
|
|
|
|
data_info_.emplace_back(output_size_list[kDataIndex], virtual_addr_list[kDataIndex]);
|
|
|
|
|
data_info_.emplace_back(output_size, virtual_addr);
|
|
|
|
|
relative_offset_.emplace_back(0);
|
|
|
|
|
GELOGI("[ZCPY] %s size is %ld, virtual_addr is %p.", op_desc->GetName().c_str(), output_size_list[kDataIndex],
|
|
|
|
|
virtual_addr_list[kDataIndex]);
|
|
|
|
|
GELOGI("[ZCPY] %s size is %ld, virtual_addr is %p.", op_desc->GetName().c_str(), output_size, virtual_addr);
|
|
|
|
|
} else {
|
|
|
|
|
GELOGI("[ZCPY] set l2_fusion for %s.", op_desc->GetName().c_str());
|
|
|
|
|
for (size_t index = 0; index < zero_copy_basic_offset_.size(); ++index) {
|
|
|
|
|
if (zero_copy_basic_offset_.at(index) == virtual_addr_offset) {
|
|
|
|
|
out_count++;
|
|
|
|
|
uint64_t out_offset =
|
|
|
|
|
reinterpret_cast<uint64_t>(virtual_addr_list[kDataIndex]) + zero_copy_relative_offset_.at(index);
|
|
|
|
|
int64_t real_data_size = ModelUtils::GetOutputSize(op_desc).at(kDataIndex);
|
|
|
|
|
data_info_.emplace_back(real_data_size, reinterpret_cast<void *>(static_cast<uintptr_t>(out_offset)));
|
|
|
|
|
uint64_t out_offset = reinterpret_cast<uint64_t>(virtual_addr) + zero_copy_relative_offset_.at(index);
|
|
|
|
|
data_info_.emplace_back(output_size, reinterpret_cast<void *>(static_cast<uintptr_t>(out_offset)));
|
|
|
|
|
relative_offset_.emplace_back(zero_copy_relative_offset_.at(index));
|
|
|
|
|
GELOGI("[ZCPY] virtual_addr: %p has been l2-fusion to %lu, need copy data_size is %ld.", basic_addr_,
|
|
|
|
|
out_offset, real_data_size);
|
|
|
|
|
out_offset, output_size);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|