diff --git a/infiniop/ops/averagepool/README.md b/infiniop/ops/averagepool/README.md new file mode 100644 index 0000000..d798f9b --- /dev/null +++ b/infiniop/ops/averagepool/README.md @@ -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 +); +``` + +
参数:
+ +- `desc`:已使用 `infiniopCreateAvgPoolDescriptor()` 初始化的平均池化算子描述符。 +- `workspace`:临时工作空间指针。 +- `workspace_size`:工作空间字节数。 +- `output`:输出指针。 +- `input`:输入指针。 +- `stream`:计算流/队列。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 获取平均池化临时工作空间需求 + +```c +infiniStatus_t infiniopGetAvgPoolWorkspaceSize( + infiniopAvgPoolDescriptor_t desc, + size_t *size +); +``` + +
参数:
+ +- `desc`:已创建的平均池化算子描述符。 +- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。 + +
返回值:
+ +- [`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 +); +``` + +
参数:
+ +- `handle`: 硬件控柄。详情请见 [`InfiniopHandle_t`] +- `desc_ptr`: `infiniopAvgPoolDescriptor_t` 指针,指向将被初始化的算子描述符地址。 +- `output_desc`:输出张量描述。 +- `input_desc`:输入张量描述。 +- `kernel_size`:窗口尺寸指针。 +- `strides`:步长指针。 +- `pads`:填充指针。 +- `ceil_mode`:是否采用上取整。 + +参数限制: + +- **`dT`**: (`Float16`, `Float32`, `BFloat16`) 之一。 + +
返回值:
+ +- [`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 +); +``` + +
参数:
+ +- `desc` + : 待销毁的平均池化算子描述符。 + +
返回值:
+ +- [`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 diff --git a/infiniop/ops/averagepool_backward/README.md b/infiniop/ops/averagepool_backward/README.md new file mode 100644 index 0000000..5de29d9 --- /dev/null +++ b/infiniop/ops/averagepool_backward/README.md @@ -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 +); +``` + +
参数:
+ +- `desc`:已使用 `infiniopCreateAvgPoolBackwardDescriptor()` 初始化的平均池化反向算子描述符。 +- `workspace`:临时工作空间指针。 +- `workspace_size`:工作空间字节数。 +- `grad_input`:输入梯度指针(输出)。 +- `grad_output`:输出梯度指针(输入)。 +- `input`:前向输入张量指针。 +- `stream`:计算流/队列。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 获取平均池化反向临时工作空间需求 + +```c +infiniStatus_t infiniopGetAvgPoolBackwardWorkspaceSize( + infiniopAvgPoolBackwardDescriptor_t desc, + size_t *size +); +``` + +
参数:
+ +- `desc`:已创建的平均池化反向算子描述符。 +- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。 + +
返回值:
+ +- [`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 +); +``` + +
参数:
+ +- `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`) 之一。 + +
返回值:
+ +- [`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 +); +``` + +
参数:
+ +- `desc` + : 待销毁的平均池化反向算子描述符。 + +
返回值:
+ +- [`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 diff --git a/infiniop/ops/conv_backward/README.md b/infiniop/ops/conv_backward/README.md new file mode 100644 index 0000000..cdefb23 --- /dev/null +++ b/infiniop/ops/conv_backward/README.md @@ -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 +); +``` + +
参数:
+ +- `desc`:已用 `infiniopCreateConvBackwardDescriptor()` 初始化的卷积反向算子描述符。 +- `workspace`:临时工作空间指针。 +- `workspace_size`:工作空间字节数。 +- `grad_input`:输入梯度指针(输出),与前向 `input` 形状一致。 +- `grad_weight`:权重梯度指针(输出),与前向 `weight` 形状一致。 +- `grad_bias`:偏置梯度指针(输出),与前向 `bias` 形状一致(如有偏置)。 +- `grad_output`:输出梯度指针(输入),与前向 `output` 形状一致。 +- `input`:前向输入张量指针。 +- `weight`:前向权重张量指针。 +- `stream`:计算流/队列。 + +
返回值:
+ +- [`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 +); +``` + +
参数:
+ +- `desc`:已创建的卷积反向算子描述符。 +- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。 + +
返回值:
+ +- [`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 +); +``` + +
参数:
+ +- `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`) 之一。 + +
返回值:
+ +- [`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 +); +``` + +
参数:
+ +- `desc` + : 待销毁的卷积反向算子描述符。 + +
返回值:
+ +- [`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 diff --git a/infiniop/ops/cross_entropy_loss/README.md b/infiniop/ops/cross_entropy_loss/README.md new file mode 100644 index 0000000..60ed86c --- /dev/null +++ b/infiniop/ops/cross_entropy_loss/README.md @@ -0,0 +1,113 @@ +# `CrossEntropyLoss` + +交叉熵损失(Cross Entropy Loss)算子,常用于分类任务的损失计算。该算子支持对 logits 与目标标签(target)进行交叉熵损失值的计算。 + +## 接口 + +### 计算 + +```c +infiniStatus_t infiniopCrossEntropyLoss( + infiniopCrossEntropyLossDescriptor_t desc, + void *workspace, + size_t workspace_size, + void *loss, + const void *logits, + const void *target, + void *stream +); +``` + +
参数:
+ +- `desc`:已通过 `infiniopCreateCrossEntropyLossDescriptor()` 初始化的交叉熵损失算子描述符。 +- `workspace`:临时工作空间指针。 +- `workspace_size`:工作空间字节数。 +- `loss`:损失输出指针。 +- `logits`:logits 输入张量指针。 +- `target`:标签输入张量指针。 +- `stream`:计算流/队列。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_NOT_IMPLEMENTED`] + +--- + +### 获取交叉熵损失临时工作空间需求 + +```c +infiniStatus_t infiniopGetCrossEntropyLossWorkspaceSize( + infiniopCrossEntropyLossDescriptor_t desc, + size_t *size +); +``` + +
参数:
+ +- `desc`:已创建的交叉熵损失算子描述符。 +- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 创建交叉熵损失算子描述符 + +```c +infiniStatus_t infiniopCreateCrossEntropyLossDescriptor( + infiniopHandle_t handle, + infiniopCrossEntropyLossDescriptor_t *desc_ptr, + infiniopTensorDescriptor_t loss_desc, + infiniopTensorDescriptor_t logits_desc, + infiniopTensorDescriptor_t target_desc +); +``` + +
参数:
+ +- `handle`: 硬件控柄。详情请见 [`InfiniopHandle_t`] +- `desc_ptr`: `infiniopCrossEntropyLossDescriptor_t` 指针,指向将被初始化的算子描述符地址。 +- `loss_desc`:损失输出张量描述。 +- `logits_desc`:logits 输入张量描述。 +- `target_desc`:目标标签输入张量描述。 + +参数限制: + +- **`dT`**: (`Float16`, `Float32`, `Float64`) 之一。 + +
返回值:
+ +- [`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`], [`INFINI_STATUS_NOT_IMPLEMENTED`]. + +--- + +### 销毁交叉熵损失算子描述符 + +```c +infiniStatus_t infiniopDestroyCrossEntropyLossDescriptor( + infiniopCrossEntropyLossDescriptor_t desc +); +``` + +
参数:
+ +- `desc` + : 待销毁的交叉熵损失算子描述符。 + +
返回值:
+ +- [`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_NOT_IMPLEMENTED`]: /common/status/README.md#INFINI_STATUS_NOT_IMPLEMENTED diff --git a/infiniop/ops/interpolate_nearest/README.md b/infiniop/ops/interpolate_nearest/README.md new file mode 100644 index 0000000..c5d74b8 --- /dev/null +++ b/infiniop/ops/interpolate_nearest/README.md @@ -0,0 +1,108 @@ +# `InterpolateNearest` + +最近邻插值(Nearest Neighbor Interpolation)算子,常用于特征图、图像等张量的上采样/下采样。该算子根据输入和输出张量的形状,将输入数据通过最近邻策略映射到输出张量。 + +## 接口 + +### 计算 + +```c +infiniStatus_t infiniopInterpolateNearest( + infiniopInterpolateNearestDescriptor_t desc, + void *workspace, + size_t workspace_size, + void *output, + const void *input, + void *stream +); +``` + +
参数:
+ +- `desc`:已用 `infiniopCreateInterpolateNearestDescriptor()` 初始化的最近邻插值算子描述符。 +- `workspace`:临时工作空间指针。 +- `workspace_size`:工作空间字节数。 +- `output`:输出张量指针。 +- `input`:输入张量指针。 +- `stream`:计算流/队列。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 获取最近邻插值临时工作空间需求 + +```c +infiniStatus_t infiniopGetInterpolateNearestWorkspaceSize( + infiniopInterpolateNearestDescriptor_t desc, + size_t *size +); +``` + +
参数:
+ +- `desc`:已创建的最近邻插值算子描述符。 +- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 创建最近邻插值算子描述符 + +```c +infiniStatus_t infiniopCreateInterpolateNearestDescriptor( + infiniopHandle_t handle, + infiniopInterpolateNearestDescriptor_t *desc_ptr, + infiniopTensorDescriptor_t output_desc, + infiniopTensorDescriptor_t input_desc +); +``` + +
参数:
+ +- `handle`: 硬件控柄。详情请见 [`InfiniopHandle_t`] +- `desc_ptr`: `infiniopInterpolateNearestDescriptor_t` 指针,指向将被初始化的算子描述符地址。 +- `output_desc`:输出张量描述。 +- `input_desc`:输入张量描述。 + +参数限制: + +- **`dT`**: (`Float16`, `Float32`, `BFloat16`) 之一。 + +
返回值:
+ +- [`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 infiniopDestroyInterpolateNearestDescriptor( + infiniopInterpolateNearestDescriptor_t desc +); +``` + +
参数:
+ +- `desc` + : 待销毁的最近邻插值算子描述符。 + +
返回值:
+ +- [`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 \ No newline at end of file diff --git a/infiniop/ops/maxpool/README.md b/infiniop/ops/maxpool/README.md new file mode 100644 index 0000000..6da7685 --- /dev/null +++ b/infiniop/ops/maxpool/README.md @@ -0,0 +1,117 @@ +# `MaxPool` + +最大池化(Max Pooling)算子,常用于特征提取和下采样操作。对于输入张量 $x$,在指定窗口大小、步长和填充方式下,输出张量 $y$ 的每个元素为对应窗口内的最大值。 + +## 接口 + +### 计算 + +```c +infiniStatus_t infiniopMaxPool( + infiniopMaxPoolDescriptor_t desc, + void *workspace, + size_t workspace_size, + void *output, + const void *input, + void *stream +); +``` + +
参数:
+ +- `desc`:已使用 `infiniopCreateMaxPoolDescriptor()` 初始化的最大池化算子描述符。 +- `workspace`:临时工作空间指针。 +- `workspace_size`:工作空间字节数。 +- `output`:输出指针。 +- `input`:输入指针。 +- `stream`:计算流/队列。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 获取最大池化临时工作空间需求 + +```c +infiniStatus_t infiniopGetMaxPoolWorkspaceSize( + infiniopMaxPoolDescriptor_t desc, + size_t *size +); +``` + +
参数:
+ +- `desc`:已创建的最大池化算子描述符。 +- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 创建最大池化算子描述符 + +```c +infiniStatus_t infiniopCreateMaxPoolDescriptor( + infiniopHandle_t handle, + infiniopMaxPoolDescriptor_t *desc_ptr, + infiniopTensorDescriptor_t output_desc, + infiniopTensorDescriptor_t input_desc, + void *kernel_size, + void *strides, + void *pads, + bool ceil_mode +); +``` + +
参数:
+ +- `handle`: 硬件控柄。详情请见 [`InfiniopHandle_t`] +- `desc_ptr`: `infiniopMaxPoolDescriptor_t` 指针,指向将被初始化的算子描述符地址。 +- `output_desc`:输出张量描述。 +- `input_desc`:输入张量描述,张量形状与 `output_desc`、池化参数共同决定。 +- `kernel_size`:窗口尺寸指针(如 `{kh, kw}`),类型与输入张量一致,需为正整数数组。 +- `strides`:步长指针(如 `{sh, sw}`),类型与输入张量一致,需为正整数数组。 +- `pads`:填充指针(如 `{ph, pw}`),类型与输入张量一致,需为非负整数数组。 +- `ceil_mode`:是否采用上取整(`true` 采用 ceil,`false` 采用 floor)。 + +参数限制: + +- **`dT`**: (`Float16`, `Float32`, `BFloat16`) 之一。 + +
返回值:
+ +- [`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 infiniopDestroyMaxPoolDescriptor( + infiniopMaxPoolDescriptor_t desc +); +``` + +
参数:
+ +- `desc` + : 待销毁的最大池化算子描述符。 + +
返回值:
+ +- [`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 \ No newline at end of file diff --git a/infiniop/ops/maxpool_backward/README.md b/infiniop/ops/maxpool_backward/README.md new file mode 100644 index 0000000..981bed4 --- /dev/null +++ b/infiniop/ops/maxpool_backward/README.md @@ -0,0 +1,120 @@ +# `MaxPoolBackward` + +最大池化(Max Pooling)反向算子,常用于反向传播阶段的梯度计算。对于输入张量 $x$ 和上游梯度 $grad\_output$,该算子根据最大池化的前向选择,计算输入的梯度 $grad\_input$。 + +## 接口 + +### 计算 + +```c +infiniStatus_t infiniopMaxPoolBackward( + infiniopMaxPoolBackwardDescriptor_t desc, + void *workspace, + size_t workspace_size, + void *grad_input, + const void *grad_output, + const void *input, + void *stream +); +``` + +
参数:
+ +- `desc`:已使用 `infiniopCreateMaxPoolBackwardDescriptor()` 初始化的最大池化反向算子描述符。 +- `workspace`:临时工作空间指针。 +- `workspace_size`:工作空间字节数。 +- `grad_input`:输入梯度指针(输出)。 +- `grad_output`:输出梯度指针(输入),与前向 `output` 张量形状相同。 +- `input`:前向输入张量指针。 +- `stream`:计算流/队列。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 获取最大池化反向临时工作空间需求 + +```c +infiniStatus_t infiniopGetMaxPoolBackwardWorkspaceSize( + infiniopMaxPoolBackwardDescriptor_t desc, + size_t *size +); +``` + +
参数:
+ +- `desc`:已创建的最大池化反向算子描述符。 +- `size`:指向 `size_t` 的指针,返回所需的工作空间字节数。 + +
返回值:
+ +- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`] + +--- + +### 创建最大池化反向算子描述符 + +```c +infiniStatus_t infiniopCreateMaxPoolBackwardDescriptor( + infiniopHandle_t handle, + infiniopMaxPoolBackwardDescriptor_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 +); +``` + +
参数:
+ +- `handle`: 硬件控柄。详情请见 [`InfiniopHandle_t`] +- `desc_ptr`: `infiniopMaxPoolBackwardDescriptor_t` 指针,指向将被初始化的算子描述符地址。 +- `grad_input_desc`:输入梯度张量描述。 +- `grad_output_desc`:输出梯度张量描述。 +- `input_desc`:前向输入张量描述。 +- `kernel_size`:窗口尺寸指针。 +- `strides`:步长指针。 +- `pads`:填充指针。 +- `ceil_mode`:是否采用上取整。 + +参数限制: + +- **`dT`**: (`Float16`, `Float32`, `BFloat16`) 之一。 + +
返回值:
+ +- [`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 infiniopDestroyMaxPoolBackwardDescriptor( + infiniopMaxPoolBackwardDescriptor_t desc +); +``` + +
参数:
+ +- `desc` + : 待销毁的最大池化反向算子描述符。 + +
返回值:
+ +- [`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 \ No newline at end of file