diff --git a/infiniop/ops/README.md b/infiniop/ops/README.md
index 0633ec6..c1a9a2f 100644
--- a/infiniop/ops/README.md
+++ b/infiniop/ops/README.md
@@ -12,3 +12,12 @@
- [`Softmax`](/infiniop/ops/softmax/README.md)
- [`Sub`](/infiniop/ops/sub/README.md)
- [`SwiGLU`](/infiniop/ops/swiglu/README.md)
+- [`Exp`](/infiniop/ops/exp/README.md)
+- [`Sin`](/infiniop/ops/sin/README.md)
+- [`Cos`](/infiniop/ops/cos/README.md)
+- [`Tanh`](/infiniop/ops/tanh/README.md)
+- [`Sigmoid Backward`](/infiniop/ops/sigmoid _backward/README.md)
+- [`HardSwish`](/infiniop/ops/hardswish/README.md)
+- [`Where`](/infiniop/ops/where/README.md)
+- [`Cast`](/infiniop/ops/cast/README.md)
+- [`LeakyReLU`](/infiniop/ops/leaky_relu/README.md)
\ No newline at end of file
diff --git a/infiniop/ops/cast/README.md b/infiniop/ops/cast/README.md
new file mode 100644
index 0000000..ce25f3d
--- /dev/null
+++ b/infiniop/ops/cast/README.md
@@ -0,0 +1,138 @@
+# `Cast`
+
+`Cast`(类型转换算子)为**单目逐元素算子**。用于在指定的数据类型之间进行转换:
+
+- **整数类型互转**:`int32`、`int64`、`uint32`、`uint64`;
+- **浮点类型互转**:`f64`、`f32`、`f16`、`bf16`;
+- **整数与浮点互转**:`int32/int64/uint32/uint64` ↔ `f64/f32/f16/bf16`;
+
+`input` 为输入,`output` 为输出。,数据按元素一一映射。
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopCast(
+ infiniopCastDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+
参数:
+
+- `desc`:
+ 已使用 `infiniopCreateCastDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:
+ 输出张量(转换后的数据)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 输入张量(待转换的数据)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列;
+
+返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_INTERNAL_ERROR`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`].
+
+### 创建算子描述
+
+```c
+infiniStatus_t infiniopCreateCastDescriptor(
+ infiniopHandle_t handle,
+ infiniopCastDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc
+);
+```
+
+参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopCastDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `output` 的张量描述(目标数据类型由此指定)。**不支持原位计算**;
+- `input_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `input` 的张量描述。
+
+参数限制:
+
+- `dT` 支持:
+
+ - **整数**:`Int32`、`Int64`、`UInt32`、`UInt64`;
+ - **浮点**:`Float64`、`Float32`、`Float16`、`BFloat16`。
+- **允许的类型组合**:
+
+ 1. 整数 ↔ 整数(上述整数集合内互转);
+ 2. 浮点 ↔ 浮点(上述浮点集合内互转);
+ 3. 整数 ↔ 浮点;
+- `output` 与 `input` 的形状与步长需对应(逐元素一一映射);不涉及广播;`output` 的步长不得为 0。
+- 不支持 inplace:`output` 不能与 `input` 指向同一地址。
+
+> 注:转换遵循常规数值转换语义(IEEE 754 浮点到浮点、整数到浮点的表示变换)。当整数值超出目标浮点的精确表示范围时,将发生舍入。
+
+返回值:
+
+- [`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 infiniopGetCastWorkspaceSize(
+ infiniopCastDescriptor_t desc,
+ size_t *size
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateCastDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyCastDescriptor(
+ infiniopCastDescriptor_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_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
+[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
+[`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/cos/README.md b/infiniop/ops/cos/README.md
new file mode 100644
index 0000000..5a3a2c2
--- /dev/null
+++ b/infiniop/ops/cos/README.md
@@ -0,0 +1,130 @@
+# `Cos`
+
+`Cos`(余弦算子)为**单目逐元素算子**,定义:
+
+$$
+\mathrm{Cos}(x)=\cos(x)
+$$
+
+其中 `input` 为输入,`output` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopCos(
+ infiniopCosDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateCosDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_INTERNAL_ERROR`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`].
+
+### 创建算子描述
+
+```c
+infiniStatus_t infiniopCreateCosDescriptor(
+ infiniopHandle_t handle,
+ infiniopCosDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopCosDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `output` 的张量描述,支持原位计算。
+- `input_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `input` 的张量描述,支持原位计算。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `BFloat16`) 之一。
+- `output` 的形状与步长需与 `input` 对应(逐元素一一映射);不涉及广播。
+- 支持原位计算,即计算时 `output` 可以与 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(其步长不得为 0)。
+
+ 返回值:
+
+- [`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 infiniopGetCosWorkspaceSize(
+ infiniopCosDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateCosDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyCosDescriptor(
+ infiniopCosDescriptor_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_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
+[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
+[`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/exp/README.md b/infiniop/ops/exp/README.md
new file mode 100644
index 0000000..ccbdfab
--- /dev/null
+++ b/infiniop/ops/exp/README.md
@@ -0,0 +1,130 @@
+# `Exp`
+
+`Exp`(指数算子)为**单目逐元素算子**,定义:
+
+$$
+\mathrm{Exp}(x)=e^{x}
+$$
+
+其中 `input` 为输入,`output` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopExp(
+ infiniopExpDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateExpDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_INTERNAL_ERROR`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`].
+
+### 创建算子描述
+
+```c
+infiniStatus_t infiniopCreateExpDescriptor(
+ infiniopHandle_t handle,
+ infiniopExpDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopExpDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `output` 的张量描述,支持原位计算。
+- `input_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `input` 的张量描述,支持原位计算。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `BFloat16`) 之一。
+- `output` 的形状与步长需与 `input` 对应(逐元素一一映射);不涉及广播。
+- 支持原位计算,即计算时 `output` 可以与 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(其步长不得为 0)。
+
+ 返回值:
+
+- [`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 infiniopGetExpWorkspaceSize(
+ infiniopExpDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateExpDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyExpDescriptor(
+ infiniopExpDescriptor_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_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
+[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
+[`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/hardswish/README.md b/infiniop/ops/hardswish/README.md
new file mode 100644
index 0000000..3135263
--- /dev/null
+++ b/infiniop/ops/hardswish/README.md
@@ -0,0 +1,137 @@
+# `HardSwish`
+
+`HardSwish`(硬化挤压线性单元)为**单目逐元素激活算子**,其常用等价形式为:
+
+$$
+\mathrm{HardSwish}(x)=x\cdot\frac{\mathrm{ReLU6}(x+3)}{6}
+= x\cdot\frac{\min(\max(x+3,\,0),\,6)}{6}
+=
+\begin{cases}
+0, & x\le -3,\\[2pt]
+x, & x\ge 3,\\[2pt]
+\dfrac{x(x+3)}{6}, & \text{otherwise}.
+\end{cases}
+$$
+
+其中 `input` 为输入,`output` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopHardSwish(
+ infiniopHardSwishDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateHardSwishDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_INTERNAL_ERROR`],[`INFINI_STATUS_BAD_TENSOR_DTYPE`].
+
+### 创建算子描述
+
+```c
+infiniStatus_t infiniopCreateHardSwishDescriptor(
+ infiniopHandle_t handle,
+ infiniopHardSwishDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopHardSwishDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `output` 的张量描述,支持原位计算。
+- `input_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `input` 的张量描述,支持原位计算。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `BFloat16`) 之一。
+- `output` 的形状与步长需与 `input` 对应(逐元素一一映射);不涉及广播。
+- 支持原位计算,即计算时 `output` 可以与 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(其步长不得为 0)。
+
+ 返回值:
+
+- [`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 infiniopGetHardSwishWorkspaceSize(
+ infiniopHardSwishDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateHardSwishDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyHardSwishDescriptor(
+ infiniopHardSwishDescriptor_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_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
+[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
+[`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/leaky_relu/README.md b/infiniop/ops/leaky_relu/README.md
new file mode 100644
index 0000000..22a7179
--- /dev/null
+++ b/infiniop/ops/leaky_relu/README.md
@@ -0,0 +1,138 @@
+# `LeakyReLU`
+
+`LeakyReLU`(带泄露的线性整流)为**单目逐元素激活算子**,其计算为:
+
+$$
+\mathrm{LeakyReLU}(x)=
+\begin{cases}
+x, & x \ge 0,\\[2pt]
+\text{negative\_slope}\cdot x, & x<0.
+\end{cases}
+$$
+
+其中 `input` 为输入,`output` 为输出;`negative_slope` 为算子构建时设置的标量常数(`float` 类型),对所有元素生效。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopLeakyReLU(
+ infiniopLeakyReLUDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateLeakyReLUDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_INTERNAL_ERROR`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`].
+
+### 创建算子描述
+
+```c
+infiniStatus_t infiniopCreateLeakyReLUDescriptor(
+ infiniopHandle_t handle,
+ infiniopLeakyReLUDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc,
+ float negative_slope
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopLeakyReLUDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `output` 的张量描述,支持原位计算;
+- `input_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `input` 的张量描述,支持原位计算;
+- `negative_slope`:
+ 泄露系数,`float`(32 位)标量常数;在整个计算过程中保持不变;
+
+参数限制:
+
+- `dT`: (`Float64`, `Float32`, `Float16`, `BFloat16`) 之一。
+- `input` 与 `output` 的数据类型必须一致。
+- `output` 的形状与步长需与 `input` 对应(逐元素一一映射);不涉及广播。
+- 支持原位计算,即计算时 `output` 可以与 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(其步长不得为 0)。
+
+ 返回值:
+
+- [`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 infiniopGetLeakyReLUWorkspaceSize(
+ infiniopLeakyReLUDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateLeakyReLUDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyLeakyReLUDescriptor(
+ infiniopLeakyReLUDescriptor_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_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
+[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
+[`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/sigmoid _backward/README.md b/infiniop/ops/sigmoid _backward/README.md
new file mode 100644
index 0000000..c601adc
--- /dev/null
+++ b/infiniop/ops/sigmoid _backward/README.md
@@ -0,0 +1,142 @@
+# `Sigmoid Backward`
+
+`Sigmoid Backward`,即 **Sigmoid 函数*- 的反向算子。其梯度计算为:
+
+$$
+\sigma(x)=\frac{1}{1+e^{-x}},\quad
+\frac{d\,\sigma(x)}{dx}=\sigma(x)\left(1-\sigma(x)\right),
+$$
+
+$$
+\textbf{grad\_input}=\textbf{grad\_output}\odot \sigma(\textbf{input})\odot\left(1-\sigma(\textbf{input})\right).
+$$
+
+其中 `input` 与 `grad_output` 为输入,`grad_input` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopSigmoidBackward(
+ infiniopSigmoidBackwardDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *grad_input,
+ const void *input,
+ const void *grad_output,
+ void *stream
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateSigmoidBackwardDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `grad_input`:
+ 输出张量(∂L/∂input)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 前向输入张量 `x`。张量限制见[创建算子描述](#创建算子描述)部分;
+- `grad_output`:
+ 上游梯度张量(∂L/∂Sigmoid(x))。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列;
+
+返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_INTERNAL_ERROR`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`]。
+
+### 创建算子描述
+
+```c
+infiniStatus_t infiniopCreateSigmoidBackwardDescriptor(
+ infiniopHandle_t handle,
+ infiniopSigmoidBackwardDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t grad_input_desc,
+ infiniopTensorDescriptor_t input_desc,
+ infiniopTensorDescriptor_t grad_output_desc
+);
+```
+
+参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopSigmoidBackwardDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `grad_input_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子输出 `grad_input` 的张量描述,支持原位计算;
+- `input_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子输入 `input` 的张量描述,支持原位计算;
+- `grad_output_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子输入 `grad_output` 的张量描述,支持原位计算;
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `BFloat16`) 之一。
+- 输入 `grad_output` 与 `input` 的形状需与 `grad_input` 相同。
+- 支持原位计算,即计算时 `grad_input` 可以和 `input` 或 `grad_output` 指向同一地址。
+
+返回值:
+
+- [`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 infiniopGetSigmoidBackwardWorkspaceSize(
+ infiniopSigmoidBackwardDescriptor_t desc,
+ size_t *size
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateSigmoidBackwardDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]。
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroySigmoidBackwardDescriptor(
+ infiniopSigmoidBackwardDescriptor_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_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
+[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
+[`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/sin/README.md b/infiniop/ops/sin/README.md
new file mode 100644
index 0000000..0b8d612
--- /dev/null
+++ b/infiniop/ops/sin/README.md
@@ -0,0 +1,130 @@
+# `Sin`
+
+`Sin`(正弦算子)为**单目逐元素算子**,定义:
+
+$$
+\mathrm{Sin}(x)=\sin(x)
+$$
+
+其中 `input` 为输入,`output` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopSin(
+ infiniopSinDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateSinDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_INTERNAL_ERROR`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`].
+
+### 创建算子描述
+
+```c
+infiniStatus_t infiniopCreateSinDescriptor(
+ infiniopHandle_t handle,
+ infiniopSinDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopSinDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `output` 的张量描述,支持原位计算。
+- `input_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `input` 的张量描述,支持原位计算。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `BFloat16`) 之一。
+- `output` 的形状与步长需与 `input` 对应(逐元素一一映射);不涉及广播。
+- 支持原位计算,即计算时 `output` 可以与 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(其步长不得为 0)。
+
+ 返回值:
+
+- [`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 infiniopGetSinWorkspaceSize(
+ infiniopSinDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateSinDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroySinDescriptor(
+ infiniopSinDescriptor_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_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
+[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
+[`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/tanh/README.md b/infiniop/ops/tanh/README.md
new file mode 100644
index 0000000..7722fe0
--- /dev/null
+++ b/infiniop/ops/tanh/README.md
@@ -0,0 +1,130 @@
+# `Tanh`
+
+`Tanh`(双曲正切算子)为**单目逐元素算子**,定义:
+
+$$
+\mathrm{Tanh}(x)=\tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
+$$
+
+其中 `input` 为输入,`output` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopTanh(
+ infiniopTanhDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateTanhDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`], [`INFINI_STATUS_INTERNAL_ERROR`], [`INFINI_STATUS_BAD_TENSOR_DTYPE`].
+
+### 创建算子描述
+
+```c
+infiniStatus_t infiniopCreateTanhDescriptor(
+ infiniopHandle_t handle,
+ infiniopTanhDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopTanhDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `output` 的张量描述,支持原位计算。
+- `input_desc` - { dT | (d1,...,dn) | (...) }:
+ 参数 `input` 的张量描述,支持原位计算。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `BFloat16`) 之一。
+- `output` 的形状与步长需与 `input` 对应(逐元素一一映射);不涉及广播。
+- 支持原位计算,即计算时 `output` 可以与 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(其步长不得为 0)。
+
+ 返回值:
+
+- [`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 infiniopGetTanhWorkspaceSize(
+ infiniopTanhDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateTanhDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyTanhDescriptor(
+ infiniopTanhDescriptor_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_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
+[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
+[`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/where/README.md b/infiniop/ops/where/README.md
new file mode 100644
index 0000000..b5070dc
--- /dev/null
+++ b/infiniop/ops/where/README.md
@@ -0,0 +1,150 @@
+# `Where`
+
+`Where`,即**条件选择**算子。对每个元素位置,根据布尔条件张量 `condition`,从 `a` 或 `b` 中选择对应元素写入输出张量 `c`。本算子等价于三目运算:`c = condition ? a : b`。
+
+对输入张量 `a`、`b`,布尔张量 `condition`,输出张量 `c`,逐元素计算如下:
+
+$$
+c_i =
+\begin{cases}
+a_i & \text{if } condition_i = \text{true} \\
+b_i & \text{if } condition_i = \text{false}
+\end{cases}
+$$
+
+示例:
+若 `a = [-1, 10, 3]`,`b = [0, 20, 4]`,`condition = [true, false, true]`,则输出 `c = [-1, 20, 3]`。
+当存在形状不一致时,`a`、`b` 与 `condition` 需可按多向广播规则与 `c` 对齐。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopWhere(
+ infiniopWhereDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *c,
+ const void *condition,
+ const void *a,
+ const void *b,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateWhereDescriptor()` 初始化的算子描述符。
+- `workspace`:
+ 算子执行所需的工作空间指针。
+- `workspace_size`:
+ 工作空间大小(字节)。
+- `c`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `a`:
+ 输入张量;当 `condition` 为 `true` 时取用。张量限制见[创建算子描述](#创建算子描述)部分;
+- `b`:
+ 输入张量;当 `condition` 为 `false` 时取用。张量限制见[创建算子描述](#创建算子描述)部分;
+- `condition`:
+ 布尔条件张量(`Bool`),决定在各元素位置从 `a` 或 `b` 取值。张量限制见[创建算子描述](#创建算子描述)部分;
+- `stream`:
+ 计算流/队列。
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`],[`INFINI_STATUS_BAD_TENSOR_DTYPE`],[`INFINI_STATUS_BAD_TENSOR_SHAPE`],[`INFINI_STATUS_INSUFFICIENT_WORKSPACE`]
+,[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 创建算子描述符
+
+```c
+infiniStatus_t infiniopCreateWhereDescriptor(
+ infiniopHandle_t handle,
+ infiniopWhereDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t c,
+ infiniopTensorDescriptor_t condition,
+ infiniopTensorDescriptor_t a,
+ infiniopTensorDescriptor_t b
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详见:[`InfiniopHandle_t`]
+- `desc_ptr`:
+ `infiniopWhereDescriptor_t` 指针,指向将被初始化的算子描述符地址。
+- `c` - {dT | (d1, ..., dn) | (...)}:
+ 输出张量描述。其形状应为 `a`、`b`、`condition` 的广播结果。
+- `a` - {dT | (d1, ..., dn) | (...)}:
+ 输入张量描述。
+- `b` - {dT | (d1, ..., dn) | (...)}:
+ 输入张量描述。
+- `condition` - {Bool | (d1, ..., dn) | (...)}:
+ 布尔条件张量描述。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `Float64`, `BFloat16`,`Bool`,`Int8`, `Int16`, `Int32`, `Int64`,`Uint8`, `Uint16`, `Uint32`, `Uint64`) 之一。
+- `a`、`b` 与 `condition` 必须与 `c` 可广播;`c` 的形状为三者广播后的结果。发生多向广播时需通过步长设置完成映射关系。
+- 支持原位计算,即 `c` 可以与 `a` 或 `b` 指向同一地址。
+- 计算输出参数 `c` 不能进行广播(`c` 的步长不能包含 0)。
+
+ 返回值:
+
+- [`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 infiniopGetWhereWorkspaceSize(
+ infiniopWhereDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 输入。已初始化的算子描述符。
+- `workspace_size`:
+ 输出。算子执行所需的工作空间大小(字节)。
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyWhereDescriptor(
+ infiniopWhereDescriptor_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_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_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
+[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
+[`INFINI_STATUS_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE