昇腾社区首页
中文
注册
开发者
下载

aclopInferShape

产品支持情况

产品

是否支持

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

Atlas A2 训练系列产品 / Atlas 800I A2 推理产品 /A200I A2 Box 异构组件

Atlas 200I/500 A2 推理产品

Atlas 推理系列产品

Atlas 训练系列产品

功能说明

根据算子的输入Shape、输入值推导出算子的输出Shape。

推导算子的输出Shape包含三种场景:
  • 根据Shape推导,可以得到算子的准确输出Shape,则返回准确输出Shape;
  • 根据Shape推导,无法得到算子的准确输出Shape,但可以得到输出Shape的范围,则在输出参数outputDesc中将算子输出tensor描述中的动态维度的维度值记为-1。该场景下,用户可调用aclGetTensorDescDimRange接口获取tensor描述中指定维度的范围值。
  • (该场景预留)根据Shape推导,无法得到算子的准确输出Shape以及Shape范围,则在输出参数outputDesc中将算子输出tensor描述中的动态维度的维度值记为-2。

函数原型

aclError aclopInferShape(const char *opType,
int numInputs,
aclTensorDesc *inputDesc[],
aclDataBuffer *inputs[],
int numOutputs,
aclTensorDesc *outputDesc[],
aclopAttr *attr)

参数说明

参数名

输入/输出

说明

opType

输入

算子类型名称的指针。

numInputs

输入

算子输入tensor的数量。

inputDesc

输入

算子输入tensor描述的指针数组。

需提前调用aclCreateTensorDesc接口创建aclTensorDesc类型。

inputDesc数组中的元素个数必须与numInputs参数值保持一致。

inputs

输入

算子输入tensor的指针数组。

需提前调用aclCreateDataBuffer接口创建aclDataBuffer类型的数据。

Ascend EP 形态下,此处算子输入tensor数据的内存需申请Host上的内存。

Ascend RC 形态下,此处算子输入tensor数据的内存需申请Device上的内存。

Control CPU开放形态下,此处算子输入tensor数据的内存需申请Device上的内存。

内存申请接口请参见内存管理

numOutputs

输入

算子输出tensor的数量。

outputDesc

输出

算子输出tensor描述的指针数组。

需提前调用aclCreateTensorDesc接口创建aclTensorDesc类型。

outputDesc数组中的元素个数必须与numOutputs参数值保持一致

attr

输入

算子属性。

返回值说明

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

约束说明

如果算子有动态输入DYNAMIC_INPUT或动态输出DYNAMIC_OUTPUT,在调用aclopInferShape接口推导算子的输出Shape前,需先调用aclSetTensorDescName接口设置所有输入和输出的tensor描述的名称,且名称必须按照如下要求(算子IR原型中定义的输入/输出名称请参见“Ascend IR算子规格说明”。)
  • 对于必选输入、可选输入、必选输出,名称必须与算子IR原型中定义的输入/输出名称保持一致。
  • 对于动态输入、动态输出,名称必须是:算子IR原型中定义的输入/输出名称+编号。编号根据动态输入/输出的个数确定,从0开始,0对应第一个动态输入/输出,1对应第二个动态输入/输出,以此类推。

例如某个算子有2个输入(第1个是必选输入x,第二个是动态输入y且输入个数为2)、1个必选输出z,则调用aclSetTensorDescName接口设置名称的代码示例如下:

aclSetTensorDescName(inputTensorDesc[0], "x");
aclSetTensorDescName(inputTensorDesc[1], "y0");
aclSetTensorDescName(inputTensorDesc[2], "y1");
aclSetTensorDescName(outputTensorDesc[0], "z");

参考资源

接口调用示例,参见执行动态Shape算子示例代码(不注册算子选择器)