diff --git a/infiniop/ops/README.md b/infiniop/ops/README.md
index 0633ec6..2435cb5 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)
+- [`Silu`](/infiniop/ops/silu/README.md)
+- [`Div`](/infiniop/ops/div/README.md)
+- [`And`](/infiniop/ops/and/README.md)
+- [`Or`](/infiniop/ops/or/README.md)
+- [`Equal`](/infiniop/ops/equal/README.md)
+- [`ReLU Backward`](/infiniop/ops/relu_backward/README.md)
+- [`GeLU`](/infiniop/ops/gelu/README.md)
+- [`GeLU Backward`](/infiniop/ops/gelu_backward/README.md)
+- [`CrossEntropyLoss Backward`](/infiniop/ops/cross_entropy_loss_backward/README.md)
\ No newline at end of file
diff --git a/infiniop/ops/and/README.md b/infiniop/ops/and/README.md
new file mode 100644
index 0000000..8985ae1
--- /dev/null
+++ b/infiniop/ops/and/README.md
@@ -0,0 +1,137 @@
+# `And`
+
+`And`,即**逻辑与**算子,为双目逐元素算子。其计算可表述为:
+
+$$
+c = a \land b
+$$
+
+其中 `a` 和 `b` 为输入,`c` 为输出布尔张量。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopAnd(
+ infiniopAndDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *c,
+ const void *a,
+ const void *b,
+ void *stream
+);
+```
+
+
参数:
+
+- `desc`:
+ 已使用 `infiniopCreateAndDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `c`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `a`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `b`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `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 infiniopCreateAndDescriptor(
+ infiniopHandle_t handle,
+ infiniopAndDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t c_desc,
+ infiniopTensorDescriptor_t a_desc,
+ infiniopTensorDescriptor_t b_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopAndDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `c_desc` - { Bool | (d1,...,dn) | (...) }:
+ 算子计算参数 `c` 的张量描述,支持原位计算。
+- `a_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `a` 的张量描述,支持原位计算,支持多向广播。
+- `b_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `b` 的张量描述,支持原位计算,支持多向广播。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `Float64`, `BFloat16`,`Bool`,`Int8`, `Int16`, `Int32`, `Int64`,`Uint8`, `Uint16`, `Uint32`, `Uint64`) 之一。
+- 输入 `a` 与 `b` 的形状需与 `c` 相同。`a` 与 `b` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `c` 可以和 `a` 或 `b` 指向同一地址(仅`a`和`b`同为Bool类型)。当`a`或`b`不为Bool类型时,不支持原位计算。
+- 计算输出参数 `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 infiniopGetAndWorkspaceSize(
+ infiniopAndDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateAndDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyAndDescriptor(
+ infiniopAndDescriptor_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/cross_entropy_loss_backward/README.md b/infiniop/ops/cross_entropy_loss_backward/README.md
new file mode 100644
index 0000000..eeb6c91
--- /dev/null
+++ b/infiniop/ops/cross_entropy_loss_backward/README.md
@@ -0,0 +1,137 @@
+# `CrossEntropyLoss Backward`
+
+`CrossEntropyLoss Backward`,即 **交叉熵损失*- 的反向算子。梯度按元素计算如下(假设 `probs` 为已归一化的类别概率,`target` 为与 `logits` 同形状的 one-hot 张量):
+
+$$
+\textbf{grad\_logits}=\frac{\textbf{probs}-\textbf{target}}{N},
+$$
+
+其中 $N$ 为归一化因子(常见取法:对批量求平均时 $N=$ 批大小;逐样本/逐位置计算时可取 $N=1$)。
+
+`probs` 与 `target` 为输入,`grad_logits` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopCrossEntropyLossBackward(
+ infiniopCrossEntropyLossBackwardDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *grad_logits,
+ const void *probs,
+ const void *target,
+ void *stream
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateCrossEntropyLossBackwardDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `grad_logits`:
+ 输出张量(∂L/∂logits)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `probs`:
+ 概率张量(通常为 softmax 输出)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `target`:
+ one-hot 目标张量(形状与 `logits` 相同)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `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 infiniopCreateCrossEntropyLossBackwardDescriptor(
+ infiniopHandle_t handle,
+ infiniopCrossEntropyLossBackwardDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t grad_logits_desc,
+ infiniopTensorDescriptor_t probs_desc,
+ infiniopTensorDescriptor_t target_desc
+);
+```
+
+参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopCrossEntropyLossBackwardDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `grad_logits_desc` - { dT | (d1,...,dn) | (...) }:
+ 输出 `grad_logits` 的张量描述,支持原位计算;
+- `probs_desc` - { dT | (d1,...,dn) | (...) }:
+ 输入 `probs` 的张量描述,支持原位计算;
+- `target_desc` - { dT | (d1,...,dn) | (...) }:
+ 输入 `target` 的张量描述,支持原位计算;
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `Float64`, `BFloat16`) 之一。
+- 输入 `probs` 与 `target` 的形状需与 `grad_logits` 相同。
+- 支持原位计算,即计算时`grad_logits` 可与 `probs` 或 `target` 指向同一地址。
+
+返回值:
+
+- [`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 infiniopGetCrossEntropyLossBackwardWorkspaceSize(
+ infiniopCrossEntropyLossBackwardDescriptor_t desc,
+ size_t *size
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateCrossEntropyLossBackwardDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyCrossEntropyLossBackwardDescriptor(
+ infiniopCrossEntropyLossBackwardDescriptor_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/div/README.md b/infiniop/ops/div/README.md
new file mode 100644
index 0000000..4163514
--- /dev/null
+++ b/infiniop/ops/div/README.md
@@ -0,0 +1,137 @@
+# `Div`
+
+`Div`,即**除法**算子,为**双目逐元素**算子。其计算可被表述为:
+
+$$
+c = a \div b
+$$
+
+其中 `a` 和 `b` 为输入,`c` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopDiv(
+ infiniopDivDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *c,
+ const void *a,
+ const void *b,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateMulDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `c`:
+ 输出张量。张量限制见创建算子描述部分;
+- `a`:
+ 输入张量。张量限制见创建算子描述部分;
+- `b`:
+ 输入张量。张量限制见创建算子描述部分;
+- `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 infiniopCreateDivDescriptor(
+ infiniopHandle_t handle,
+ infiniopDivDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t c_desc,
+ infiniopTensorDescriptor_t a_desc,
+ infiniopTensorDescriptor_t b_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopMulDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `c_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `c` 的张量描述,支持原位计算。
+- `a_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `a` 的张量描述,支持原位计算,支持多向广播。
+- `b_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `b` 的张量描述,支持原位计算,支持多向广播。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `Float64`, `BFloat16`) 之一。
+- 输入 `a` 与 `b` 的形状需与 `c` 相同。`a` 与 `b` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `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 infiniopGetDivWorkspaceSize(
+ infiniopDivDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateDivDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyDivDescriptor(
+ infiniopDivDescriptor_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/equal/README.md b/infiniop/ops/equal/README.md
new file mode 100644
index 0000000..f46e57c
--- /dev/null
+++ b/infiniop/ops/equal/README.md
@@ -0,0 +1,137 @@
+# `Equal`
+
+`Equal`,即**相等比较**算子,为双目逐元素算子。其计算可被表述为:
+
+$$
+c = (a == b)
+$$
+
+其中 `a` 与 `b` 为输入张量,`c` 为输出布尔张量(元素值为 `true` 或 `false`)。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopEqual(
+ infiniopEqualDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *c,
+ const void *a,
+ const void *b,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateEqualDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `c`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `a`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `b`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `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 infiniopCreateEqualDescriptor(
+ infiniopHandle_t handle,
+ infiniopEqualDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t c_desc,
+ infiniopTensorDescriptor_t a_desc,
+ infiniopTensorDescriptor_t b_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopEqualDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `c_desc` - { Bool | (d1,...,dn) | (...) }:
+ 算子计算参数 `c` 的张量描述,支持原位计算。
+- `a_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `a` 的张量描述,支持原位计算,支持多向广播。
+- `b_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `b` 的张量描述,支持原位计算,支持多向广播。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `Float64`, `BFloat16`,`Bool`,`Int8`, `Int16`, `Int32`, `Int64`,`Uint8`, `Uint16`, `Uint32`, `Uint64`) 之一。
+- 输入 `a` 与 `b` 的形状需与 `c` 相同。`a` 与 `b` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `c` 可以和 `a` 或 `b` 指向同一地址(仅`a`和`b`同为Bool类型)。当`a`或`b`不为Bool类型时,不支持原位计算。
+- 计算输出参数 `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 infiniopGetEqualWorkspaceSize(
+ infiniopEqualDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateEqualDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyEqualDescriptor(
+ infiniopEqualDescriptor_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/gelu/README.md b/infiniop/ops/gelu/README.md
new file mode 100644
index 0000000..18c5c39
--- /dev/null
+++ b/infiniop/ops/gelu/README.md
@@ -0,0 +1,130 @@
+# `GELU`
+
+`GELU`(Gaussian Error Linear Unit),为单目逐元素激活算子。本实现采用**近似形式**,参考 `torch.nn.functional.gelu` 的 tanh 近似:
+
+$$
+\mathrm{GELU}(x)\approx \tfrac{1}{2}\,x\left(1+\tanh\!\Big(\sqrt{\tfrac{2}{\pi}}\,(x+0.044715\,x^{3})\Big)\right)
+$$
+
+其中 `input` 为输入,`output` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopGELU(
+ infiniopGELUDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateGELUDescriptor()` 初始化的算子描述符;
+- `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 infiniopCreateGELUDescriptor(
+ infiniopHandle_t handle,
+ infiniopGELUDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopGELUDescriptor_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 infiniopGetGELUWorkspaceSize(
+ infiniopGELUDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateGELUDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyGELUDescriptor(
+ infiniopGELUDescriptor_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/gelu_backward/README.md b/infiniop/ops/gelu_backward/README.md
new file mode 100644
index 0000000..0dce7f1
--- /dev/null
+++ b/infiniop/ops/gelu_backward/README.md
@@ -0,0 +1,140 @@
+# `GeLU Backward`
+
+`GeLU Backward`,即 **高斯误差线性单元** 的反向算子。其梯度计算采用近似实现(tanh 近似)并逐元素进行:
+
+$$
+\begin{aligned}
+\text{GeLU}(x) &\approx \tfrac12 x\left(1+\tanh\big(u\big)\right), \\
+u &= \alpha\,(x + \beta x^3),\quad \alpha=\sqrt{2/\pi},\ \beta=0.044715, \\
+\frac{d\,\text{GeLU}(x)}{dx} &\approx \tfrac12\left(1+\tanh(u)\right) + \tfrac12 x\,\text{sech}^2(u)\,\alpha\,(1+3\beta x^2), \\
+\textbf{grad\_input} &= \textbf{grad\_output}\ \odot\ \frac{d\,\text{GeLU}(\textbf{input})}{d\,\textbf{input}}.
+\end{aligned}
+$$
+
+其中 `input` 与 `grad_output` 为输入,`grad_input` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopGeluBackward(
+ infiniopGeluBackwardDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *grad_input,
+ const void *input,
+ const void *grad_output,
+ void *stream
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateGeluBackwardDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `grad_input`:
+ 输出张量(∂L/∂input)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 前向输入张量 `x`。张量限制见[创建算子描述](#创建算子描述)部分;
+- `grad_output`:
+ 上游梯度张量(∂L/∂GeLU(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 infiniopCreateGeluBackwardDescriptor(
+ infiniopHandle_t handle,
+ infiniopGeluBackwardDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t grad_input_desc,
+ infiniopTensorDescriptor_t input_desc,
+ infiniopTensorDescriptor_t grad_output_desc
+);
+```
+
+参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopGeluBackwardDescriptor_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 infiniopGetGeluBackwardWorkspaceSize(
+ infiniopGeluBackwardDescriptor_t desc,
+ size_t *size
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateGeluBackwardDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyGeluBackwardDescriptor(
+ infiniopGeluBackwardDescriptor_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/or/README.md b/infiniop/ops/or/README.md
new file mode 100644
index 0000000..921c294
--- /dev/null
+++ b/infiniop/ops/or/README.md
@@ -0,0 +1,137 @@
+# `Or`
+
+`Or`,即**逻辑或**算子,为双目逐元素算子。其计算可被表述为:
+
+$$
+c = a \lor b
+$$
+
+其中 `a` 和 `b` 为输入,`c` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopOr(
+ infiniopOrDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *c,
+ const void *a,
+ const void *b,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateOrDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `c`:
+ 输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `a`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `b`:
+ 输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
+- `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 infiniopCreateOrDescriptor(
+ infiniopHandle_t handle,
+ infiniopOrDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t c_desc,
+ infiniopTensorDescriptor_t a_desc,
+ infiniopTensorDescriptor_t b_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopOrDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `c_desc` - { Bool | (d1,...,dn) | (...) }:
+ 算子计算参数 `c` 的张量描述,支持原位计算。
+- `a_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `a` 的张量描述,支持原位计算,支持多向广播。
+- `b_desc` - { dT | (d1,...,dn) | (...) }:
+ 算子计算参数 `b` 的张量描述,支持原位计算,支持多向广播。
+
+参数限制:
+
+- `dT`: (`Float16`, `Float32`, `Float64`, `BFloat16`,`Bool`,`Int8`, `Int16`, `Int32`, `Int64`,`Uint8`, `Uint16`, `Uint32`, `Uint64`) 之一。
+- 输入 `a` 与 `b` 的形状需与 `c` 相同。`a` 与 `b` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
+- 支持原位计算,即计算时 `c` 可以和 `a` 或 `b` 指向同一地址(仅`a`和`b`同为Bool类型)。当`a`或`b`不为Bool类型时,不支持原位计算。
+- 计算输出参数 `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 infiniopGetOrWorkspaceSize(
+ infiniopOrDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateOrDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyOrDescriptor(
+ infiniopOrDescriptor_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/relu_backward/README.md b/infiniop/ops/relu_backward/README.md
new file mode 100644
index 0000000..bdf6984
--- /dev/null
+++ b/infiniop/ops/relu_backward/README.md
@@ -0,0 +1,148 @@
+# `ReLU Backward`
+
+`ReLU Backward`,即 **线性整流单元** 的反向算子。其梯度计算为:
+
+$$
+\operatorname{ReLU}(x)=\max(0,x),\quad
+\frac{d\,\operatorname{ReLU}(x)}{dx}=
+\begin{cases}
+1, & x>0\\
+0, & x\le 0
+\end{cases}
+$$
+
+$$
+\textbf{grad\_input}=\textbf{grad\_output}\odot \mathbf{1}\{\textbf{input}>0\}.
+$$
+
+(在不可导点 $x=0$ 处采用 0 的次梯度约定。)
+
+其中 `input` 与 `grad_output` 为输入,`grad_input` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopReluBackward(
+ infiniopReluBackwardDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *grad_input,
+ const void *input,
+ const void *grad_output,
+ void *stream
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateReluBackwardDescriptor()` 初始化的算子描述符;
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `grad_input`:
+ 输出张量(∂L/∂input)。张量限制见[创建算子描述](#创建算子描述)部分;
+- `input`:
+ 前向输入张量 `x`。张量限制见[创建算子描述](#创建算子描述)部分;
+- `grad_output`:
+ 上游梯度张量(∂L/∂ReLU(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 infiniopCreateReluBackwardDescriptor(
+ infiniopHandle_t handle,
+ infiniopReluBackwardDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t grad_input_desc,
+ infiniopTensorDescriptor_t input_desc,
+ infiniopTensorDescriptor_t grad_output_desc
+);
+```
+
+参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopReluBackwardDescriptor_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_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 infiniopGetReluBackwardWorkspaceSize(
+ infiniopReluBackwardDescriptor_t desc,
+ size_t *size
+);
+```
+
+参数:
+
+- `desc`:
+ 已使用 `infiniopCreateReluBackwardDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroyReluBackwardDescriptor(
+ infiniopReluBackwardDescriptor_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/silu/README.md b/infiniop/ops/silu/README.md
new file mode 100644
index 0000000..424e57c
--- /dev/null
+++ b/infiniop/ops/silu/README.md
@@ -0,0 +1,130 @@
+# `SiLU`
+
+`SiLU`(Sigmoid Linear Unit),为单目逐元素激活算子。其计算可被表述为:
+
+$$
+\mathrm{SiLU}(x)=x\cdot\sigma(x),\quad \sigma(x)=\frac{1}{1+e^{-x}}
+$$
+
+其中 `input` 为输入,`output` 为输出。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopSiLU(
+ infiniopSiLUDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void *output,
+ const void *input,
+ void *stream
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateSiLUDescriptor()` 初始化的算子描述符;
+- `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 infiniopCreateSiLUDescriptor(
+ infiniopHandle_t handle,
+ infiniopSiLUDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc
+);
+```
+
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopSiLUDescriptor_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 infiniopGetSiLUWorkspaceSize(
+ infiniopSiLUDescriptor_t desc,
+ size_t *size
+);
+```
+
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateSiLUDescriptor()` 初始化的算子描述符;
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+### 销毁算子描述符
+
+```c
+infiniStatus_t infiniopDestroySiLUDescriptor(
+ infiniopSiLUDescriptor_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