两段式接口
单算子API执行的算子接口一般定义为“两段式接口”,以NN算子接口定义为例:
aclnnStatus aclnnXxxGetWorkspaceSize(const aclTensor *src, ..., aclTensor *out, ..., uint64_t *workspaceSize, aclOpExecutor **executor);
aclnnStatus aclnnXxx(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream);
其中aclnnXxxGetWorkspaceSize为第一段接口,主要用于计算本次API调用计算过程中需要多少的workspace内存。获取到本次API计算需要的workspace大小后,按照workspaceSize大小申请AI处理器内存,然后调用第二段接口aclnnXxx。
说明:
- workspace是指除输入/输出外,API在AI处理器上完成计算所需要的临时内存。
- 第二段接口aclnnXxx(...)不能重复调用,如下调用方式会出现异常:
aclnnXxxGetWorkspaceSize(...)
aclnnXxx(...)
aclnnXxx(...)