diff --git a/ge/hybrid/node_executor/aicpu/aicpu_node_executor.cc b/ge/hybrid/node_executor/aicpu/aicpu_node_executor.cc index d9d4b35e..a2e1ef98 100755 --- a/ge/hybrid/node_executor/aicpu/aicpu_node_executor.cc +++ b/ge/hybrid/node_executor/aicpu/aicpu_node_executor.cc @@ -738,7 +738,7 @@ Status AicpuNodeTask::SetMemCopyTask(const domi::TaskDef &task_def) { auto memcpy_io_addr = memcpy_args_.get() + sizeof(aicpu::AicpuParamHead); // if has input and output, need copy to ioaddr int cpy_ret = memcpy_s(memcpy_io_addr, memcpy_args_size_ - sizeof(aicpu::AicpuParamHead), - ©_ioaddr_dev_, sizeof(uint64_t) * memcpy_io_num); + ©_io_addr_[0], sizeof(uint64_t) * memcpy_io_num); GE_IF_BOOL_EXEC(cpy_ret != 0, REPORT_INNER_ERROR("E19999", "Node[Memcpoy] memcpy io addr to AicpuParamHead failed," "ret=%d, args_size=%u, io nums=%u.", diff --git a/ge/single_op/task/op_task.cc b/ge/single_op/task/op_task.cc index 511492b8..f940cb36 100755 --- a/ge/single_op/task/op_task.cc +++ b/ge/single_op/task/op_task.cc @@ -1137,18 +1137,10 @@ Status AiCpuCCTask::InitForSummaryAndCopy() { GE_CHK_RT_RET(rtMalloc(©_input_src_dev_, copy_input_buf_len, RT_MEMORY_HBM)); GE_CHK_RT_RET(rtMalloc(©_input_dst_dev_, copy_input_buf_len, RT_MEMORY_HBM)); - std::vector copy_io_addr; - copy_io_addr.emplace_back(reinterpret_cast(copy_input_release_flag_dev_)); - copy_io_addr.emplace_back(reinterpret_cast(copy_input_data_size_dev_)); - copy_io_addr.emplace_back(reinterpret_cast(copy_input_src_dev_)); - copy_io_addr.emplace_back(reinterpret_cast(copy_input_dst_dev_)); - - const auto copy_io_addr_size = sizeof(uint64_t) * copy_io_addr.size(); - - GE_CHK_RT_RET(rtMalloc(©_ioaddr_dev_, copy_io_addr_size, RT_MEMORY_HBM)); - - GE_CHK_RT_RET(rtMemcpy(copy_ioaddr_dev_, copy_io_addr_size, - copy_io_addr.data(), copy_io_addr_size, RT_MEMCPY_HOST_TO_DEVICE)); + copy_io_addr_.emplace_back(reinterpret_cast(copy_input_release_flag_dev_)); + copy_io_addr_.emplace_back(reinterpret_cast(copy_input_data_size_dev_)); + copy_io_addr_.emplace_back(reinterpret_cast(copy_input_src_dev_)); + copy_io_addr_.emplace_back(reinterpret_cast(copy_input_dst_dev_)); return SUCCESS; } @@ -1192,7 +1184,7 @@ Status AiCpuCCTask::SetMemCopyTask(const domi::KernelDef &kernel_def) { auto memcpy_io_addr = memcpy_args_.get() + sizeof(aicpu::AicpuParamHead); // if has input and output, need copy to ioaddr int cpy_ret = memcpy_s(memcpy_io_addr, memcpy_args_size_ - sizeof(aicpu::AicpuParamHead), - ©_ioaddr_dev_, sizeof(uint64_t) * memcpy_io_num); + ©_io_addr[0], sizeof(uint64_t) * memcpy_io_num); GE_IF_BOOL_EXEC(cpy_ret != 0, REPORT_INNER_ERROR("E19999", "Node[Memcpoy] memcpy io addr to AicpuParamHead failed," "ret=%d, args_size=%u, io nums=%u.", diff --git a/ge/single_op/task/op_task.h b/ge/single_op/task/op_task.h index 7b27fc60..d2e5bf70 100644 --- a/ge/single_op/task/op_task.h +++ b/ge/single_op/task/op_task.h @@ -200,8 +200,6 @@ class AiCpuBaseTask : public OpTask { std::vector output_summary_; std::vector output_summary_host_; - void *copy_ioaddr_dev_ = nullptr; - void *copy_input_release_flag_dev_ = nullptr; void *copy_input_data_size_dev_ = nullptr; void *copy_input_src_dev_ = nullptr; @@ -295,6 +293,7 @@ private: std::unique_ptr memcpy_args_; std::string memcpy_so_name_; std::string memcpy_kernel_name_; + std::vector copy_io_addr_; // args size uint32_t memcpy_args_size_ = 0; };