Browse Source

!177 Modify the execution of single_op to async.

Merge pull request !177 from 赵之轩/development
tags/v1.1.0
王涛 Gitee 3 years ago
parent
commit
ecb33a2aaf
2 changed files with 15 additions and 11 deletions
  1. +13
    -10
      ge/single_op/task/op_task.cc
  2. +2
    -1
      ge/single_op/task/op_task.h

+ 13
- 10
ge/single_op/task/op_task.cc View File

@@ -263,7 +263,8 @@ Status AiCpuBaseTask::SetExtInfoAndType(const std::string &kernel_ext_info) {
} }


Status AiCpuBaseTask::UpdateExtInfo(const std::vector<GeTensorDesc> &input_desc, Status AiCpuBaseTask::UpdateExtInfo(const std::vector<GeTensorDesc> &input_desc,
std::vector<GeTensorDesc> &output_desc) {
std::vector<GeTensorDesc> &output_desc,
rtStream_t stream) {
GELOGI("Update ext info begin, unknown_type=%d.", unknown_type_); GELOGI("Update ext info begin, unknown_type=%d.", unknown_type_);
if (num_inputs_ == 0 && num_outputs_ == 0) { if (num_inputs_ == 0 && num_outputs_ == 0) {
GELOGI("No input and output, no need update ext info."); GELOGI("No input and output, no need update ext info.");
@@ -283,11 +284,12 @@ Status AiCpuBaseTask::UpdateExtInfo(const std::vector<GeTensorDesc> &input_desc,
} }
} }


GE_CHK_RT_RET(rtMemcpy(ext_info_addr_dev_,
aicpu_ext_handle_->GetExtInfoLen(), // check size
aicpu_ext_handle_->GetExtInfo(),
aicpu_ext_handle_->GetExtInfoLen(),
RT_MEMCPY_HOST_TO_DEVICE));
GE_CHK_RT_RET(rtMemcpyAsync(ext_info_addr_dev_,
aicpu_ext_handle_->GetExtInfoLen(), // check size
aicpu_ext_handle_->GetExtInfo(),
aicpu_ext_handle_->GetExtInfoLen(),
RT_MEMCPY_HOST_TO_DEVICE_EX,
stream));


GELOGI("Update ext info end."); GELOGI("Update ext info end.");
return SUCCESS; return SUCCESS;
@@ -618,7 +620,7 @@ Status AiCpuTask::LaunchKernel(const std::vector<GeTensorDesc> &input_desc,
std::vector<GeTensorDesc> &output_desc, std::vector<GeTensorDesc> &output_desc,
std::vector<DataBuffer> &output_buffers, std::vector<DataBuffer> &output_buffers,
rtStream_t stream) { rtStream_t stream) {
GE_CHK_STATUS_RET_NOLOG(UpdateExtInfo(input_desc, output_desc));
GE_CHK_STATUS_RET_NOLOG(UpdateExtInfo(input_desc, output_desc, stream));
std::vector<void *> inputs; std::vector<void *> inputs;
std::vector<void *> outputs; std::vector<void *> outputs;
for (auto &buffer : input_buffers) { for (auto &buffer : input_buffers) {
@@ -629,11 +631,12 @@ Status AiCpuTask::LaunchKernel(const std::vector<GeTensorDesc> &input_desc,
} }
GE_CHK_STATUS_RET_NOLOG(SetIO(inputs, outputs)); GE_CHK_STATUS_RET_NOLOG(SetIO(inputs, outputs));
GE_CHK_STATUS_RET_NOLOG(LaunchKernel(stream)); GE_CHK_STATUS_RET_NOLOG(LaunchKernel(stream));
GE_CHK_RT_RET(rtStreamSynchronize(stream));


if (unknown_type_ == DEPEND_SHAPE_RANGE) { if (unknown_type_ == DEPEND_SHAPE_RANGE) {
GE_CHK_RT_RET(rtStreamSynchronize(stream));
GE_CHK_STATUS_RET_NOLOG(UpdateOutputShape(output_desc)); GE_CHK_STATUS_RET_NOLOG(UpdateOutputShape(output_desc));
} else if (unknown_type_ == DEPEND_COMPUTE) { } else if (unknown_type_ == DEPEND_COMPUTE) {
GE_CHK_RT_RET(rtStreamSynchronize(stream));
GE_CHK_STATUS_RET_NOLOG(UpdateShapeAndDataByResultSummary(output_desc, output_buffers, stream)); GE_CHK_STATUS_RET_NOLOG(UpdateShapeAndDataByResultSummary(output_desc, output_buffers, stream));
} }


@@ -689,7 +692,7 @@ Status AiCpuCCTask::LaunchKernel(const std::vector<GeTensorDesc> &input_desc,
"AiCpuCCTask unknown type[%d] is depend compute, it's not supported now.", "AiCpuCCTask unknown type[%d] is depend compute, it's not supported now.",
unknown_type_); unknown_type_);


GE_CHK_STATUS_RET_NOLOG(UpdateExtInfo(input_desc, output_desc));
GE_CHK_STATUS_RET_NOLOG(UpdateExtInfo(input_desc, output_desc, stream));


size_t arg_index = 0; size_t arg_index = 0;
auto *task_io_addr = reinterpret_cast<uintptr_t *>(io_addr_); auto *task_io_addr = reinterpret_cast<uintptr_t *>(io_addr_);
@@ -702,9 +705,9 @@ Status AiCpuCCTask::LaunchKernel(const std::vector<GeTensorDesc> &input_desc,
} }


GE_CHK_STATUS_RET_NOLOG(LaunchKernel(stream)); GE_CHK_STATUS_RET_NOLOG(LaunchKernel(stream));
GE_CHK_RT_RET(rtStreamSynchronize(stream));


if (unknown_type_ == DEPEND_SHAPE_RANGE) { if (unknown_type_ == DEPEND_SHAPE_RANGE) {
GE_CHK_RT_RET(rtStreamSynchronize(stream));
GE_CHK_STATUS_RET_NOLOG(UpdateOutputShape(output_desc)); GE_CHK_STATUS_RET_NOLOG(UpdateOutputShape(output_desc));
} }




+ 2
- 1
ge/single_op/task/op_task.h View File

@@ -131,7 +131,8 @@ class AiCpuBaseTask : public OpTask {
Status SetExtInfoAndType(const std::string &kernel_ext_info); Status SetExtInfoAndType(const std::string &kernel_ext_info);


Status UpdateExtInfo(const std::vector<GeTensorDesc> &input_desc, Status UpdateExtInfo(const std::vector<GeTensorDesc> &input_desc,
std::vector<GeTensorDesc> &output_desc);
std::vector<GeTensorDesc> &output_desc,
rtStream_t stream);
Status UpdateOutputShape(vector<GeTensorDesc> &output_desc); Status UpdateOutputShape(vector<GeTensorDesc> &output_desc);
Status UpdateShapeToOutputDesc(const GeShape &shape_new, GeTensorDesc &output_desc); Status UpdateShapeToOutputDesc(const GeShape &shape_new, GeTensorDesc &output_desc);




Loading…
Cancel
Save