已关闭
[unique_dim] AICore gather 在小N/长行场景性能差(kernel ~1984us),反被 AICPU 反超 #3619
chenxingyu18创建于 6月27日关闭于 6月29日
chenxingyu18
6月27日 评论:
6月27日 评论:
/assign


6月27日 将 chenxingyu18 设为负责人
Cchenxingyu18
6月27日 关联了pull request:perf(unique_dim): 优化 gather 并行度与拷贝粒度,小N/长行 kernel 1984us→40us (9.1.0)
6月27日 关联了pull request:perf(unique_dim): 优化 gather 并行度与拷贝粒度,小N/长行 kernel 1984us→40us (9.1.0)
6月29日 关闭了 issue
6月29日 添加了label:resolved
tangweiwei2
8月11日 评论:
8月11日 评论:
由于长期未处理,PR先关闭处理,如需要重新打开,请自行操作PR


现象
unique_dim走 AICore 实现时,在「numInp 较小 + 单行较长」的场景下性能很差,甚至比 AICPU 实现还慢。复现(Ascend950):
torch.unique(x, dim=-3, sorted=True, return_inverse=True, return_counts=True),x为[1, 131073, 10]int8。UniqueDim设备 kernel(msprof Task Duration):~1984 usUniqueWithCountsExt2仅 ~0.54 ms/call(AICore 反慢 ~4.4×)根因
Phase6
UniqueDetectAndGather的 gather:outPerCore=CeilDiv(numOut,coreNum)),numOut<coreNum时只有 1 个核搬数据(numInp=1 → 仅 core 0);LAUNCH_BOUND(SIMT_BLOCK_DIM)=256(transpose/copy 用的是GM_BLOCK_DIM=2048);valueOut[..]=inputFlat[..]),且每个元素重复读compactKeys[]+ 逐元素 div/mod。即大行长数据被单核逐元素搬,带宽严重饿死。SIMT/带宽未发挥。
修复
PR #6651:gather 改为按
numOut*rowLen总元素用SplitWorkByCore摊到全部核、launch 提到GM_BLOCK_DIM、每行只读一次compactKeys。kernel ~1984us → ~40us,各 N 全面反超 AICPU。