---
title: 两段式接口
description: "单算子API执行的算子接口一般定义为“两段式接口”，以NN类算子接口定义为例："
url: https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/latest/Application%20Development%20Guide/aadgc/aclcppdevg_03_0155.html
sourcePath: /source/zh/Atlas200IDKA2DeveloperKit/23.0.RC2/Application Development Guide/aadgc/aclcppdevg_03_0155.html
indexId: 3bfd4b4398c64660a7b475709d355c7a10d0e0573e428460afdb9ea03c01cd7f105
---
# 两段式接口

单算子API执行的算子接口一般定义为“两段式接口”，以NN类算子接口定义为例：

```
aclnnStatus aclnnXxxGetWorkspaceSize(const aclTensor *src, ..., aclTensor *out, ..., uint64_t workspaceSize, aclOpExecutor **executor);
aclnnStatus aclnnXxx(void* workspace, int64 workspaceSize, aclOpExecutor* executor, aclrtStream stream);
```

其中aclnnXxxGetWorkspaceSize为第一段接口，主要用于计算本次API调用计算过程中需要多少的workspace内存。获取到本次API计算需要的workspace大小后，按照workspaceSize大小申请昇腾AI处理器内存，然后调用第二段接口aclnnXxx。

- workspace是指除输入/输出外，API在昇腾AI处理器上完成计算所需要的临时内存。
- 第二段接口aclnnXxx(...)不能重复调用，如下调用方式会出现异常：

```
aclnn
Xxx
GetWorkspaceSize(...)
aclnn
Xxx
(...)
aclnn
Xxx
(...)
```
