文件最后提交记录最后更新时间
Feat: 新增面向arch35的aclblasScopy接口 Co-authored-by: Twoliges<3050253424@qq.com> # message auto-generated for no-merge-commit merge: !182 merge aclblasScopy into master Feat: 新增面向arch35的aclblasScopy接口 Created-by: Twoliges Commit-by: Twoliges Merged-by: cann-robot Description: 为 arch35 (ascend950) 新增 aclblasScopy 算子实现。 scopy 是 BLAS Level 1 向量拷贝算子,执行 Y = X 操作。基于 SIMD membase 模型,按 incx/incy 自适应选择三条执行路径: - **纯连续路径(incx=1 && incy=1):** DataCopy 整块搬运 + DataCopyPad 尾部处理,双缓冲 Prime-Pump-Drain - **混合路径(incx=1 || incy=1):** 单侧 DataCopy 不限量 + 单侧 DataCopyPad Compact 分批写 - **纯离散路径(incx≠1 && incy≠1):** 双侧 Compact,受 blockCount ≤ 4095 硬件限制 异号步长(incx<0 XOR incy<0)时使用 Gather + 预计算偏移表做全局 UB 内元素重排,偏移表优先从 handle workspace 加载(DataCopy 一次搬运,较标量循环加速 3.1x),不可用时 Kernel Init 自算。Host 侧 LaunchScopyKernel 返回 void,保持异步。 精度标准为位精确(MARE=0, MERE=0),37 个测试用例全部通过(含多 tile/多核负步长场景) **交付物清单:** | 类别 | 文件 | 说明 | |------|------|------| | Host | blas/copy/scopy/arch35/scopy_host.cpp | 参数校验、Tiling 计算、负步长指针调整、Kernel 启动 | | Kernel | blas/copy/scopy/arch35/scopy_kernel.cpp | 三路径 Kernel:连续双缓冲 + 混合 Compact分批 + 纯离散 Compact + Gather 逆序 | | TilingData | blas/copy/scopy/arch35/scopy_tiling_data.h | ScopyTilingData 结构体定义 | | 测试工程 | test/copy/scopy/ | 33 个用例(7 L0 + 26 L1),GTest + CSV 框架 | | README | blas/copy/scopy/README.md | 算子说明与调用示例 | ## 关联的Issue https://gitcode.com/cann/ops-blas/issues/177 ## 测试 **功能测试(全部通过):** - 编译验证:bash build.sh --ops=scopy --soc=ascend950 --run 编译通过 - 全量测试:37 用例全部通过,覆盖连续/离散/倒序/异号步长/多tile/多核/非对齐/边界/异常 - 精度验证:PrecisionMode::EXACT,NPU 输出与 CPU Golden(cblas_scopy)二进制逐位一致,MARE=0, MERE=0 **性能验收:** - 连续路径 128MB 写带宽 567 GB/s(达标,目标 >= 500 GB/s) - 负步长大 N(N=65536 incx=-1)耗时 168 us(较修复前 218ms 改善约 1298x) - 连续路径固定开销约 53 us(达标,目标 < 100 us) - 离散路径 N=1000 耗时 56-57 us(达标,目标 <= 200 us) - 负步长 kernel ~370us(DataCopy)vs ~1160us(标量循环),3.1x 加速。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!18219 小时前