---
title: aclmdlCreateAndGetOpDesc
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendgraphapi/aclcppdevg_03_0313.html
sourcePath: /source/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_0313.html
indexId: 021ac363efa2e37c00bede902dae6bd88581dffe329f14697609937055017d3f72
---
# aclmdlCreateAndGetOpDesc

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |


#### 功能说明

获取指定算子的描述信息，包括算子名、输入tensor描述、输出tensor描述，如果查询不到指定算子，则返回报错。该接口不支持动态Shape场景。

使用场景举例：执行整网模型推理时，如果产生AI Core报错，可以调用本接口获取报错算子的描述信息，再做进一步错误排查。

推荐的接口调用顺序如下：1. 定义并实现异常回调函数fn(aclrtExceptionInfoCallback类型)，回调函数原型请参见
aclrtSetExceptionInfoCallback(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_0134.html)。
实现回调函数的关键步骤如下：

  a. 在异常回调函数fn内调用aclrtGetDeviceIdFromExceptionInfo(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_0138.html)、aclrtGetStreamIdFromExceptionInfo(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_0136.html)、aclrtGetTaskIdFromExceptionInfo(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_0135.html)接口分别获取Device ID、Stream ID、Task ID。
  b. 在异常回调函数fn内调用    aclmdlCreateAndGetOpDesc
接口获取算子的描述信息。
  c. 在异常回调函数fn内调用    aclGetTensorDescByIndex
接口获取指定算子输入/输出的tensor描述。
  d. 在异常回调函数fn内调用如下接口获取tensor描述中的数据，进行进一步分析。
    例如，调用aclGetTensorDescAddress接口获取tensor数据的内存地址（用户可从该内存地址中获取tensor数据）、调用aclGetTensorDescType接口获取tensor描述中的数据类型、调用aclGetTensorDescFormat接口获取tensor描述中的Format、调用aclGetTensorDescNumDims接口获取tensor描述中的Shape维度个数、调用aclGetTensorDescDimV2接口获取Shape中指定维度的大小。

2. 调用aclrtSetExceptionInfoCallback(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_0134.html)接口设置异常回调函数。
3. 执行模型推理。
  如果存在AI Core报错，则触发回调函数fn，获取算子的信息，进行进一步分析。


#### 函数原型

```
aclError aclmdlCreateAndGetOpDesc(uint32_t deviceId, uint32_t streamId, uint32_t taskId, char *opName, size_t opNameLen, aclTensorDesc **inputDesc, size_t *numInputs, aclTensorDesc **outputDesc, size_t *numOutputs)
```


#### 参数说明

| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| deviceId | 输入 | Device ID。 调用aclrtGetDeviceIdFromExceptionInfo(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg\_03\_0138.html)接口获取异常信息中的Device ID，作为本接口的输入。 |
| streamId | 输入 | Stream ID。 调用aclrtGetStreamIdFromExceptionInfo(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg\_03\_0136.html)接口获取异常信息中的Stream ID，作为本接口的输入。 |
| taskId | 输入 | Task ID。 调用aclrtGetTaskIdFromExceptionInfo(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg\_03\_0135.html)接口获取异常信息中的Task ID，作为本接口的输入。 |
| opName | 输出 | 算子名称字符串的指针。 |
| opNameLen | 输入 | 算子名称字符串长度。 若用户指定的长度比实际算子名称的长度短，则返回报错。 |
| inputDesc | 输出 | 算子所有输入的tensor描述的指针，指向一块连续内存的首地址。类型定义请参见aclTensorDesc。 |
| numInputs | 输出 | 输入个数的指针。 |
| outputDesc | 输出 | 算子所有输出的tensor描述的指针，指向一块连续内存的首地址。类型定义请参见aclTensorDesc。 |
| numOutputs | 输出 | 输出个数的指针。 |


#### 返回值说明

返回0表示成功，返回其他值表示失败，请参见aclError。
