| @@ -19,6 +19,49 @@ | |||||
| #include "framework/common/debug/ge_log.h" | #include "framework/common/debug/ge_log.h" | ||||
| #include "graph/load/model_manager/davinci_model.h" | #include "graph/load/model_manager/davinci_model.h" | ||||
| namespace { | |||||
| const uint64_t kProfilingFpStartLogid = 1; | |||||
| const uint64_t kProfilingBpEndLogid = 2; | |||||
| const uint64_t kProfilingArStartLogid = 3; | |||||
| const uint64_t kProfilingArEndLogid = 4; | |||||
| const uint64_t kProfilingArMax = 10002; | |||||
| const uint64_t kProfilingIterEndLogid = 65535; | |||||
| const uint16_t kProfilingFpStartTagid = 2; | |||||
| const uint16_t kProfilingBpEndTagid = 3; | |||||
| const uint16_t kProfilingIterEndTagid = 4; | |||||
| const uint16_t kProfilingArStartTagid = 10000; | |||||
| const uint16_t kProfilingArEndTagid = 10001; | |||||
| const map<uint64_t, uint16_t> kLogToTagMap = { | |||||
| {kProfilingFpStartLogid, kProfilingFpStartTagid}, | |||||
| {kProfilingBpEndLogid, kProfilingBpEndTagid}, | |||||
| {kProfilingArStartLogid, kProfilingArStartTagid}, | |||||
| {kProfilingArEndLogid, kProfilingArEndTagid} | |||||
| }; | |||||
| void GetTagFromLogid(const uint64_t &log_id, uint16_t &tag_id) { | |||||
| GELOGD("log id is %u", log_id); | |||||
| if (log_id == 0 || log_id > kProfilingArMax) { | |||||
| GELOGW("log id:%u is out of range", log_id); | |||||
| return; | |||||
| } | |||||
| if (log_id == kProfilingIterEndLogid) { | |||||
| tag_id = kProfilingIterEndTagid; | |||||
| return; | |||||
| } | |||||
| auto iter = kLogToTagMap.find(log_id); | |||||
| if (iter != kLogToTagMap.end()) { | |||||
| tag_id = iter->second; | |||||
| return; | |||||
| } | |||||
| else { | |||||
| tag_id = log_id + kProfilingArEndTagid - kProfilingArEndLogid; | |||||
| return; | |||||
| } | |||||
| } | |||||
| } // namespace | |||||
| namespace ge { | namespace ge { | ||||
| Status ProfilerTraceTaskInfo::Init(const domi::TaskDef &task_def, DavinciModel *davinci_model) { | Status ProfilerTraceTaskInfo::Init(const domi::TaskDef &task_def, DavinciModel *davinci_model) { | ||||
| GELOGI("ProfilerTraceTaskInfo Init Start."); | GELOGI("ProfilerTraceTaskInfo Init Start."); | ||||
| @@ -27,7 +70,7 @@ Status ProfilerTraceTaskInfo::Init(const domi::TaskDef &task_def, DavinciModel * | |||||
| GELOGE(PARAM_INVALID, "[Check][Param] davinci_model is null!"); | GELOGE(PARAM_INVALID, "[Check][Param] davinci_model is null!"); | ||||
| return PARAM_INVALID; | return PARAM_INVALID; | ||||
| } | } | ||||
| model_id_ = davinci_model->GetModelId(); | |||||
| Status ret = SetStream(task_def.stream_id(), davinci_model->GetStreamList()); | Status ret = SetStream(task_def.stream_id(), davinci_model->GetStreamList()); | ||||
| if (ret != SUCCESS) { | if (ret != SUCCESS) { | ||||
| return ret; | return ret; | ||||
| @@ -44,8 +87,9 @@ Status ProfilerTraceTaskInfo::Init(const domi::TaskDef &task_def, DavinciModel * | |||||
| Status ProfilerTraceTaskInfo::Distribute() { | Status ProfilerTraceTaskInfo::Distribute() { | ||||
| GELOGI("ProfilerTraceTaskInfo Distribute Start. logid = %lu. notify = %d.", log_id_, notify_); | GELOGI("ProfilerTraceTaskInfo Distribute Start. logid = %lu. notify = %d.", log_id_, notify_); | ||||
| rtError_t rt_ret = rtProfilerTrace(log_id_, notify_, flat_, stream_); | |||||
| uint16_t tag_id = 0; | |||||
| GetTagFromLogid(log_id_, tag_id); | |||||
| rtError_t rt_ret = rtProfilerTraceEx(log_id_, model_id_, tag_id, stream_); | |||||
| if (rt_ret != RT_ERROR_NONE) { | if (rt_ret != RT_ERROR_NONE) { | ||||
| REPORT_CALL_ERROR("E19999", "Call rtProfilerTrace failed, ret:0x%X, logid:%lu. notify:%d", | REPORT_CALL_ERROR("E19999", "Call rtProfilerTrace failed, ret:0x%X, logid:%lu. notify:%d", | ||||
| rt_ret, log_id_, notify_); | rt_ret, log_id_, notify_); | ||||
| @@ -21,7 +21,7 @@ | |||||
| namespace ge { | namespace ge { | ||||
| class ProfilerTraceTaskInfo : public TaskInfo { | class ProfilerTraceTaskInfo : public TaskInfo { | ||||
| public: | public: | ||||
| ProfilerTraceTaskInfo() : log_id_(0), notify_(false), flat_(0) {} | |||||
| ProfilerTraceTaskInfo() : log_id_(0), notify_(false), flat_(0), model_id_(0) {} | |||||
| ~ProfilerTraceTaskInfo() override {} | ~ProfilerTraceTaskInfo() override {} | ||||
| @@ -29,10 +29,15 @@ class ProfilerTraceTaskInfo : public TaskInfo { | |||||
| Status Distribute() override; | Status Distribute() override; | ||||
| uint32_t GetModelId() { return model_id_; } | |||||
| private: | private: | ||||
| uint64_t log_id_; | uint64_t log_id_; | ||||
| bool notify_; | bool notify_; | ||||
| uint32_t flat_; | uint32_t flat_; | ||||
| uint32_t model_id_; | |||||
| }; | }; | ||||
| } // namespace ge | } // namespace ge | ||||
| #endif // GE_GRAPH_LOAD_NEW_MODEL_MANAGER_TASK_INFO_PROFILER_TRACE_TASK_INFO_H_ | #endif // GE_GRAPH_LOAD_NEW_MODEL_MANAGER_TASK_INFO_PROFILER_TRACE_TASK_INFO_H_ | ||||
| @@ -21,6 +21,49 @@ | |||||
| #include "graph/utils/tensor_utils.h" | #include "graph/utils/tensor_utils.h" | ||||
| #include "hybrid/model/hybrid_model.h" | #include "hybrid/model/hybrid_model.h" | ||||
| namespace { | |||||
| const uint64_t kProfilingFpStartLogid = 1; | |||||
| const uint64_t kProfilingBpEndLogid = 2; | |||||
| const uint64_t kProfilingArStartLogid = 3; | |||||
| const uint64_t kProfilingArEndLogid = 4; | |||||
| const uint64_t kProfilingArMax = 10002; | |||||
| const uint64_t kProfilingIterEndLogid = 65535; | |||||
| const uint16_t kProfilingFpStartTagid = 2; | |||||
| const uint16_t kProfilingBpEndTagid = 3; | |||||
| const uint16_t kProfilingIterEndTagid = 4; | |||||
| const uint16_t kProfilingArStartTagid = 10000; | |||||
| const uint16_t kProfilingArEndTagid = 10001; | |||||
| const map<uint64_t, uint16_t> kLogToTagMap = { | |||||
| {kProfilingFpStartLogid, kProfilingFpStartTagid}, | |||||
| {kProfilingBpEndLogid, kProfilingBpEndTagid}, | |||||
| {kProfilingArStartLogid, kProfilingArStartTagid}, | |||||
| {kProfilingArEndLogid, kProfilingArEndTagid} | |||||
| }; | |||||
| void GetTagFromLogid(const uint64_t &log_id, uint16_t &tag_id) { | |||||
| GELOGD("log id is %u", log_id); | |||||
| if (log_id == 0 || log_id > kProfilingArMax) { | |||||
| GELOGW("log id:%u is out of range", log_id); | |||||
| return; | |||||
| } | |||||
| if (log_id == kProfilingIterEndLogid) { | |||||
| tag_id = kProfilingIterEndTagid; | |||||
| return; | |||||
| } | |||||
| auto iter = kLogToTagMap.find(log_id); | |||||
| if (iter != kLogToTagMap.end()) { | |||||
| tag_id = iter->second; | |||||
| return; | |||||
| } | |||||
| else { | |||||
| tag_id = log_id + kProfilingArEndTagid - kProfilingArEndLogid; | |||||
| return; | |||||
| } | |||||
| } | |||||
| } // namespace | |||||
| namespace ge { | namespace ge { | ||||
| namespace hybrid { | namespace hybrid { | ||||
| REGISTER_NODE_EXECUTOR_BUILDER(NodeExecutorManager::ExecutorType::RTS, RtsNodeExecutor); | REGISTER_NODE_EXECUTOR_BUILDER(NodeExecutorManager::ExecutorType::RTS, RtsNodeExecutor); | ||||
| @@ -102,21 +145,21 @@ Status ProfilingTraceNodeTask::Init(const HybridModel &model, const NodePtr &nod | |||||
| GELOGE(INTERNAL_ERROR, "Profiling node has no task to execute."); | GELOGE(INTERNAL_ERROR, "Profiling node has no task to execute."); | ||||
| return INTERNAL_ERROR; | return INTERNAL_ERROR; | ||||
| } | } | ||||
| model_id_ = model.GetModelId(); | |||||
| task_defs_ = *task_defs; | task_defs_ = *task_defs; | ||||
| GELOGD("[%s] Done initialization successfully.", node->GetName().c_str()); | GELOGD("[%s] Done initialization successfully.", node->GetName().c_str()); | ||||
| return SUCCESS; | return SUCCESS; | ||||
| } | } | ||||
| Status ProfilingTraceNodeTask::ExecuteAsync(TaskContext &context, std::function<void()> done_callback) { | Status ProfilingTraceNodeTask::ExecuteAsync(TaskContext &context, std::function<void()> done_callback) { | ||||
| uint16_t tag_id = 0; | |||||
| for (const auto &task_def : task_defs_) { | for (const auto &task_def : task_defs_) { | ||||
| auto log_time_stamp_def = task_def.log_timestamp(); | auto log_time_stamp_def = task_def.log_timestamp(); | ||||
| uint64_t log_id = log_time_stamp_def.logid(); | uint64_t log_id = log_time_stamp_def.logid(); | ||||
| bool notify = log_time_stamp_def.notify(); | |||||
| uint32_t flat = log_time_stamp_def.flat(); | |||||
| GELOGD("ProfilingTraceTask execute async start. logid = %lu, notify = %d.", log_id, notify); | |||||
| rtError_t rt_ret = rtProfilerTrace(log_id, notify, flat, context.GetStream()); | |||||
| GELOGD("ProfilingTraceTask execute async start. logid = %lu.", log_id); | |||||
| GetTagFromLogid(log_id, tag_id); | |||||
| rtError_t rt_ret = rtProfilerTraceEx(log_id, model_id_, tag_id, context.GetStream()); | |||||
| if (rt_ret != RT_ERROR_NONE) { | if (rt_ret != RT_ERROR_NONE) { | ||||
| GELOGE(RT_FAILED, "Call rt api failed, ret: 0x%X", rt_ret); | GELOGE(RT_FAILED, "Call rt api failed, ret: 0x%X", rt_ret); | ||||
| return RT_ERROR_TO_GE_STATUS(rt_ret); | return RT_ERROR_TO_GE_STATUS(rt_ret); | ||||
| @@ -47,6 +47,7 @@ class ProfilingTraceNodeTask : public RtsNodeTask { | |||||
| Status ExecuteAsync(TaskContext &context, std::function<void()> done_callback) override; | Status ExecuteAsync(TaskContext &context, std::function<void()> done_callback) override; | ||||
| private: | private: | ||||
| uint32_t model_id_ = 0; | |||||
| std::vector<domi::TaskDef> task_defs_; | std::vector<domi::TaskDef> task_defs_; | ||||
| }; | }; | ||||