Pull Request已成功合入, 合并人@CANN-robot
(感谢 gaoxin 的贡献)变更摘要
本 PR 将 Asin/Acos 算子从原实现修改为 SIMT 接口(参考既有 Sin/Cos 实现):新增 asin.h/acos.h regbase 头文件并注册 raw string,Codegen 侧切换 GetApiName 与 Load/Include 头文件,GetConversionDtype 增加 FP16→FLOAT 映射,同时在节点补全阶段为 Asin/Acos 设置 40 KiB SIMT dcache 预留并补全 ComputeType,最后在 bf16 backend E2E 测试中新增 kernel 文本断言。该变更保持 ASCIR 类型、Python API、ATT 注册、tmp buffer 计算和 UnaryApiTmpCall 调用 ABI 不变。
主要改动
- 新增 SIMT regbase 头文件并注册: 新增
autofuse/v35/ascendc/api_regbase/asin.h、acos.h,定义 SIMT 核函数AsinSimtCompute/AcosSimtCompute及封装AscendC::Simt::VF_CALL调用的AsinExtend/AcosExtend(线程数ASIN_THREAD_NUM/ACOS_THREAD_NUM = 1024),并在ascendc_reg_base_api_register.cpp中将asin_reg_base.h/acos_reg_base.h加入api_to_file映射完成注册。 - Codegen 切换接口与头文件:
AsinAscIrCodegenImplV2/AcosAscIrCodegenImplV2的GetApiName由"Asin"/"Acos"改为"AsinExtend"/"AcosExtend",新增LoadApiHeaderFiles返回asin_reg_base.h/acos_reg_base.h,并在IncludeApiHeaderFiles中补充simt_api/cpp/kernel_simt_intf.h与simt_api/math_functions.h。 - float16 转 float 处理: 两个算子的
GetConversionDtype转换映射在原有{DT_BF16, DT_FLOAT}基础上新增{DT_FLOAT16, DT_FLOAT},使 float16 输入统一转换为 float 处理。 - 节点 SIMT dcache 与 ComputeType 补全:
CompleteElewiseApiInfo将Asin/Acos纳入设置kSimtDcacheSize(40 KiB)的条件,并在kOpTypeToComputeType映射表中为Asin::Type/Acos::Type补充kComputeElewise。 - E2E 测试断言增强:
asin_bf16_backend_generate.cpp与acos_bf16_backend_generator.cpp新增对生成的 kernel 中AsinExtend/AcosExtend、AsinSimtCompute/AcosSimtCompute、simt_api/cpp/kernel_simt_intf.h以及 tiling 中 dcache 大小(40 * 1024)的文本断言。


Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/graph-autofusion | ✅ yangyongqiang0606, zhang_shengjie, liyuewei (3/2) | ✅ yangyongqiang0606 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
gcw_V3YyYBt1, thanks for your pull request. All authors of the commits have signed the CLA. 👍


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


/lgtm


/lgtm


/approve


Pull Request
描述
将 Autofuse V2 的 Asin/Acos 与 Remainder(int32) 算子执行路径切换为 SIMT 接口实现,与既有 Sin/Cos/Expm1 的 SIMT 机制对齐:SIMT kernel(
__simt_vf__+LAUNCH_BOUND(1024),线程按threadIdx.x步进blockDim.x逐元素计算)通过AscendC::Simt::VF_CALL启动,并配套 40 KiB SIMT dcache 预留。外部 ASCIR 类型、Python API、ATT 注册、tmp buffer 计算和 ApiCall 调用 ABI 均保持不变。问题
adv_api/math/asin.h/acos.h),性能比单算子差。AscendC::Reg::向量指令,性能比单算子差。修改方案
AsinSimtCompute/AcosSimtCompute(调用Simt::Asin/Simt::Acos)+AsinExtend/AcosExtendwrapper;CMake 生成 raw string 并在ascendc_reg_base_api_register.cpp注册;Codegen 类GetApiName()切换为AsinExtend/AcosExtend,LoadApiHeaderFiles()加载asin_reg_base.h/acos_reg_base.h,IncludeApiHeaderFiles()增加 SIMT 官方头;GetConversionDtype()增加 FP16→FLOAT 转换(与 BF16→FLOAT 一致)。RemainderIntSimtCompute(参考 ops-math 仓 FloorModInt_1:%取余 + 符号差异修正rem + src2,保证 floor 语义),通过AscendC::Simt::VF_CALL启动;删除AscendC::Reg::向量实现RemainderIntImplVF;CodegenIncludeApiHeaderFiles()增加simt_api/cpp/kernel_simt_intf.h。float 路径保持不变。ascgraph_info_complete.cpp):CompleteElewiseApiInfo为 Asin/Acos 及 int32 输入的 Remainder 设置 40 KiB SIMT dcache 预留;kOpTypeToComputeType补全 Asin/Acos/Remainder 的 kComputeElewise 条目。AsinExtend/AcosExtend、*SimtCompute、SIMT 头文件和 tiling dcache(40960);remainder int32 generator 同步增加RemainderIntSimtCompute与 dcache 断言。变更类型
关联的Issue
如何测试
cmake --build build --target aihac_codegen -j 8编译通过。asin_bf16_test_codegen_v2/acos_bf16_test_codegen_v2:断言 Extend/SimtCompute/SIMT 头/tiling dcache 全部通过。remainder_int32_store_test_e2e_v2:ICPU(ascend950 模拟)3/3 通过,覆盖对齐/非对齐/较大 shape,输入含正负除数符号修正场景,golden 独立计算 floor 语义。optimize_ut651/651、test_main878/878(0 failed)、regbase UTRemainderFloor_Test通过;clang-format(v18.1.8 pre-commit 与 v21.1.4 双版本)检查通过。核对清单
其他信息