已关闭
[Requirement|需求建议]: 统一 Runtime Task 资源管理公共接口并收敛平台强转 #752
daijinling创建于 7月17日关闭于 1 天前
7月17日 添加了label:requirement
7月17日 关联了pull request:refactor: 统一 Runtime Task 资源申请与回收接口,收敛选路(#752)
7月17日 修改了issue 的描述
8月3日 修改了issue 的描述
27 天前 修改了issue 的描述
Ddaijinling
25 天前 修改标题为 “[Requirement|需求建议]: 统一 Runtime Task 资源管理公共接口并收敛平台强转”,原标题为“[Requirement|需求建议]: 统一 Runtime Task 资源申请与回收接口(收敛选路)”
25 天前 修改标题为 “[Requirement|需求建议]: 统一 Runtime Task 资源管理公共接口并收敛平台强转”,原标题为“[Requirement|需求建议]: 统一 Runtime Task 资源申请与回收接口(收敛选路)”
24 天前 修改了issue 的描述
24 天前 修改了issue 的描述
18 天前 修改了issue 的描述
1 天前 关闭了 issue
1 天前 issue状态由 进行中 改变为 已完成
1 天前 添加了label:resolved
[Requirement|需求建议]: 统一 Runtime Task 资源管理公共接口并收敛平台强转
Background(背景信息)
Runtime 中
TaskInfo的申请、查询、正常完成回收和提交失败回退分布在 A2/A3、A5、DQS、XPU 等不同资源模型中。Stream::taskResMang_的静态类型已经是TaskResManage*,A5/XPU 使用的TaskResManageDavid也继承自该基类,但公共查询和资源状态接口尚未完全在基类统一:GetTaskInfo、ResetTaskRes等已有虚函数仍有调用点先转换为TaskResManageDavid*再调用。因此先完成
TaskResManage公共成员的多态归一:公共状态和查询通过基类指针调用,由实际对象选择 A2/A3 环或 A5/XPU A 环;平台专用修改操作继续留在TaskResManageDavid。本需求不改变现有 Task 申请、回收和 SQE 提交流程。Origin(信息来源)
Runtime Task 资源管理架构演进与可维护性治理。
Benefit / Necessity(价值/作用)
TaskResManage公共查询和状态接口,调用方不再为了访问同义成员依赖TaskResManageDavid,降低平台实现对 core 调用链的渗透。pos + sqeNumA 环的既有语义,通过虚分派复用调用方式而不混淆底层模型。GetTaskPosHead、GetTaskPosTail与公共 head/tail 的同义命名,减少后续调用点选择和维护成本。Design(设计方案)
公共接口
在
TaskResManage中统一以下虚接口:virtual TaskInfo* GetTaskInfo(uint32_t taskId) const; virtual void ResetTaskRes(); virtual uint16_t GetResHead() const; virtual uint16_t GetResTail() const; virtual void GetHeadTail(uint16_t& head, uint16_t& tail) const; virtual bool IsEmpty() const; virtual uint16_t GetPendingNum();A2/A3 默认实现读取
taskResHead_、taskResTail_,pending 按(tail + pool - head) % pool计算;GetTaskInfo继续按完整 Task ID 校验有效区间、保存 ID 和0xFFFF无效值。TaskResManageDavidoverride 资源状态接口并直接读取taskResAHead_、taskResATail_。一个 A5/XPU Task 可占用多个连续 SQ 位置,GetTaskInfo仍支持从任一占用位置反查首pos的完整TaskInfo。旧GetTaskPosHead、GetTaskPosTail删除,统一使用GetResHead、GetResTail。调用点迁移
DavidStream的 TearDown、SQ 位置、等待/完成判断、延迟回收、资源清理和 Task 查询统一通过taskResMang_调用公共接口。专用接口边界
以下接口不提升到基类,调用点可保留一次明确的
TaskResManageDavid*转换:AllocTaskInfoAndPosRecycleTaskInfo(pos, sqeNum)RollbackTailIsRecyclePosValidGetAllocNum这些接口会修改 A 环或依赖多 SQE、最近一次分配等专用状态,A2/A3 没有等价契约,不能通过空实现或无效 override 归一。
实现范围
本次只实施
TaskResManage成员函数多态归一。以下内容保持不变:Stream::AllocTask和各产品 TaskInfo 申请来源。taskSn、pos、sqeNum、内存布局和对外 API。测试设计
TaskResManage*覆盖空、满、跨零点、pending、完整 ID、0xFFFF、位置复用和 STARS head 推进。pos、head/tail/pending、回收和 reset。TaskResManageDavid转换,保留项必须调用申请、回收、回退、位置校验或分配计数等专用成员。Implementation / Acceptance(实现与验收)
对应 PR:https://gitcode.com/cann/runtime/merge_requests/3707
18fbb0326f72bd3ed68ab600f066d7d832752b32bash build.shdocs/zh/design/modules/task/task.md类图与当前接口一致