| feat(slogdet): 910b新增算子实现slogdet Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3064 merge slogdet-1-pr-1 into master feat(slogdet): 910b新增算子实现slogdet Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 在 experimental/math/slogdet/ 新增 ascend910b 的 Slogdet 算子: - 自带 AscendC AICore Kernel/Tiling 的 registry-invoke 实现(经 aclnn 两段式接口 aclnnSlogdet 调用,aclnn 为接口层、AscendC Kernel 为计算实现),区别于既有 math/slogdet(无 Kernel、转发到 AICPU LogMatrixDeterminant 的 aclnn-only 壳)。 - 带部分主元 LU 计算双输出 (sign, log|det|),双 TilingKey(FULL/BLOCKED)覆盖小/中/大 n 与 batch,仅 fp32。 - 含 op_host(def/tiling/infershape)、op_kernel、op_api(aclnn 两段式封装)、UT、ST、调用示例、README 与 aclnn API 文档。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1750 ## 测试 - UT 47/47:op_host tiling(FULL/BLOCKED 分支、N_RESIDENT_MAX 边界、epsSingular、n>4095 拒绝)+ infershape + op_api 参数校验。 - C++ ST 35/35、PyTorch ST 35/35(真机 910B3;标杆 torch.linalg.slogdet CPU):精度 fp32 双万分之一(rtol/atol=1e-4,-inf 精确、sign 精确含 -0.0==0.0),覆盖正/负行列式、奇异/秩亏、病态、batch/多维 batch、高维 reshape、large-n(BLOCKED)。 - 确定性:同输入 50× bitwise 一致(FULL 与 BLOCKED 均覆盖)。 - 二级冒烟通过;plog 实证调用命中自定义 SlogdetAiCore(AICore)、非上游 AICPU 转发。 ## 文档更新 更新 README.md、docs/aclnnSlogdet.md(aclnn API 参考 + 调用示例)。 ## 性能对比 | 场景 | 更快 | 量级 | 主因 | |------|--------|------|------| | **小单矩阵**(n=4,16) | **AICore 更快** | n=4: ~4.0×;n=16: ~1.8× | 这两者耗时都被 host dispatch 主导;AICPU 还要额外调度/排布 AICPU task,固定开销更大 | | **中大单矩阵**(n=64~512) | **AICPU 更快** | AICore 仅为 AICPU 的 0.56~0.83×(即 AICPU 快 1.2~1.8×) | 单矩阵 LU 是 **O(n³) 串行依赖**,AICore 单矩阵 BlockDim=1(无并行可摊),而 AICPU 是成熟优化的标量/SIMD CPU 实现 | | **batch-heavy**([64,32,32]、[256,16,16]) | **AICore 更快** | **~10–12×** | AICore 把 batch 切到多核并行(BlockDim 随 batch 增大),AICPU 仍近似串行逐矩阵 | ## 对比表(host wall-clock,真机 910B3,warmup=50 iters=200,3 轮一致) 下表为 3 轮独立 sweep 的 **median 中位数**(small-n 同时给 min,因 <20us 受 host 调度抖动)。 | Shape | 自定义 AICore | 内置 AICPU | 加速比(AICPU/AICore) | 是否 batch | 备注(路径) | |-------|--------------|------------|----------------------|-----------|-------------| | **[4,4]** | **11.6 us** (min 9.4) | 46.4 us (min 36.6) | **3.99×** | 否 | FULL;两者 dispatch-bound,AICPU 固定开销更大 | | **[16,16]** | **29.5 us** (min 21.0) | 50.9 us (min 40.4) | **1.72×** | 否 | FULL | | **[64,64]** | 156.4 us | **107.1 us** | 0.69× | 否 | FULL;单矩阵 O(n³) 串行,AICore 单核劣势开始显现 | | **[128,128]** | 550.6 us | **319.7 us** | 0.58× | 否 | BLOCKED;AICPU 快 1.7× | | **[256,256]** | 3102.6 us (3.10 ms) | **1995.1 us (2.00 ms)** | 0.64× | 否 | BLOCKED;AICPU 快 1.6× | | **[512,512]** | 14006.8 us (14.0 ms) | **11657.7 us (11.7 ms)** | 0.83× | 否 | BLOCKED;n 越大差距收窄(计算量摊薄固定开销) | | **[64,32,32]** | **96.7 us** | 984.9 us | **10.19×** | 是 | FULL/batch;64 个 32×32,AICore 多核并行 | | **[256,16,16]** | **106.1 us** | 1169.7 us | **11.02×** | 是 | FULL/batch;256 个 16×16,AICPU 近串行逐矩阵 | > 加速比 = 内置 AICPU 耗时 / 自定义 AICore 耗时;>1 表示 AICore 更快,<1 表示 AICPU 更快。 > min 口径的加速比与 median 一致([4,4] 3.88×、[64,32,32] 10.42×、[256,16,16] 12.16×) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3064 | 2 个月前 |
| feat(slogdet): 910b新增算子实现slogdet Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3064 merge slogdet-1-pr-1 into master feat(slogdet): 910b新增算子实现slogdet Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 在 experimental/math/slogdet/ 新增 ascend910b 的 Slogdet 算子: - 自带 AscendC AICore Kernel/Tiling 的 registry-invoke 实现(经 aclnn 两段式接口 aclnnSlogdet 调用,aclnn 为接口层、AscendC Kernel 为计算实现),区别于既有 math/slogdet(无 Kernel、转发到 AICPU LogMatrixDeterminant 的 aclnn-only 壳)。 - 带部分主元 LU 计算双输出 (sign, log|det|),双 TilingKey(FULL/BLOCKED)覆盖小/中/大 n 与 batch,仅 fp32。 - 含 op_host(def/tiling/infershape)、op_kernel、op_api(aclnn 两段式封装)、UT、ST、调用示例、README 与 aclnn API 文档。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1750 ## 测试 - UT 47/47:op_host tiling(FULL/BLOCKED 分支、N_RESIDENT_MAX 边界、epsSingular、n>4095 拒绝)+ infershape + op_api 参数校验。 - C++ ST 35/35、PyTorch ST 35/35(真机 910B3;标杆 torch.linalg.slogdet CPU):精度 fp32 双万分之一(rtol/atol=1e-4,-inf 精确、sign 精确含 -0.0==0.0),覆盖正/负行列式、奇异/秩亏、病态、batch/多维 batch、高维 reshape、large-n(BLOCKED)。 - 确定性:同输入 50× bitwise 一致(FULL 与 BLOCKED 均覆盖)。 - 二级冒烟通过;plog 实证调用命中自定义 SlogdetAiCore(AICore)、非上游 AICPU 转发。 ## 文档更新 更新 README.md、docs/aclnnSlogdet.md(aclnn API 参考 + 调用示例)。 ## 性能对比 | 场景 | 更快 | 量级 | 主因 | |------|--------|------|------| | **小单矩阵**(n=4,16) | **AICore 更快** | n=4: ~4.0×;n=16: ~1.8× | 这两者耗时都被 host dispatch 主导;AICPU 还要额外调度/排布 AICPU task,固定开销更大 | | **中大单矩阵**(n=64~512) | **AICPU 更快** | AICore 仅为 AICPU 的 0.56~0.83×(即 AICPU 快 1.2~1.8×) | 单矩阵 LU 是 **O(n³) 串行依赖**,AICore 单矩阵 BlockDim=1(无并行可摊),而 AICPU 是成熟优化的标量/SIMD CPU 实现 | | **batch-heavy**([64,32,32]、[256,16,16]) | **AICore 更快** | **~10–12×** | AICore 把 batch 切到多核并行(BlockDim 随 batch 增大),AICPU 仍近似串行逐矩阵 | ## 对比表(host wall-clock,真机 910B3,warmup=50 iters=200,3 轮一致) 下表为 3 轮独立 sweep 的 **median 中位数**(small-n 同时给 min,因 <20us 受 host 调度抖动)。 | Shape | 自定义 AICore | 内置 AICPU | 加速比(AICPU/AICore) | 是否 batch | 备注(路径) | |-------|--------------|------------|----------------------|-----------|-------------| | **[4,4]** | **11.6 us** (min 9.4) | 46.4 us (min 36.6) | **3.99×** | 否 | FULL;两者 dispatch-bound,AICPU 固定开销更大 | | **[16,16]** | **29.5 us** (min 21.0) | 50.9 us (min 40.4) | **1.72×** | 否 | FULL | | **[64,64]** | 156.4 us | **107.1 us** | 0.69× | 否 | FULL;单矩阵 O(n³) 串行,AICore 单核劣势开始显现 | | **[128,128]** | 550.6 us | **319.7 us** | 0.58× | 否 | BLOCKED;AICPU 快 1.7× | | **[256,256]** | 3102.6 us (3.10 ms) | **1995.1 us (2.00 ms)** | 0.64× | 否 | BLOCKED;AICPU 快 1.6× | | **[512,512]** | 14006.8 us (14.0 ms) | **11657.7 us (11.7 ms)** | 0.83× | 否 | BLOCKED;n 越大差距收窄(计算量摊薄固定开销) | | **[64,32,32]** | **96.7 us** | 984.9 us | **10.19×** | 是 | FULL/batch;64 个 32×32,AICore 多核并行 | | **[256,16,16]** | **106.1 us** | 1169.7 us | **11.02×** | 是 | FULL/batch;256 个 16×16,AICPU 近串行逐矩阵 | > 加速比 = 内置 AICPU 耗时 / 自定义 AICore 耗时;>1 表示 AICore 更快,<1 表示 AICPU 更快。 > min 口径的加速比与 median 一致([4,4] 3.88×、[64,32,32] 10.42×、[256,16,16] 12.16×) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3064 | 2 个月前 |
| feat(slogdet): 910b新增算子实现slogdet Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3064 merge slogdet-1-pr-1 into master feat(slogdet): 910b新增算子实现slogdet Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 在 experimental/math/slogdet/ 新增 ascend910b 的 Slogdet 算子: - 自带 AscendC AICore Kernel/Tiling 的 registry-invoke 实现(经 aclnn 两段式接口 aclnnSlogdet 调用,aclnn 为接口层、AscendC Kernel 为计算实现),区别于既有 math/slogdet(无 Kernel、转发到 AICPU LogMatrixDeterminant 的 aclnn-only 壳)。 - 带部分主元 LU 计算双输出 (sign, log|det|),双 TilingKey(FULL/BLOCKED)覆盖小/中/大 n 与 batch,仅 fp32。 - 含 op_host(def/tiling/infershape)、op_kernel、op_api(aclnn 两段式封装)、UT、ST、调用示例、README 与 aclnn API 文档。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1750 ## 测试 - UT 47/47:op_host tiling(FULL/BLOCKED 分支、N_RESIDENT_MAX 边界、epsSingular、n>4095 拒绝)+ infershape + op_api 参数校验。 - C++ ST 35/35、PyTorch ST 35/35(真机 910B3;标杆 torch.linalg.slogdet CPU):精度 fp32 双万分之一(rtol/atol=1e-4,-inf 精确、sign 精确含 -0.0==0.0),覆盖正/负行列式、奇异/秩亏、病态、batch/多维 batch、高维 reshape、large-n(BLOCKED)。 - 确定性:同输入 50× bitwise 一致(FULL 与 BLOCKED 均覆盖)。 - 二级冒烟通过;plog 实证调用命中自定义 SlogdetAiCore(AICore)、非上游 AICPU 转发。 ## 文档更新 更新 README.md、docs/aclnnSlogdet.md(aclnn API 参考 + 调用示例)。 ## 性能对比 | 场景 | 更快 | 量级 | 主因 | |------|--------|------|------| | **小单矩阵**(n=4,16) | **AICore 更快** | n=4: ~4.0×;n=16: ~1.8× | 这两者耗时都被 host dispatch 主导;AICPU 还要额外调度/排布 AICPU task,固定开销更大 | | **中大单矩阵**(n=64~512) | **AICPU 更快** | AICore 仅为 AICPU 的 0.56~0.83×(即 AICPU 快 1.2~1.8×) | 单矩阵 LU 是 **O(n³) 串行依赖**,AICore 单矩阵 BlockDim=1(无并行可摊),而 AICPU 是成熟优化的标量/SIMD CPU 实现 | | **batch-heavy**([64,32,32]、[256,16,16]) | **AICore 更快** | **~10–12×** | AICore 把 batch 切到多核并行(BlockDim 随 batch 增大),AICPU 仍近似串行逐矩阵 | ## 对比表(host wall-clock,真机 910B3,warmup=50 iters=200,3 轮一致) 下表为 3 轮独立 sweep 的 **median 中位数**(small-n 同时给 min,因 <20us 受 host 调度抖动)。 | Shape | 自定义 AICore | 内置 AICPU | 加速比(AICPU/AICore) | 是否 batch | 备注(路径) | |-------|--------------|------------|----------------------|-----------|-------------| | **[4,4]** | **11.6 us** (min 9.4) | 46.4 us (min 36.6) | **3.99×** | 否 | FULL;两者 dispatch-bound,AICPU 固定开销更大 | | **[16,16]** | **29.5 us** (min 21.0) | 50.9 us (min 40.4) | **1.72×** | 否 | FULL | | **[64,64]** | 156.4 us | **107.1 us** | 0.69× | 否 | FULL;单矩阵 O(n³) 串行,AICore 单核劣势开始显现 | | **[128,128]** | 550.6 us | **319.7 us** | 0.58× | 否 | BLOCKED;AICPU 快 1.7× | | **[256,256]** | 3102.6 us (3.10 ms) | **1995.1 us (2.00 ms)** | 0.64× | 否 | BLOCKED;AICPU 快 1.6× | | **[512,512]** | 14006.8 us (14.0 ms) | **11657.7 us (11.7 ms)** | 0.83× | 否 | BLOCKED;n 越大差距收窄(计算量摊薄固定开销) | | **[64,32,32]** | **96.7 us** | 984.9 us | **10.19×** | 是 | FULL/batch;64 个 32×32,AICore 多核并行 | | **[256,16,16]** | **106.1 us** | 1169.7 us | **11.02×** | 是 | FULL/batch;256 个 16×16,AICPU 近串行逐矩阵 | > 加速比 = 内置 AICPU 耗时 / 自定义 AICore 耗时;>1 表示 AICore 更快,<1 表示 AICPU 更快。 > min 口径的加速比与 median 一致([4,4] 3.88×、[64,32,32] 10.42×、[256,16,16] 12.16×) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3064 | 2 个月前 |
| feat(slogdet): 910b新增算子实现slogdet Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3064 merge slogdet-1-pr-1 into master feat(slogdet): 910b新增算子实现slogdet Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 在 experimental/math/slogdet/ 新增 ascend910b 的 Slogdet 算子: - 自带 AscendC AICore Kernel/Tiling 的 registry-invoke 实现(经 aclnn 两段式接口 aclnnSlogdet 调用,aclnn 为接口层、AscendC Kernel 为计算实现),区别于既有 math/slogdet(无 Kernel、转发到 AICPU LogMatrixDeterminant 的 aclnn-only 壳)。 - 带部分主元 LU 计算双输出 (sign, log|det|),双 TilingKey(FULL/BLOCKED)覆盖小/中/大 n 与 batch,仅 fp32。 - 含 op_host(def/tiling/infershape)、op_kernel、op_api(aclnn 两段式封装)、UT、ST、调用示例、README 与 aclnn API 文档。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1750 ## 测试 - UT 47/47:op_host tiling(FULL/BLOCKED 分支、N_RESIDENT_MAX 边界、epsSingular、n>4095 拒绝)+ infershape + op_api 参数校验。 - C++ ST 35/35、PyTorch ST 35/35(真机 910B3;标杆 torch.linalg.slogdet CPU):精度 fp32 双万分之一(rtol/atol=1e-4,-inf 精确、sign 精确含 -0.0==0.0),覆盖正/负行列式、奇异/秩亏、病态、batch/多维 batch、高维 reshape、large-n(BLOCKED)。 - 确定性:同输入 50× bitwise 一致(FULL 与 BLOCKED 均覆盖)。 - 二级冒烟通过;plog 实证调用命中自定义 SlogdetAiCore(AICore)、非上游 AICPU 转发。 ## 文档更新 更新 README.md、docs/aclnnSlogdet.md(aclnn API 参考 + 调用示例)。 ## 性能对比 | 场景 | 更快 | 量级 | 主因 | |------|--------|------|------| | **小单矩阵**(n=4,16) | **AICore 更快** | n=4: ~4.0×;n=16: ~1.8× | 这两者耗时都被 host dispatch 主导;AICPU 还要额外调度/排布 AICPU task,固定开销更大 | | **中大单矩阵**(n=64~512) | **AICPU 更快** | AICore 仅为 AICPU 的 0.56~0.83×(即 AICPU 快 1.2~1.8×) | 单矩阵 LU 是 **O(n³) 串行依赖**,AICore 单矩阵 BlockDim=1(无并行可摊),而 AICPU 是成熟优化的标量/SIMD CPU 实现 | | **batch-heavy**([64,32,32]、[256,16,16]) | **AICore 更快** | **~10–12×** | AICore 把 batch 切到多核并行(BlockDim 随 batch 增大),AICPU 仍近似串行逐矩阵 | ## 对比表(host wall-clock,真机 910B3,warmup=50 iters=200,3 轮一致) 下表为 3 轮独立 sweep 的 **median 中位数**(small-n 同时给 min,因 <20us 受 host 调度抖动)。 | Shape | 自定义 AICore | 内置 AICPU | 加速比(AICPU/AICore) | 是否 batch | 备注(路径) | |-------|--------------|------------|----------------------|-----------|-------------| | **[4,4]** | **11.6 us** (min 9.4) | 46.4 us (min 36.6) | **3.99×** | 否 | FULL;两者 dispatch-bound,AICPU 固定开销更大 | | **[16,16]** | **29.5 us** (min 21.0) | 50.9 us (min 40.4) | **1.72×** | 否 | FULL | | **[64,64]** | 156.4 us | **107.1 us** | 0.69× | 否 | FULL;单矩阵 O(n³) 串行,AICore 单核劣势开始显现 | | **[128,128]** | 550.6 us | **319.7 us** | 0.58× | 否 | BLOCKED;AICPU 快 1.7× | | **[256,256]** | 3102.6 us (3.10 ms) | **1995.1 us (2.00 ms)** | 0.64× | 否 | BLOCKED;AICPU 快 1.6× | | **[512,512]** | 14006.8 us (14.0 ms) | **11657.7 us (11.7 ms)** | 0.83× | 否 | BLOCKED;n 越大差距收窄(计算量摊薄固定开销) | | **[64,32,32]** | **96.7 us** | 984.9 us | **10.19×** | 是 | FULL/batch;64 个 32×32,AICore 多核并行 | | **[256,16,16]** | **106.1 us** | 1169.7 us | **11.02×** | 是 | FULL/batch;256 个 16×16,AICPU 近串行逐矩阵 | > 加速比 = 内置 AICPU 耗时 / 自定义 AICore 耗时;>1 表示 AICore 更快,<1 表示 AICPU 更快。 > min 口径的加速比与 median 一致([4,4] 3.88×、[64,32,32] 10.42×、[256,16,16] 12.16×) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3064 | 2 个月前 |
| feat(slogdet): 910b新增算子实现slogdet Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3064 merge slogdet-1-pr-1 into master feat(slogdet): 910b新增算子实现slogdet Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 在 experimental/math/slogdet/ 新增 ascend910b 的 Slogdet 算子: - 自带 AscendC AICore Kernel/Tiling 的 registry-invoke 实现(经 aclnn 两段式接口 aclnnSlogdet 调用,aclnn 为接口层、AscendC Kernel 为计算实现),区别于既有 math/slogdet(无 Kernel、转发到 AICPU LogMatrixDeterminant 的 aclnn-only 壳)。 - 带部分主元 LU 计算双输出 (sign, log|det|),双 TilingKey(FULL/BLOCKED)覆盖小/中/大 n 与 batch,仅 fp32。 - 含 op_host(def/tiling/infershape)、op_kernel、op_api(aclnn 两段式封装)、UT、ST、调用示例、README 与 aclnn API 文档。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1750 ## 测试 - UT 47/47:op_host tiling(FULL/BLOCKED 分支、N_RESIDENT_MAX 边界、epsSingular、n>4095 拒绝)+ infershape + op_api 参数校验。 - C++ ST 35/35、PyTorch ST 35/35(真机 910B3;标杆 torch.linalg.slogdet CPU):精度 fp32 双万分之一(rtol/atol=1e-4,-inf 精确、sign 精确含 -0.0==0.0),覆盖正/负行列式、奇异/秩亏、病态、batch/多维 batch、高维 reshape、large-n(BLOCKED)。 - 确定性:同输入 50× bitwise 一致(FULL 与 BLOCKED 均覆盖)。 - 二级冒烟通过;plog 实证调用命中自定义 SlogdetAiCore(AICore)、非上游 AICPU 转发。 ## 文档更新 更新 README.md、docs/aclnnSlogdet.md(aclnn API 参考 + 调用示例)。 ## 性能对比 | 场景 | 更快 | 量级 | 主因 | |------|--------|------|------| | **小单矩阵**(n=4,16) | **AICore 更快** | n=4: ~4.0×;n=16: ~1.8× | 这两者耗时都被 host dispatch 主导;AICPU 还要额外调度/排布 AICPU task,固定开销更大 | | **中大单矩阵**(n=64~512) | **AICPU 更快** | AICore 仅为 AICPU 的 0.56~0.83×(即 AICPU 快 1.2~1.8×) | 单矩阵 LU 是 **O(n³) 串行依赖**,AICore 单矩阵 BlockDim=1(无并行可摊),而 AICPU 是成熟优化的标量/SIMD CPU 实现 | | **batch-heavy**([64,32,32]、[256,16,16]) | **AICore 更快** | **~10–12×** | AICore 把 batch 切到多核并行(BlockDim 随 batch 增大),AICPU 仍近似串行逐矩阵 | ## 对比表(host wall-clock,真机 910B3,warmup=50 iters=200,3 轮一致) 下表为 3 轮独立 sweep 的 **median 中位数**(small-n 同时给 min,因 <20us 受 host 调度抖动)。 | Shape | 自定义 AICore | 内置 AICPU | 加速比(AICPU/AICore) | 是否 batch | 备注(路径) | |-------|--------------|------------|----------------------|-----------|-------------| | **[4,4]** | **11.6 us** (min 9.4) | 46.4 us (min 36.6) | **3.99×** | 否 | FULL;两者 dispatch-bound,AICPU 固定开销更大 | | **[16,16]** | **29.5 us** (min 21.0) | 50.9 us (min 40.4) | **1.72×** | 否 | FULL | | **[64,64]** | 156.4 us | **107.1 us** | 0.69× | 否 | FULL;单矩阵 O(n³) 串行,AICore 单核劣势开始显现 | | **[128,128]** | 550.6 us | **319.7 us** | 0.58× | 否 | BLOCKED;AICPU 快 1.7× | | **[256,256]** | 3102.6 us (3.10 ms) | **1995.1 us (2.00 ms)** | 0.64× | 否 | BLOCKED;AICPU 快 1.6× | | **[512,512]** | 14006.8 us (14.0 ms) | **11657.7 us (11.7 ms)** | 0.83× | 否 | BLOCKED;n 越大差距收窄(计算量摊薄固定开销) | | **[64,32,32]** | **96.7 us** | 984.9 us | **10.19×** | 是 | FULL/batch;64 个 32×32,AICore 多核并行 | | **[256,16,16]** | **106.1 us** | 1169.7 us | **11.02×** | 是 | FULL/batch;256 个 16×16,AICPU 近串行逐矩阵 | > 加速比 = 内置 AICPU 耗时 / 自定义 AICore 耗时;>1 表示 AICore 更快,<1 表示 AICPU 更快。 > min 口径的加速比与 median 一致([4,4] 3.88×、[64,32,32] 10.42×、[256,16,16] 12.16×) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3064 | 2 个月前 |
| feat(slogdet): 910b新增算子实现slogdet Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3064 merge slogdet-1-pr-1 into master feat(slogdet): 910b新增算子实现slogdet Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 在 experimental/math/slogdet/ 新增 ascend910b 的 Slogdet 算子: - 自带 AscendC AICore Kernel/Tiling 的 registry-invoke 实现(经 aclnn 两段式接口 aclnnSlogdet 调用,aclnn 为接口层、AscendC Kernel 为计算实现),区别于既有 math/slogdet(无 Kernel、转发到 AICPU LogMatrixDeterminant 的 aclnn-only 壳)。 - 带部分主元 LU 计算双输出 (sign, log|det|),双 TilingKey(FULL/BLOCKED)覆盖小/中/大 n 与 batch,仅 fp32。 - 含 op_host(def/tiling/infershape)、op_kernel、op_api(aclnn 两段式封装)、UT、ST、调用示例、README 与 aclnn API 文档。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1750 ## 测试 - UT 47/47:op_host tiling(FULL/BLOCKED 分支、N_RESIDENT_MAX 边界、epsSingular、n>4095 拒绝)+ infershape + op_api 参数校验。 - C++ ST 35/35、PyTorch ST 35/35(真机 910B3;标杆 torch.linalg.slogdet CPU):精度 fp32 双万分之一(rtol/atol=1e-4,-inf 精确、sign 精确含 -0.0==0.0),覆盖正/负行列式、奇异/秩亏、病态、batch/多维 batch、高维 reshape、large-n(BLOCKED)。 - 确定性:同输入 50× bitwise 一致(FULL 与 BLOCKED 均覆盖)。 - 二级冒烟通过;plog 实证调用命中自定义 SlogdetAiCore(AICore)、非上游 AICPU 转发。 ## 文档更新 更新 README.md、docs/aclnnSlogdet.md(aclnn API 参考 + 调用示例)。 ## 性能对比 | 场景 | 更快 | 量级 | 主因 | |------|--------|------|------| | **小单矩阵**(n=4,16) | **AICore 更快** | n=4: ~4.0×;n=16: ~1.8× | 这两者耗时都被 host dispatch 主导;AICPU 还要额外调度/排布 AICPU task,固定开销更大 | | **中大单矩阵**(n=64~512) | **AICPU 更快** | AICore 仅为 AICPU 的 0.56~0.83×(即 AICPU 快 1.2~1.8×) | 单矩阵 LU 是 **O(n³) 串行依赖**,AICore 单矩阵 BlockDim=1(无并行可摊),而 AICPU 是成熟优化的标量/SIMD CPU 实现 | | **batch-heavy**([64,32,32]、[256,16,16]) | **AICore 更快** | **~10–12×** | AICore 把 batch 切到多核并行(BlockDim 随 batch 增大),AICPU 仍近似串行逐矩阵 | ## 对比表(host wall-clock,真机 910B3,warmup=50 iters=200,3 轮一致) 下表为 3 轮独立 sweep 的 **median 中位数**(small-n 同时给 min,因 <20us 受 host 调度抖动)。 | Shape | 自定义 AICore | 内置 AICPU | 加速比(AICPU/AICore) | 是否 batch | 备注(路径) | |-------|--------------|------------|----------------------|-----------|-------------| | **[4,4]** | **11.6 us** (min 9.4) | 46.4 us (min 36.6) | **3.99×** | 否 | FULL;两者 dispatch-bound,AICPU 固定开销更大 | | **[16,16]** | **29.5 us** (min 21.0) | 50.9 us (min 40.4) | **1.72×** | 否 | FULL | | **[64,64]** | 156.4 us | **107.1 us** | 0.69× | 否 | FULL;单矩阵 O(n³) 串行,AICore 单核劣势开始显现 | | **[128,128]** | 550.6 us | **319.7 us** | 0.58× | 否 | BLOCKED;AICPU 快 1.7× | | **[256,256]** | 3102.6 us (3.10 ms) | **1995.1 us (2.00 ms)** | 0.64× | 否 | BLOCKED;AICPU 快 1.6× | | **[512,512]** | 14006.8 us (14.0 ms) | **11657.7 us (11.7 ms)** | 0.83× | 否 | BLOCKED;n 越大差距收窄(计算量摊薄固定开销) | | **[64,32,32]** | **96.7 us** | 984.9 us | **10.19×** | 是 | FULL/batch;64 个 32×32,AICore 多核并行 | | **[256,16,16]** | **106.1 us** | 1169.7 us | **11.02×** | 是 | FULL/batch;256 个 16×16,AICPU 近串行逐矩阵 | > 加速比 = 内置 AICPU 耗时 / 自定义 AICore 耗时;>1 表示 AICore 更快,<1 表示 AICPU 更快。 > min 口径的加速比与 median 一致([4,4] 3.88×、[64,32,32] 10.42×、[256,16,16] 12.16×) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3064 | 2 个月前 |
| feat(slogdet): 910b新增算子实现slogdet Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3064 merge slogdet-1-pr-1 into master feat(slogdet): 910b新增算子实现slogdet Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 在 experimental/math/slogdet/ 新增 ascend910b 的 Slogdet 算子: - 自带 AscendC AICore Kernel/Tiling 的 registry-invoke 实现(经 aclnn 两段式接口 aclnnSlogdet 调用,aclnn 为接口层、AscendC Kernel 为计算实现),区别于既有 math/slogdet(无 Kernel、转发到 AICPU LogMatrixDeterminant 的 aclnn-only 壳)。 - 带部分主元 LU 计算双输出 (sign, log|det|),双 TilingKey(FULL/BLOCKED)覆盖小/中/大 n 与 batch,仅 fp32。 - 含 op_host(def/tiling/infershape)、op_kernel、op_api(aclnn 两段式封装)、UT、ST、调用示例、README 与 aclnn API 文档。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1750 ## 测试 - UT 47/47:op_host tiling(FULL/BLOCKED 分支、N_RESIDENT_MAX 边界、epsSingular、n>4095 拒绝)+ infershape + op_api 参数校验。 - C++ ST 35/35、PyTorch ST 35/35(真机 910B3;标杆 torch.linalg.slogdet CPU):精度 fp32 双万分之一(rtol/atol=1e-4,-inf 精确、sign 精确含 -0.0==0.0),覆盖正/负行列式、奇异/秩亏、病态、batch/多维 batch、高维 reshape、large-n(BLOCKED)。 - 确定性:同输入 50× bitwise 一致(FULL 与 BLOCKED 均覆盖)。 - 二级冒烟通过;plog 实证调用命中自定义 SlogdetAiCore(AICore)、非上游 AICPU 转发。 ## 文档更新 更新 README.md、docs/aclnnSlogdet.md(aclnn API 参考 + 调用示例)。 ## 性能对比 | 场景 | 更快 | 量级 | 主因 | |------|--------|------|------| | **小单矩阵**(n=4,16) | **AICore 更快** | n=4: ~4.0×;n=16: ~1.8× | 这两者耗时都被 host dispatch 主导;AICPU 还要额外调度/排布 AICPU task,固定开销更大 | | **中大单矩阵**(n=64~512) | **AICPU 更快** | AICore 仅为 AICPU 的 0.56~0.83×(即 AICPU 快 1.2~1.8×) | 单矩阵 LU 是 **O(n³) 串行依赖**,AICore 单矩阵 BlockDim=1(无并行可摊),而 AICPU 是成熟优化的标量/SIMD CPU 实现 | | **batch-heavy**([64,32,32]、[256,16,16]) | **AICore 更快** | **~10–12×** | AICore 把 batch 切到多核并行(BlockDim 随 batch 增大),AICPU 仍近似串行逐矩阵 | ## 对比表(host wall-clock,真机 910B3,warmup=50 iters=200,3 轮一致) 下表为 3 轮独立 sweep 的 **median 中位数**(small-n 同时给 min,因 <20us 受 host 调度抖动)。 | Shape | 自定义 AICore | 内置 AICPU | 加速比(AICPU/AICore) | 是否 batch | 备注(路径) | |-------|--------------|------------|----------------------|-----------|-------------| | **[4,4]** | **11.6 us** (min 9.4) | 46.4 us (min 36.6) | **3.99×** | 否 | FULL;两者 dispatch-bound,AICPU 固定开销更大 | | **[16,16]** | **29.5 us** (min 21.0) | 50.9 us (min 40.4) | **1.72×** | 否 | FULL | | **[64,64]** | 156.4 us | **107.1 us** | 0.69× | 否 | FULL;单矩阵 O(n³) 串行,AICore 单核劣势开始显现 | | **[128,128]** | 550.6 us | **319.7 us** | 0.58× | 否 | BLOCKED;AICPU 快 1.7× | | **[256,256]** | 3102.6 us (3.10 ms) | **1995.1 us (2.00 ms)** | 0.64× | 否 | BLOCKED;AICPU 快 1.6× | | **[512,512]** | 14006.8 us (14.0 ms) | **11657.7 us (11.7 ms)** | 0.83× | 否 | BLOCKED;n 越大差距收窄(计算量摊薄固定开销) | | **[64,32,32]** | **96.7 us** | 984.9 us | **10.19×** | 是 | FULL/batch;64 个 32×32,AICore 多核并行 | | **[256,16,16]** | **106.1 us** | 1169.7 us | **11.02×** | 是 | FULL/batch;256 个 16×16,AICPU 近串行逐矩阵 | > 加速比 = 内置 AICPU 耗时 / 自定义 AICore 耗时;>1 表示 AICore 更快,<1 表示 AICPU 更快。 > min 口径的加速比与 median 一致([4,4] 3.88×、[64,32,32] 10.42×、[256,16,16] 12.16×) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3064 | 2 个月前 |
| feat(slogdet): 910b新增算子实现slogdet Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3064 merge slogdet-1-pr-1 into master feat(slogdet): 910b新增算子实现slogdet Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 在 experimental/math/slogdet/ 新增 ascend910b 的 Slogdet 算子: - 自带 AscendC AICore Kernel/Tiling 的 registry-invoke 实现(经 aclnn 两段式接口 aclnnSlogdet 调用,aclnn 为接口层、AscendC Kernel 为计算实现),区别于既有 math/slogdet(无 Kernel、转发到 AICPU LogMatrixDeterminant 的 aclnn-only 壳)。 - 带部分主元 LU 计算双输出 (sign, log|det|),双 TilingKey(FULL/BLOCKED)覆盖小/中/大 n 与 batch,仅 fp32。 - 含 op_host(def/tiling/infershape)、op_kernel、op_api(aclnn 两段式封装)、UT、ST、调用示例、README 与 aclnn API 文档。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1750 ## 测试 - UT 47/47:op_host tiling(FULL/BLOCKED 分支、N_RESIDENT_MAX 边界、epsSingular、n>4095 拒绝)+ infershape + op_api 参数校验。 - C++ ST 35/35、PyTorch ST 35/35(真机 910B3;标杆 torch.linalg.slogdet CPU):精度 fp32 双万分之一(rtol/atol=1e-4,-inf 精确、sign 精确含 -0.0==0.0),覆盖正/负行列式、奇异/秩亏、病态、batch/多维 batch、高维 reshape、large-n(BLOCKED)。 - 确定性:同输入 50× bitwise 一致(FULL 与 BLOCKED 均覆盖)。 - 二级冒烟通过;plog 实证调用命中自定义 SlogdetAiCore(AICore)、非上游 AICPU 转发。 ## 文档更新 更新 README.md、docs/aclnnSlogdet.md(aclnn API 参考 + 调用示例)。 ## 性能对比 | 场景 | 更快 | 量级 | 主因 | |------|--------|------|------| | **小单矩阵**(n=4,16) | **AICore 更快** | n=4: ~4.0×;n=16: ~1.8× | 这两者耗时都被 host dispatch 主导;AICPU 还要额外调度/排布 AICPU task,固定开销更大 | | **中大单矩阵**(n=64~512) | **AICPU 更快** | AICore 仅为 AICPU 的 0.56~0.83×(即 AICPU 快 1.2~1.8×) | 单矩阵 LU 是 **O(n³) 串行依赖**,AICore 单矩阵 BlockDim=1(无并行可摊),而 AICPU 是成熟优化的标量/SIMD CPU 实现 | | **batch-heavy**([64,32,32]、[256,16,16]) | **AICore 更快** | **~10–12×** | AICore 把 batch 切到多核并行(BlockDim 随 batch 增大),AICPU 仍近似串行逐矩阵 | ## 对比表(host wall-clock,真机 910B3,warmup=50 iters=200,3 轮一致) 下表为 3 轮独立 sweep 的 **median 中位数**(small-n 同时给 min,因 <20us 受 host 调度抖动)。 | Shape | 自定义 AICore | 内置 AICPU | 加速比(AICPU/AICore) | 是否 batch | 备注(路径) | |-------|--------------|------------|----------------------|-----------|-------------| | **[4,4]** | **11.6 us** (min 9.4) | 46.4 us (min 36.6) | **3.99×** | 否 | FULL;两者 dispatch-bound,AICPU 固定开销更大 | | **[16,16]** | **29.5 us** (min 21.0) | 50.9 us (min 40.4) | **1.72×** | 否 | FULL | | **[64,64]** | 156.4 us | **107.1 us** | 0.69× | 否 | FULL;单矩阵 O(n³) 串行,AICore 单核劣势开始显现 | | **[128,128]** | 550.6 us | **319.7 us** | 0.58× | 否 | BLOCKED;AICPU 快 1.7× | | **[256,256]** | 3102.6 us (3.10 ms) | **1995.1 us (2.00 ms)** | 0.64× | 否 | BLOCKED;AICPU 快 1.6× | | **[512,512]** | 14006.8 us (14.0 ms) | **11657.7 us (11.7 ms)** | 0.83× | 否 | BLOCKED;n 越大差距收窄(计算量摊薄固定开销) | | **[64,32,32]** | **96.7 us** | 984.9 us | **10.19×** | 是 | FULL/batch;64 个 32×32,AICore 多核并行 | | **[256,16,16]** | **106.1 us** | 1169.7 us | **11.02×** | 是 | FULL/batch;256 个 16×16,AICPU 近串行逐矩阵 | > 加速比 = 内置 AICPU 耗时 / 自定义 AICore 耗时;>1 表示 AICore 更快,<1 表示 AICPU 更快。 > min 口径的加速比与 median 一致([4,4] 3.88×、[64,32,32] 10.42×、[256,16,16] 12.16×) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3064 | 2 个月前 |