---
title: 工作原理
description: "shape推导（inferShape）的作用是由输入的shape+属性推导输出shape和数据类型dtype。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_0099.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_0099.html
indexId: 3b40ede0d8b5202e4218488e8477286b8a9e4d82f40d88a6dfa0dd0a0318fe9c61
---
# 工作原理

#### 算子下发过程


#### 输出shape推导（inferShape）

shape推导（inferShape）的作用是由输入的shape+属性推导输出shape和数据类型dtype。

例如：矩阵乘Matmul的左矩阵tensorA是M*K，右矩阵tensorB是K*N，inferShape的结果是M*N，如下图所示。

在输入数据类型为float16的场景下，输出数据类型默认为float16。

图1 shape推导示例


#### Tiling

大多数情况下，单个AI Core存在存储空间有限，算子的输入数据无法一次完全载入完成计算，需要将输入切分成多块，分块完成计算，这个过程称为Tiling，数据切分的算法称为Tiling算法或者Tiling策略。

Tiling策略对复杂算子的性能影响巨大， 同一个算子在不同Tiling策略下可能有10倍性能差异。

图2 Tiling示例


#### 获取workspace大小

workspace：算子内部有时需要通过额外的device内存进行数据交换或者缓存，需要在算子实际执行前分配好。通常存在两种使用场景：

1. 需要使用Unified Buffer和L1 Buffer上空间且空间不够用时，可以将数据暂存至workspace上。

2. 调用其他API接口时，需要workspace作为入参。

通常Tiling和workspace是一起计算的。

图3 workspace示例


#### 算子下发LaunchKernel

图4 算子下发示意


#### 算子执行

图5 算子执行示意图
