已关闭
[Requirement|需求建议]: moe_init_routing_v3算子新增计数排序非全载模版 #4935
xiapengcheng5创建于 2 天前关闭于 2 天前
2 天前 添加了label:requirement
游震
2 天前 评论:
2 天前 评论:
/assign @guoqiuhao


2 天前 将 guoqiuhao 设为负责人
2 天前 修改了issue 的描述
2 天前 修改了issue 的描述
xiapengcheng5
2 天前 评论:
2 天前 评论:
/assign @xiapengcheng5


2 天前 将 xiapengcheng5 设为负责人,移除负责人 guoqiuhao
2 天前 关闭了 issue
2 天前 添加了label:resolved
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
moe_init_routing算子用于MOE架构中的多专家并行场景,根据topk选择专家的结果将token路由到对应专家并进行后续FFN计算处理。
A3上MoeInitRouting算子使用计数排序优化,对A5同样有收益,相关方案同步到A5。
Benefit / Necessity (价值/作用)
moe_init_routing_v3算子需要对专家进行排序,计数排序方案在有效专家较少的场景下有较好的性能收益。

计数排序的非全载的准入条件是:
Design(设计方案)
void Process() {
if (blockIdx_ >= filterNeedCoreNum_) { SyncAll(); SyncAll(); SyncAll(); return; } // 超核须参与全次数屏障
FilterAndCountChunked(); // Phase A:4096-chunk 过滤 + 计数
WriteExpertCountToWorkspace(); // 本核 expertCount → GM
SyncAll(); // ①
ComputeGlobalOffset(); // Phase B:批式核间归约 + prefix sum + 逐专家全局起始
ScatterToSortedRowIdx(); // SIMT 离散搬出 → sortedRowIdx / expandedRowIdx
SyncAll(); // ②
if (dropPadMode_ == DROP_PAD_MODE) {
WriteExpandedExpertIdx(); // 桥接:expandedExpertIdx(dropPad)
WriteExpertIdxValue(); // 桥接:expertIdxValue(dropPad,core0)
} else {
WriteExpertTotalCount(); // 桥接:expertTotalCount(非 dropPad,core0)
}
if (expertTokensNumFlag_ != NONE) WriteExpertTokens(); // core0
SyncAll(); // ③
// 返回后 apt.cpp 不 return,继续 Stage2/3/5
}