* Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.
* Description: 算法分析器CCU task定义
* Create: 2025-04-11
*/
#ifndef ADAPTER_V2_TASK_H
#define ADAPTER_V2_TASK_H
#include "task_stub.h"
#include <vector>
#include "ccu_instr_info.h"
#include "ccu_task_param.h"
#include "ccu_ins.h"
#include "task_def.h"
namespace Hccl {
extern Hccl::Instruction* g_ccuIns;
extern std::map<const Hccl::Instruction*, std::vector<Hccl::CcuRep::CcuInstrInfo>> g_ccuIns2MicroCode;
}
namespace checker {
constexpr uint32_t MAX_LOOPGROUP_NUM = 1024;
struct LoopInfo {
LoopInfo(TaskNodePtr start, TaskNodePtr end) : loopStart(start), loopEnd(end) {}
TaskNodePtr loopStart;
TaskNodePtr loopEnd;
};
struct BilateralWaitInfo {
std::vector<TaskNodePtr> waitNodes;
};
struct BilateralPostInfo {
std::vector<TaskNodePtr> asyncNodes;
};
struct BilateralNode {
BilateralNode(TaskNodePtr asyncNode, TaskNodePtr wait, TaskNodePtr post) : asyncNode(asyncNode), backwardWait(wait), forwardPost(post) {}
TaskNodePtr backwardWait{nullptr};
TaskNodePtr forwardPost{nullptr};
TaskNodePtr asyncNode;
};
class TaskStubCcuGraph : public TaskStub {
public:
TaskStubCcuGraph(const Hccl::Instruction &ins, RankId rank);
TaskStubCcuGraph(RankId rank) : TaskStub(TaskTypeStub::CCU_GRAPH), rankId(rank) {
ccuHeadTaskNode = new TaskNode(nullptr, -1, 0, 0);
toDeleteTaskNode_.push_back(ccuHeadTaskNode);
}
TaskStubCcuGraph(const TaskStubCcuGraph *ccuTask);
~TaskStubCcuGraph();
std::string Describe() const override;
void GetSqe(uint32_t queId, uint16_t sqeArgsId, uint64_t& argVal);
void GetDieId(uint32_t queId, uint32_t& dieId);
RankId GetRankId();
RankId rankId;
std::string des;
std::vector<Hccl::CcuRep::CcuInstrInfo> instrInfo;
std::vector<std::vector<Hccl::CcuTaskParam>> ccuParams;
std::vector<u32> ccuParamIndexs;
std::vector<u32> microCodePosInQue;
std::vector<u32> startInstrIdInQue;
std::vector<bool> instrQueStatus;
std::vector<TaskNode*> tailNodes;
TaskNode* ccuHeadTaskNode = nullptr;
bool isGenGraphed = false;
uint32_t queueNum_{0};
uint32_t loopGroupIdx = 0;
std::array<uint32_t, MAX_LOOPGROUP_NUM> loopIdx{};
std::vector<std::vector<LoopInfo>> loopGroupInfo_;
std::vector<TaskNodePtr> parallelNodes_;
std::map<TaskNodePtr, TaskNodePtr> localPostWaitPairs_;
std::vector<BilateralWaitInfo> waitInfoTmp_;
std::vector<BilateralPostInfo> postInfoTmp_;
std::vector<std::map<TaskNodePtr, TaskNodePtr>> bilateralPart1_;
std::vector<std::map<TaskNodePtr, TaskNodePtr>> bilateralPart2_;
std::vector<std::vector<BilateralNode>> bilateralNodes_;
std::vector<TaskStub*> toDeleteTask_;
std::vector<TaskNodePtr> toDeleteTaskNode_;
};
class TaskStubSubGraphEnd : public TaskStub {
public:
TaskStubSubGraphEnd(TaskNodePtr node);
std::string Describe() const override;
TaskNodePtr subGraphNode = nullptr;
};
}
#endif