diff --git a/infiniop/ops/README.md b/infiniop/ops/README.md
index 0633ec6..7ea8074 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)
+- [`LeakyReLU`](/infiniop/ops/leakyrelu/README.md)
+- [`Tanh`](/infiniop/ops/tanh/README.md)
+- [`Sigmoid Backward`](/infiniop/ops/sigmoid_backward/README.md)
+- [`HardSwish`](/infiniop/ops/hardswish/README.md)
+- [`Cast`](/infiniop/ops/cast/README.md)
+- [`Where`](/infiniop/ops/where/README.md)
diff --git a/infiniop/ops/cast/README.md b/infiniop/ops/cast/README.md
new file mode 100644
index 0000000..dd8192b
--- /dev/null
+++ b/infiniop/ops/cast/README.md
@@ -0,0 +1,143 @@
+
+# `Cast`
+
+`Cast`,即**数据类型转换**算子,为单目逐元素算子。其计算可被表述为:
+
+$$
+output = \text{Cast}(input, dtype_{dst})
+$$
+
+其中:
+- `input`:输入张量;
+- `dtype_{dst}`:目标数据类型;
+- `output`:输出张量,为 `input` 转换到目标类型后的结果。
+
+## 已支持的类型转换
+
+- **整型 <-> 整型**
+- **无符号整型 <-> 无符号整型**
+- **浮点型 <-> 浮点型**
+- **整型 -> 浮点型**
+- **无符号整型 -> 浮点型**
+- **无符号整型 -> 整型**
+
+## 接口
+
+### 计算
+
+```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
+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` - { dTout | (d1,...,dn) | (...) }:
+ 算子计算参数 `output` 的张量描述。
+- `input_desc` - { dTin | (d1,...,dn) | (...) }:
+ 算子计算参数 `input` 的张量描述,支持多向广播。
+
+参数限制:
+
+- `dTout` 或 `dTin`: (`Float16`, `Float32`, `Float64`, `Int32`, `Int64`, `UInt32`, `UInt64`) 之一。
+- 输入 `input` 的形状需与 `output` 相同。`input` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 不支持原位计算,即计算时 `output` 不可以和 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(`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 infiniopGetCastWorkspaceSize(
+ infiniopCastDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopGetCastWorkspaceSize()` 初始化的算子描述符;
+- `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..0072a65
--- /dev/null
+++ b/infiniop/ops/cos/README.md
@@ -0,0 +1,129 @@
+
+# `Cos`
+
+`Cos`, 即**余弦**算子,为单目逐元素算子。其计算可被表述为:
+
+$$ output = \cos(input) $$
+
+其中 `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
+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`, `Float64`, `BFloat16`) 之一。
+- 输入 `input` 的形状需与 `output` 相同。`input` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `output` 可以和 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(`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`:
+ 已使用 `infiniopGetCosWorkspaceSize()` 初始化的算子描述符;
+- `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..3c86737
--- /dev/null
+++ b/infiniop/ops/exp/README.md
@@ -0,0 +1,129 @@
+
+# `Exp`
+
+`Exp`,即**指数**算子,为单目逐元素算子。其计算可被表述为:
+
+$$ output = \exp(input) $$
+
+其中 `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
+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`, `Float64`, `BFloat16`) 之一。
+- 输入 `input` 的形状需与 `output` 相同。`input` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `output` 可以和 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(`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`:
+ 已使用 `infiniopGetExpWorkspaceSize()` 初始化的算子描述符;
+- `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..4ae4d2b
--- /dev/null
+++ b/infiniop/ops/hardswish/README.md
@@ -0,0 +1,136 @@
+
+# `HardSwish`
+
+`HardSwish`, 即**近似激活函数**,为单目逐元素算子。其计算可被表述为:
+
+$$
+output = \mathrm{HardSwish}(input) =
+\begin{cases}
+0, & input \leq -3 \\
+\dfrac{input \cdot (input+3)}{6}, & -3 < input < 3 \\
+input, & input \geq 3
+\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
+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`, `Float64`, `BFloat16`) 之一。
+- 输入 `input` 的形状需与 `output` 相同。`input` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `output` 可以和 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(`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`:
+ 已使用 `infiniopGetHardswishWorkspaceSize()` 初始化的算子描述符;
+- `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/leakyrelu/README.md b/infiniop/ops/leakyrelu/README.md
new file mode 100644
index 0000000..235e770
--- /dev/null
+++ b/infiniop/ops/leakyrelu/README.md
@@ -0,0 +1,138 @@
+
+# `LeakyReLU`
+
+`LeakyReLU`,即**带泄露系数的激活函数**,为单目逐元素算子。其计算可被表述为:
+
+$$
+output = \mathrm{LeakyReLU}(input) =
+\begin{cases}
+input, & input \geq 0 \\
+\text{negative\_slope} \cdot input, & input < 0
+\end{cases}
+$$
+
+其中 `input` 为输入,`output` 为输出,`negative_slope`为u常数,构建算子时指定。
+
+## 接口
+
+### 计算
+
+```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
+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:
+ 表示负半区的斜率。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `Float64`, `BFloat16`) 之一。
+- 输入 `input` 的形状需与 `output` 相同。`input` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `output` 可以和 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(`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`:
+ 已使用 `infiniopGetLeakyreluWorkspaceSize()` 初始化的算子描述符;
+- `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..83a642a
--- /dev/null
+++ b/infiniop/ops/sigmoid_backward/README.md
@@ -0,0 +1,145 @@
+# `Sigmoid Backward`
+
+`Sigmoid Backward`,即 `Sigmoid` 激活函数的**反向传播算子**,用于计算输入 `input` 对应的梯度 `grad_input`,给定上游梯度 `grad_output`。其计算可被表述为:
+
+令
+$$
+s = \sigma(\text{input}) = \frac{1}{1 + e^{-\text{input}}}
+$$
+
+则
+$$
+\text{grad\_input} = \text{grad\_output} \cdot s \cdot (1 - s)
+$$
+
+其中:
+- `input`:前向传播的输入张量(用于计算 sigmoid 值 s )
+- `grad_output`:上游传来的梯度(对 sigmoid 输出的梯度)
+- `grad_input`:本算子输出,即对 `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:`:
+ 输出张量(对 `input` 的梯度)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `grad_output:`:
+ 输入张量(上游梯度)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `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
+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`, `Float64`, `BFloat16`) 之一。
+- 输入 `grad_output` 和输入 `input` 的形状需与 `grad_input` 相同。`grad_output` 和 `input` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `grad_input` 可以和 `grad_output` 、 `input` 指向同一地址。
+- 计算输出参数 `grad_input` 不能进行广播(`grad_input` 的步长不能涉及广播设置,即步长不能有 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 infiniopGetSigmoidBackwardWorkspaceSize(
+ infiniopSigmoidBackwardDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopGetSigmoidBackwardWorkspaceSize()` 初始化的算子描述符;
+- `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..8aec25d
--- /dev/null
+++ b/infiniop/ops/sin/README.md
@@ -0,0 +1,129 @@
+
+# `Sin`
+
+`Sin`, 即**正弦**算子,为单目逐元素算子。其计算可被表述为:
+
+$$ output = \sin(input) $$
+
+其中 `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
+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`, `Float64`, `BFloat16`) 之一。
+- 输入 `input` 的形状需与 `output` 相同。`input` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `output` 可以和 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(`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`:
+ 已使用 `infiniopGetSinWorkspaceSize()` 初始化的算子描述符;
+- `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..d27ed83
--- /dev/null
+++ b/infiniop/ops/tanh/README.md
@@ -0,0 +1,129 @@
+
+# `Tanh`
+
+`Tanh`,即**双曲正切**算子,为单目逐元素算子。其计算可被表述为:
+
+$$ output = \tanh(input) = \frac{e^{input} - e^{-input}}{e^{input} + e^{-input}} $$
+
+其中 `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
+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`, `Float64`, `BFloat16`) 之一。
+- 输入 `input` 的形状需与 `output` 相同。`input` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `output` 可以和 `input` 指向同一地址。
+- 计算输出参数 `output` 不能进行广播(`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`:
+ 已使用 `infiniopGetTanhWorkspaceSize()` 初始化的算子描述符;
+- `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..feba895
--- /dev/null
+++ b/infiniop/ops/where/README.md
@@ -0,0 +1,143 @@
+
+# `Where`
+
+`Where`,即**条件选择**算子,为三目逐元素算子。其计算可被表述为:
+
+$$
+c = \text{condition} \ ? \ a : b
+$$
+
+其中 `a`、`b` 与 `condition` 为输入,`c` 为输出。`condition` 为判定条件。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopWhere(
+ infiniopWhereDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *c,
+ const void *a,
+ const void *b,
+ const void *condition,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateWhereDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `c`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `a`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `b`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `condition`:
+ 条件张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `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 infiniopCreateWhereDescriptor(
+ infiniopHandle_t handle,
+ infiniopWhereDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t c_desc,
+ infiniopTensorDescriptor_t a_desc,
+ infiniopTensorDescriptor_t b_desc,
+ infiniopTensorDescriptor_t condition_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopWhereDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `c_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `c` 的张量描述,支持原位计算。
+- `a_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `a` 的张量描述,支持原位计算,支持多向广播。
+- `b_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `b` 的张量描述,支持原位计算,支持多向广播。
+- `condition_desc` - { Bool | (d1,...,dn) | (...) }:
+ 算子计算参数 `condition` 的张量描述,支持原位计算,支持多向广播。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `Float64`, `BFloat16`, `Int8`, `Int16`, `Int32`, `Int64`, `UInt8`, `UInt16`, `UInt32`, `UInt64`) 之一。
+- 输入 `a` 、 `b` 、 `condition` 的形状需与 `c` 相同。`a` 、 `b` 、 `condition` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `c` 可以和 `a` 或 `b` 或 `condition` 指向同一地址。
+- 计算输出参数 `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`:
+ 已使用 `infiniopCreateWhereDescriptor()` 初始化的算子描述符;
+- `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_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