From f0eba00f7f5458bf0f23bcf96d9a0b5ae5389a51 Mon Sep 17 00:00:00 2001 From: l00444296 Date: Fri, 4 Dec 2020 17:30:26 +0800 Subject: [PATCH] Feature: Support single op profiling --- ge/single_op/single_op.cc | 121 +++++++++++++------------------------- ge/single_op/single_op.h | 2 - 2 files changed, 41 insertions(+), 82 deletions(-) diff --git a/ge/single_op/single_op.cc b/ge/single_op/single_op.cc index 2ff5f44d..95f98b62 100755 --- a/ge/single_op/single_op.cc +++ b/ge/single_op/single_op.cc @@ -35,6 +35,45 @@ size_t GetAlignedSize(size_t size) { size_t aligned_size = (size + 2 * kDataMemAlignSize - 1) / kDataMemAlignSize * kDataMemAlignSize; return aligned_size; } + +Status ProfilingTaskInfo(OpTask *op_task) { + if (!ProfilingManager::Instance().ProfilingModelExecuteOn()) { + return SUCCESS; + } + + string model_name; + string op_name; + uint32_t model_id; + uint32_t block_dim; + if (op_task->GetProfilingArgs(model_name, op_name, model_id, block_dim) != SUCCESS) { + GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Get profiling data of task failed"); + return ACL_ERROR_GE_PARAM_INVALID; + } + GELOGD("ProfilingReport of op[%s] model[%s] start.", op_name.c_str(), model_name.c_str()); + std::vector task_desc_info; + uint32_t task_id = 0; + uint32_t stream_id = 0; + if (rtGetTaskIdAndStreamID(&task_id, &stream_id) != RT_ERROR_NONE) { + GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Get task_id and stream_id failed."); + return ACL_ERROR_GE_PARAM_INVALID; + } + + TaskDescInfo tmp_task_desc_info; + tmp_task_desc_info.model_name = model_name; + tmp_task_desc_info.op_name = op_name; + tmp_task_desc_info.block_dim = block_dim; + tmp_task_desc_info.task_id = task_id; + tmp_task_desc_info.stream_id = stream_id; + GELOGD("GetTaskDescInfo of op [%s] end, task_id[%u], stream_id[%u]", op_name.c_str(), task_id, stream_id); + task_desc_info.emplace_back(tmp_task_desc_info); + + std::vector compute_graph_info; + + auto &profiling_manager = ProfilingManager::Instance(); + profiling_manager.ReportProfilingData(model_id, task_desc_info, compute_graph_info, + !profiling_manager.IsAclApiMode()); + return SUCCESS; +} } // namespace SingleOp::SingleOp(std::mutex *stream_mutex, rtStream_t stream) : stream_mutex_(stream_mutex), stream_(stream) { @@ -176,45 +215,6 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status SingleOp::ExecuteAsync(c return ret; } -Status SingleOp::ProfilingTaskInfo(OpTask *op_task) { - if (!ProfilingManager::Instance().ProfilingModelExecuteOn()) { - return SUCCESS; - } - - string model_name; - string op_name; - uint32_t model_id; - uint32_t block_dim; - if (op_task->GetProfilingArgs(model_name, op_name, model_id, block_dim) != SUCCESS) { - GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Get profiling data of task failed"); - return ACL_ERROR_GE_PARAM_INVALID; - } - GELOGD("ProfilingReport of op[%s] model[%s] start.", op_name.c_str(), model_name.c_str()); - std::vector task_desc_info; - uint32_t task_id = 0; - uint32_t stream_id = 0; - if (rtGetTaskIdAndStreamID(&task_id, &stream_id) != RT_ERROR_NONE) { - GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Get task_id and stream_id failed."); - return ACL_ERROR_GE_PARAM_INVALID; - } - - TaskDescInfo tmp_task_desc_info; - tmp_task_desc_info.model_name = model_name; - tmp_task_desc_info.op_name = op_name; - tmp_task_desc_info.block_dim = block_dim; - tmp_task_desc_info.task_id = task_id; - tmp_task_desc_info.stream_id = stream_id; - GELOGD("GetTaskDescInfo of op [%s] end, task_id[%u], stream_id[%u]", op_name.c_str(), task_id, stream_id); - task_desc_info.emplace_back(tmp_task_desc_info); - - std::vector compute_graph_info; - - auto &profiling_manager = ProfilingManager::Instance(); - profiling_manager.ReportProfilingData(model_id, task_desc_info, compute_graph_info, - !profiling_manager.IsAclApiMode()); - return SUCCESS; -} - void SingleOp::SetStream(rtStream_t stream) { stream_ = stream; } @@ -324,13 +324,13 @@ Status DynamicSingleOp::ExecuteAsync(const vector &input_desc, if (op_task_->GetOpTaskType() == OP_TASK_TBE) { auto ret = ExecuteTbeTask(input_desc, inputs, output_desc, outputs); if (ret == SUCCESS) { - GE_CHK_STATUS_RET_NOLOG(ProfilingTaskInfo(op_task_)); + GE_CHK_STATUS_RET_NOLOG(ProfilingTaskInfo(op_task_.get())); } return ret; } else if (op_task_->GetOpTaskType() == OP_TASK_AICPU || op_task_->GetOpTaskType() == OP_TASK_AICPUCC) { auto aicpu_ret = op_task_->LaunchKernel(input_desc, input_buffers, output_desc, output_buffers, stream_); if (aicpu_ret == SUCCESS) { - GE_CHK_STATUS_RET_NOLOG(ProfilingTaskInfo(op_task_)); + GE_CHK_STATUS_RET_NOLOG(ProfilingTaskInfo(op_task_.get())); } return aicpu_ret; } else { @@ -340,43 +340,4 @@ Status DynamicSingleOp::ExecuteAsync(const vector &input_desc, return ACL_ERROR_GE_OP_TASK_TYPE_INVALID; } } - -Status DynamicSingleOp::ProfilingTaskInfo(std::unique_ptr &op_task) { - if (!ProfilingManager::Instance().ProfilingModelExecuteOn()) { - return SUCCESS; - } - - string model_name; - string op_name; - uint32_t model_id; - uint32_t block_dim; - if (op_task->GetProfilingArgs(model_name, op_name, model_id, block_dim) != SUCCESS) { - GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Get profiling data of task failed"); - return ACL_ERROR_GE_PARAM_INVALID; - } - GELOGD("ProfilingReport of op[%s] model[%s] start.", op_name.c_str(), model_name.c_str()); - std::vector task_desc_info; - uint32_t task_id = 0; - uint32_t stream_id = 0; - if (rtGetTaskIdAndStreamID(&task_id, &stream_id) != RT_ERROR_NONE) { - GELOGE(ACL_ERROR_GE_PARAM_INVALID, "Get task_id and stream_id failed."); - return ACL_ERROR_GE_PARAM_INVALID; - } - - TaskDescInfo tmp_task_desc_info; - tmp_task_desc_info.model_name = model_name; - tmp_task_desc_info.op_name = op_name; - tmp_task_desc_info.block_dim = block_dim; - tmp_task_desc_info.task_id = task_id; - tmp_task_desc_info.stream_id = stream_id; - GELOGD("GetTaskDescInfo of op [%s] end, task_id[%u], stream_id[%u]", op_name.c_str(), task_id, stream_id); - task_desc_info.emplace_back(tmp_task_desc_info); - - std::vector compute_graph_info; - - auto &profiling_manager = ProfilingManager::Instance(); - profiling_manager.ReportProfilingData(model_id, task_desc_info, compute_graph_info, - !profiling_manager.IsAclApiMode()); - return SUCCESS; -} } // namespace ge diff --git a/ge/single_op/single_op.h b/ge/single_op/single_op.h index 05b468f3..14ef8ce1 100755 --- a/ge/single_op/single_op.h +++ b/ge/single_op/single_op.h @@ -42,7 +42,6 @@ class SingleOp { Status ValidateArgs(const std::vector &inputs, const std::vector &outputs); Status UpdateArgs(const std::vector &inputs, const std::vector &outputs); Status GetArgs(const std::vector &inputs, const std::vector &outputs); - Status ProfilingTaskInfo(OpTask *op_task); friend class SingleOpModel; std::mutex *stream_mutex_; @@ -80,7 +79,6 @@ class DynamicSingleOp { const vector &inputs, vector &output_desc, vector &outputs); - Status ProfilingTaskInfo(std::unique_ptr &op_task); std::unique_ptr op_task_; uintptr_t resource_id_ = 0;