Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions infiniop/ops/averagepool/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# `AvgPool`

平均池化(Average Pooling)算子,常用于特征提取和下采样操作。对于输入张量 $x$,在指定窗口大小、步长和填充方式下,输出张量 $y$ 的每个元素为对应窗口内所有元素的平均值。

## 接口

### 计算

```c
infiniStatus_t infiniopAvgPool(
infiniopAvgPoolDescriptor_t desc,
void *workspace,
size_t workspace_size,
void *output,
const void *input,
void *stream
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数: </div>

- `desc`:已使用 `infiniopCreateAvgPoolDescriptor()` 初始化的平均池化算子描述符。
- `workspace`:临时工作空间指针。
- `workspace_size`:工作空间字节数。
- `output`:输出指针。
- `input`:输入指针。
- `stream`:计算流/队列。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]

---

### 获取平均池化临时工作空间需求

```c
infiniStatus_t infiniopGetAvgPoolWorkspaceSize(
infiniopAvgPoolDescriptor_t desc,
size_t *size
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数:</div>

- `desc`:已创建的平均池化算子描述符。
- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]

---

### 创建平均池化算子描述符

```c
infiniStatus_t infiniopCreateAvgPoolDescriptor(
infiniopHandle_t handle,
infiniopAvgPoolDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t output_desc,
infiniopTensorDescriptor_t input_desc,
void *kernel_size,
void *strides,
void *pads,
bool ceil_mode
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数:</div>

- `handle`: 硬件控柄。详情请见 [`InfiniopHandle_t`]
- `desc_ptr`: `infiniopAvgPoolDescriptor_t` 指针,指向将被初始化的算子描述符地址。
- `output_desc`:输出张量描述。
- `input_desc`:输入张量描述。
- `kernel_size`:窗口尺寸指针。
- `strides`:步长指针。
- `pads`:填充指针。
- `ceil_mode`:是否采用上取整。

参数限制:

- **`dT`**: (`Float16`, `Float32`, `BFloat16`) 之一。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_BAD_TENSOR_SHAPE`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`], [`INFINI_STATUS_BAD_TENSOR_STRIDES`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].

---

### 销毁平均池化算子描述符

```c
infiniStatus_t infiniopDestroyAvgPoolDescriptor(
infiniopAvgPoolDescriptor_t desc
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数: </div>

- `desc`
: 待销毁的平均池化算子描述符。

<div style="background-color: lightblue; padding: 1px;"> 返回值: </div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].

<!-- 链接 -->
[`InfiniopHandle_t`]: /infiniop/handle/README.md

