cann-ops中的aclnn*GetWorkspaceSize和aclnn*是怎么生成的?

背景

看代码的时候,一直有一个疑问,在https://gitee.com/ascend/cann-ops/中的算子,并没有显示的定义aclnn*GetWorkspaceSizeaclnn*这2个接口函数(*表示具体的算子),算子调用的时候,又直接使用的是这2个接口,那这2个接口,是怎么来的呢?
比如查看foreach_norm算子目录下:

[root@localhost foreach_norm]# pwd
/root/zjun/cann-ops/src/foreach/foreach_norm
[root@localhost foreach_norm]# tree 
.
├── CMakeLists.txt
├── docs
│   └── aclnnForeachNorm.md
├── examples
│   └── AclNNInvocationNaive
│       ├── CMakeLists.txt
│       ├── gen_data.py
│       ├── main.cpp
│       ├── README.md
│       ├── run.sh
│       └── verify_result.py
├── op_host
│   └── foreach_norm.cpp
├── op_kernel
│   ├── foreach_norm.cpp
│   └── foreach_norm.h
├── opp_kernel_aicpu
├── README.md
└── tests
    ├── st
    └── ut

9 directories, 12 files

在这些文件中,去找aclnn开头的,但是并没有,如下图所示:
在这里插入图片描述
抱着好奇,那这2段式的接口,到底是怎么生成的呢?

过程分析

这步骤,我们先从结果进行分析发现,通过编译过程,会发现如下代码:
在这里插入图片描述
也就是在autogen的目录,会生成aclnn_foreach_norm.cpp文件。
打开主路径(cann-ops)路径下的文件编译后的生成的文件:build/autogen/aclnn_foreach_norm.cpp
会发现如下的函数定义:
aclnnForeachNormGetWorkspaceSize

aclnnStatus aclnnForeachNormGetWorkspaceSize(
    const aclTensorList *x,
    const aclScalar *scalar,
    const aclTensorList *out,
    uint64_t *workspaceSize,
    aclOpExecutor **executor)
{
   
   

aclnnForeachNorm

aclnnStatus aclnnForeachNorm(
    void *workspace,
    uint64_t workspaceSize,
    aclOpExecutor *exec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值