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

现象

unique_dim 走 AICore 实现时,在「numInp 较小 + 单行较长」的场景下性能很差,甚至比 AICPU 实现还慢。

复现(Ascend950):torch.unique(x, dim=-3, sorted=True, return_inverse=True, return_counts=True),x[1, 131073, 10] int8。

  • AICore UniqueDim 设备 kernel(msprof Task Duration):~1984 us
  • 端到端 ~2.36 ms/call,而 AICPU UniqueWithCountsExt2 仅 ~0.54 ms/call(AICore 反慢 ~4.4×)
  • N 扫描:N≤16 时耗时基本恒定在 ~2.2ms(说明与 numInp 无关),N=1024 才反超 AICPU。

根因

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);
  • 逐元素 GM 拷贝(valueOut[..]=inputFlat[..]),且每个元素重复读 compactKeys[] + 逐元素 div/mod。

即大行长数据被单核逐元素搬,带宽严重饿死。SIMT/带宽未发挥。

修复

PR #6651:gather 改为按 numOut*rowLen 总元素用 SplitWorkByCore 摊到全部核、launch 提到 GM_BLOCK_DIM、每行只读一次 compactKeys。kernel ~1984us → ~40us,各 N 全面反超 AICPU。

likedislike
chenxingyu18成员
6月27日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
6月27日 将 chenxingyu18 设为负责人
Cchenxingyu18成员
6月27日 关联了pull request:perf(unique_dim): 优化 gather 并行度与拷贝粒度,小N/长行 kernel 1984us→40us (9.1.0)
CANN-robotCANN-robot成员
6月29日 关闭了 issue
CANN-robotCANN-robot成员
6月29日 添加了label:resolved
tangweiwei2成员
8月11日 评论:

由于长期未处理,PR先关闭处理,如需要重新打开,请自行操作PR

likedislike