[`INFINI_STATUS_SUCCESS`]: /common/status/README.md#INFINI_STATUS_SUCCESS
[`INFINI_STATUS_BAD_PARAM`]: /common/status/README.md#INFINI_STATUS_BAD_PARAM
[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
[`INFINI_STATUS_BAD_TENSOR_SHAPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_SHAPE
[`INFINI_STATUS_BAD_TENSOR_DTYPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_DTYPE
[`INFINI_STATUS_BAD_TENSOR_STRIDES`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_STRIDES
120 changes: 120 additions & 0 deletions infiniop/ops/averagepool_backward/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# `AvgPoolBackward`

平均池化(Average Pooling)反向算子,常用于反向传播阶段的梯度计算。对于输入张量 $x$ 和上游梯度 $grad\_output$,该算子根据平均池化前向操作计算输入的梯度 $grad\_input$。

## 接口

### 计算

```c
infiniStatus_t infiniopAvgPoolBackward(
infiniopAvgPoolBackwardDescriptor_t desc,
void *workspace,
size_t workspace_size,
void *grad_input,
const void *grad_output,
const void *input,
void *stream
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数: </div>

- `desc`:已使用 `infiniopCreateAvgPoolBackwardDescriptor()` 初始化的平均池化反向算子描述符。
- `workspace`:临时工作空间指针。
- `workspace_size`:工作空间字节数。
- `grad_input`:输入梯度指针(输出)。
- `grad_output`:输出梯度指针(输入)。
- `input`:前向输入张量指针。
- `stream`:计算流/队列。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]

---

### 获取平均池化反向临时工作空间需求

```c
infiniStatus_t infiniopGetAvgPoolBackwardWorkspaceSize(
infiniopAvgPoolBackwardDescriptor_t desc,
size_t *size
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数:</div>

- `desc`:已创建的平均池化反向算子描述符。
- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]

---

### 创建平均池化反向算子描述符

```c
infiniStatus_t infiniopCreateAvgPoolBackwardDescriptor(
infiniopHandle_t handle,
infiniopAvgPoolBackwardDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t grad_input_desc,
infiniopTensorDescriptor_t grad_output_desc,
infiniopTensorDescriptor_t input_desc,
void *kernel_size,
void *strides,
void *pads,
bool ceil_mode
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数:</div>

- `handle`: 硬件控柄。详情请见 [`InfiniopHandle_t`]
- `desc_ptr`: `infiniopAvgPoolBackwardDescriptor_t` 指针,指向将被初始化的算子描述符地址。
- `grad_input_desc`:输入梯度张量描述。
- `grad_output_desc`:输出梯度张量描述。
- `input_desc`:前向输入张量描述。
- `kernel_size`:窗口尺寸指针。
- `strides`:步长指针。
- `pads`:填充指针。
- `ceil_mode`:是否采用上取整。

参数限制:

- **`dT`**: (`Float16`, `Float32`, `BFloat16`) 之一。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_BAD_TENSOR_SHAPE`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`], [`INFINI_STATUS_BAD_TENSOR_STRIDES`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].

---

### 销毁平均池化反向算子描述符

```c
infiniStatus_t infiniopDestroyAvgPoolBackwardDescriptor(
infiniopAvgPoolBackwardDescriptor_t desc
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数: </div>

- `desc`
: 待销毁的平均池化反向算子描述符。

<div style="background-color: lightblue; padding: 1px;"> 返回值: </div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].

<!-- 链接 -->
[`InfiniopHandle_t`]: /infiniop/handle/README.md

[`INFINI_STATUS_SUCCESS`]: /common/status/README.md#INFINI_STATUS_SUCCESS
[`INFINI_STATUS_BAD_PARAM`]: /common/status/README.md#INFINI_STATUS_BAD_PARAM
[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
[`INFINI_STATUS_BAD_TENSOR_SHAPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_SHAPE
[`INFINI_STATUS_BAD_TENSOR_DTYPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_DTYPE
[`INFINI_STATUS_BAD_TENSOR_STRIDES`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_STRIDES
130 changes: 130 additions & 0 deletions infiniop/ops/conv_backward/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# `ConvBackward`

卷积(Convolution)反向算子,常用于深度学习网络的反向传播阶段,实现输入、权重和偏置的梯度计算。支持普通卷积的反向传播(含可选偏置)。

## 接口

### 计算

```c
infiniStatus_t infiniopConvBackward(
infiniopConvBackwardDescriptor_t desc,
void *workspace,
size_t workspace_size,
void *grad_input,
void *grad_weight,
void *grad_bias,
const void *grad_output,
const void *input,
const void *weight,
void *stream
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数: </div>

- `desc`:已用 `infiniopCreateConvBackwardDescriptor()` 初始化的卷积反向算子描述符。
- `workspace`:临时工作空间指针。
- `workspace_size`:工作空间字节数。
- `grad_input`:输入梯度指针(输出),与前向 `input` 形状一致。
- `grad_weight`:权重梯度指针(输出),与前向 `weight` 形状一致。
- `grad_bias`:偏置梯度指针(输出),与前向 `bias` 形状一致(如有偏置)。
- `grad_output`:输出梯度指针(输入),与前向 `output` 形状一致。
- `input`:前向输入张量指针。
- `weight`:前向权重张量指针。
- `stream`:计算流/队列。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`],[`INFINI_STATUS_INSUFFICIENT_WORKSPACE`]

---

### 获取卷积反向临时工作空间需求

```c
infiniStatus_t infiniopGetConvBackwardWorkspaceSize(
infiniopConvBackwardDescriptor_t desc,
size_t *size
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数:</div>

- `desc`:已创建的卷积反向算子描述符。
- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]

---

### 创建卷积反向算子描述符

```c
infiniStatus_t infiniopCreateConvBackwardDescriptor(
infiniopHandle_t handle,
infiniopConvBackwardDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t grad_output_desc,
infiniopTensorDescriptor_t input_desc,
infiniopTensorDescriptor_t weight_desc,
infiniopTensorDescriptor_t bias_desc,
void *pads,
void *strides,
void *dilations,
size_t n
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数:</div>

- `handle`: 硬件控柄。详情请见 [`InfiniopHandle_t`]
- `desc_ptr`: `infiniopConvBackwardDescriptor_t` 指针,指向将被初始化的算子描述符地址。
- `grad_output_desc`:输出梯度张量描述。
- `input_desc`:前向输入张量描述。
- `weight_desc`:前向权重张量描述。
- `bias_desc`:前向偏置张量描述。
- `pads`:填充指针。
- `strides`:步长指针。
- `dilations`:扩张(dilation)指针。
- `n`:卷积分组数目。

参数限制:

- **`dT`**: (`Float16`, `Float32`, `BFloat16`) 之一。

<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_BAD_TENSOR_SHAPE`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`], [`INFINI_STATUS_BAD_TENSOR_STRIDES`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].

---

### 销毁卷积反向算子描述符

```c
infiniStatus_t infiniopDestroyConvBackwardDescriptor(
infiniopConvBackwardDescriptor_t desc
);
```

<div style="background-color: lightblue; padding: 1px;"> 参数: </div>

- `desc`
: 待销毁的卷积反向算子描述符。

<div style="background-color: lightblue; padding: 1px;"> 返回值: </div>

- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].


<!-- 链接 -->
[`InfiniopHandle_t`]: /infiniop/handle/README.md

[`INFINI_STATUS_SUCCESS`]: /common/status/README.md#INFINI_STATUS_SUCCESS
[`INFINI_STATUS_BAD_PARAM`]: /common/status/README.md#INFINI_STATUS_BAD_PARAM
[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
[`INFINI_STATUS_BAD_TENSOR_SHAPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_SHAPE
[`INFINI_STATUS_BAD_TENSOR_DTYPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_DTYPE
[`INFINI_STATUS_BAD_TENSOR_STRIDES`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_STRIDES
[`INFINI_STATUS_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
Loading