diff --git a/infiniop/ops/README.md b/infiniop/ops/README.md
index 0633ec6..e2e7678 100644
--- a/infiniop/ops/README.md
+++ b/infiniop/ops/README.md
@@ -12,3 +12,10 @@
- [`Softmax`](/infiniop/ops/softmax/README.md)
- [`Sub`](/infiniop/ops/sub/README.md)
- [`SwiGLU`](/infiniop/ops/swiglu/README.md)
+- [`IndexCopyInplace`](/infiniop/ops/index_copy_inplace/README.md)
+- [`Gather`](/infiniop/ops/gather/README.md)
+- [`Scatter`](/infiniop/ops/scatter/README.md)
+- [`Tril`](/infiniop/ops/tril/README.md)
+- [`Triu`](/infiniop/ops/triu/README.md)
+- [`Linear`](/infiniop/ops/linear/README.md)
+- [`LinearBackward`](/infiniop/ops/linear_backward/README.md)
diff --git a/infiniop/ops/gather/README.md b/infiniop/ops/gather/README.md
new file mode 100644
index 0000000..8b69479
--- /dev/null
+++ b/infiniop/ops/gather/README.md
@@ -0,0 +1,129 @@
+
+# `Gather`
+
+对于输入张量`input`、`index`和输出张量`output`,`Gather` 算子为`output`的每个位置赋值,所赋之值在`input`中的来源位置由 `index` 指定。对于 `output` 中的每个值,其来源位置由 `output` 中相对于 dimension != `dim` 的索引,以及 `index` 中对应的值指定。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopGather(
+ infiniopGatherDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void * output,
+ const void * input,
+ const void * index,
+ void *stream
+);
+```
+
参数:
+
+- `desc`:
+ 已使用 `infiniopCreateGatherDescriptor()` 初始化的算子描述符。
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:输出张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `input`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `index`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+ - `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 infiniopCreateGatherDescriptor(
+ infiniopHandle_t handle,
+ infiniopGatherDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc,
+ infiniopTensorDescriptor_t index_desc,
+ size_t dim
+);
+```
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopAddDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | ($\rm{d_o1}$, ..., $\rm{d_on}$) | ($...$) }:
+ 算子计算参数 `output` 的张量描述。
+- `input_desc` - { dT | ($\rm{d_i1}$, ..., $\rm{d_in}$) | ($...$) }:
+ 算子计算参数 `input` 的张量描述。
+- `index_desc` - { int | ($\rm{d_o1}$, ..., $\rm{d_on}$) | ($...$) }:
+ 算子计算参数 `index` 的张量描述,每一个元素值 i 应满足 0 $\leq$ i $\lt$ input_shape[dim]。
+- `dim` - int:
+ 算子针对的维度, 满足 0 $\leq$ dim $\lt$ n。
+
+参数限制:
+
+- **`dT`**: (`Float16`, `Float32`, `Bfloat16`) 之一
+- `output`与`index`形状一致,且对于除`dim`的每一维度d, 满足$\rm{d_o}$[d] $\leq$ $\rm{d_i}$[d]。
+
+ 返回值:
+
+- [`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 infiniopGetGatherWorkspaceSize(
+ infiniopGatherDescriptor_t desc,
+ size_t *size
+);
+```
+ 参数:
+
+- `desc`: 使用 `infiniopCreateGatherDescriptor()` 初始化的算子描述符。
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+ - [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+---
+
+### 销毁算子描述符
+
+```c
+infiniopStatus_t infiniopDestroyGatherDescriptor(
+ infiniopGatherDescriptor_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/index_copy_inplace/README.md b/infiniop/ops/index_copy_inplace/README.md
new file mode 100644
index 0000000..87c4ffb
--- /dev/null
+++ b/infiniop/ops/index_copy_inplace/README.md
@@ -0,0 +1,132 @@
+
+# `Index Copy Inplace`
+
+对于输入张量`input`、`index`和输出张量`output`,`Index Copy Inplace` 将 `input` 中的元素按 `index` 提供的针对`dim`维度的顺序复制到 `output` 张量中。
+
+例如,如果 `dim` 等于 0 且 `index`[i] 等于 j,则 `input` 的第 i 行将被复制到 `output` 的第 j 行。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopIndexCopyInplace(
+ infiniopIndexCopyInplaceDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void * output,
+ const void * input,
+ const void * index,
+ void *stream
+);
+```
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateIndexCopyInplaceDescriptor()` 初始化的算子描述符。
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:输出张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `input`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `index`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+ - `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 infiniopCreateIndexCopyInplaceDescriptor(
+ infiniopHandle_t handle,
+ infiniopIndexCopyInplaceDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc,
+ infiniopTensorDescriptor_t index_desc,
+ size_t dim
+);
+```
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopAddDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (d1, ..., $\rm{d_{o,dim}}$,..., dn) | ($...$) }:
+ 算子计算参数 `output` 的张量描述。
+- `input_desc` - { dT | (d1, ..., $\rm{d_{i,dim}}$,..., dn) | ($...$) }:
+ 算子计算参数 `input` 的张量描述。
+- `index_desc` - { int | ($\rm{d_{i,dim}}$) | ($...$) }:
+ 算子计算参数 `index` 的张量描述,每一个元素值i应满足 0 $\leq$ i $\lt$ $\rm{d_{o,dim}}$。
+- `dim` - int:
+ 算子针对的维度, 满足 0 $\leq$ dim $\lt$ n。
+
+参数限制:
+
+- **`dT`**: 所有合法类型
+- `output`与`input`除`dim`外全部维度长度相等。
+- 如果`input`中多组指向`output`同一位置,会出现不确定性。故测试时,通过规定`index`的不可重复,避免此情况发生。
+
+ 返回值:
+
+- [`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 infiniopGetIndexCopyInplaceWorkspaceSize(
+ infiniopIndexCopyInplaceDescriptor_t desc,
+ size_t *size
+);
+```
+ 参数:
+
+- `desc`: 使用 `infiniopCreateIndexCopyInplaceDescriptor()` 初始化的算子描述符。
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+ - [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+---
+
+### 销毁算子描述符
+
+```c
+infiniopStatus_t infiniopDestroyIndexCopyInplaceDescriptor(
+ infiniopIndexCopyInplaceDescriptor_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/linear/README.md b/infiniop/ops/linear/README.md
new file mode 100644
index 0000000..c92124f
--- /dev/null
+++ b/infiniop/ops/linear/README.md
@@ -0,0 +1,136 @@
+
+# `Linear`
+
+`Linear`, 即线性变换算子。其公式如下:
+
+$$
+ \mathrm{\it{y}}=\mathrm{A}\mathrm{\it{x}} + \mathrm{\it{b}}
+$$
+其中`x`和`b`为1D输入向量, `A`为2D输入矩阵, `y`为1D输出向量。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopLinear(
+ infiniopLinearDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void * y,
+ const void * x,
+ const void * w,
+ const void * b,
+ void *stream
+);
+```
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateLinearDescriptor()` 初始化的算子描述符。
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `y`:输出张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `x`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `w`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `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 infiniopCreateLinearDescriptor(
+ infiniopHandle_t handle,
+ infiniopLinearDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t y_desc,
+ infiniopTensorDescriptor_t x_desc,
+ infiniopTensorDescriptor_t w_desc,
+ infiniopTensorDescriptor_t b_desc
+);
+```
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopAddDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `y_desc` - { dT | (out_features) | (...) }:
+ 算子计算参数 `y` 的张量描述。
+- `x_desc` - { dT | (in_features) | (...) }:
+ 算子计算参数 `x` 的张量描述。
+- `w_desc` - { dT | (out_features, in_features) | (...) }:
+ 算子计算参数 `w` 的张量描述。
+- `b_desc` - { dT | (out_features) | (...) }:
+ 算子计算参数 `b` 的张量描述(可选)。
+
+参数限制:
+
+- **`dT`**: (`Float16`, `Float32`, `Bfloat16`) 之一
+- 对于没有bias的情况,`b_desc`传入nullptr。
+
+ 返回值:
+
+- [`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 infiniopGetLinearWorkspaceSize(
+ infiniopLinearDescriptor_t desc,
+ size_t *size
+);
+```
+ 参数:
+
+- `desc`: 使用 `infiniopCreateLinearDescriptor()` 初始化的算子描述符。
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+ - [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+---
+
+### 销毁算子描述符
+
+```c
+infiniopStatus_t infiniopDestroyLinearDescriptor(
+ infiniopLinearDescriptor_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/linear_backward/README.md b/infiniop/ops/linear_backward/README.md
new file mode 100644
index 0000000..4816477
--- /dev/null
+++ b/infiniop/ops/linear_backward/README.md
@@ -0,0 +1,146 @@
+
+# `Linear Backward`
+
+`Linear Backward`, 即`Linear`对应的反向传播算子。其正向公式如下:
+
+$$
+ \mathrm{\it{y}}=\mathrm{A}\mathrm{\it{x}} + \mathrm{\it{b}}
+$$
+其中`x`和`b`为正向运算的1D输入向量, `A`为正向运算的2D输入矩阵, `y`为正向运算的1D输出向量。
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopLinearBackward(
+ infiniopLinearBackwardDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void * grad_x,
+ void * grad_w,
+ void * grad_b,
+ const void * grad_y,
+ const void * x,
+ const void * w,
+ void *stream
+);
+```
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateLinearBackwardDescriptor()` 初始化的算子描述符。
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `grad_x`:输出张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `grad_w`:输出张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `grad_b`:输出张量(可选)。张量限制见[创建算子描述](#创建算子描述)部分。
+- `grad_y`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `x`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `w`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+ - `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 infiniopCreateLinearBackwardDescriptor(
+ infiniopHandle_t handle,
+ infiniopLinearBackwardDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t grad_x_desc,
+ infiniopTensorDescriptor_t grad_w_desc,
+ infiniopTensorDescriptor_t grad_b_desc,
+ infiniopTensorDescriptor_t grad_y_desc,
+ infiniopTensorDescriptor_t x_desc,
+ infiniopTensorDescriptor_t w_desc
+);
+```
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopAddDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `grad_x_desc` - { dT | (in_features) | (...) }:
+ 算子计算参数 `grad_x` 的张量描述,对应`x`的梯度 。
+- `grad_w_desc` - { dT | (out_features, in_features) | (...) }:
+ 算子计算参数 `grad_w` 的张量描述,对应`w`的梯度 。
+- `grad_b_desc` - { dT | (out_features) | (...) }:
+ 算子计算参数 `grad_b` 的张量描述(可选),对应`b`的梯度 。
+- `grad_y_desc` - { dT | (out_features) | (...) }:
+ 算子计算参数 `grad_y` 的张量描述,对应`y`的梯度 。
+- `x_desc` - { dT | (in_features) | (...) }:
+ 算子计算参数 `x` 的张量描述。
+- `w_desc` - { dT | (out_features, in_features) | (...) }:
+ 算子计算参数 `w` 的张量描述。
+
+参数限制:
+
+- **`dT`**: (`Float16`, `Float32`, `Bfloat16`) 之一
+- 对于没有bias的情况,`grad_b_desc`传入nullptr。
+
+ 返回值:
+
+- [`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 infiniopGetLinearBackwardWorkspaceSize(
+ infiniopLinearBackwardDescriptor_t desc,
+ size_t *size
+);
+```
+ 参数:
+
+- `desc`: 使用 `infiniopCreateLinearBackwardDescriptor()` 初始化的算子描述符。
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+ - [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+---
+
+### 销毁算子描述符
+
+```c
+infiniopStatus_t infiniopDestroyLinearBackwardDescriptor(
+ infiniopLinearBackwardDescriptor_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/scatter/README.md b/infiniop/ops/scatter/README.md
new file mode 100644
index 0000000..8295682
--- /dev/null
+++ b/infiniop/ops/scatter/README.md
@@ -0,0 +1,132 @@
+
+# `Scatter`
+
+对于输入张量`input`、`index`和输出张量`output`,`Scatter` 算子将 `input` 张量中的所有值写入 `output` 中,写入位置由 `index` 指定。对于 `input` 中的每个值,其输出索引由 `input` 中相对于 dimension != `dim` 的索引,以及 `index` 中对应的值指定。
+
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopScatter(
+ infiniopScatterDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void * output,
+ const void * input,
+ const void * index,
+ void *stream
+);
+```
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateScatterDescriptor()` 初始化的算子描述符。
+- `workspace`:
+ 指向算子计算所需的额外工作空间;
+- `workspace_size`:
+ `workspace` 的大小,单位:字节;
+- `output`:输出张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `input`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+- `index`:输入张量。张量限制见[创建算子描述](#创建算子描述)部分。
+ - `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 infiniopCreateScatterDescriptor(
+ infiniopHandle_t handle,
+ infiniopScatterDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc,
+ infiniopTensorDescriptor_t index_desc,
+ size_t dim
+);
+```
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopAddDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | ($\rm{d_o1}$, ..., $\rm{d_on}$) | ($...$) }:
+ 算子计算参数 `output` 的张量描述。
+- `input_desc` - { dT | ($\rm{d_i1}$, ..., $\rm{d_in}$) | ($...$) }:
+ 算子计算参数 `input` 的张量描述。
+- `index_desc` - { dT | ($\rm{d_{idx}1}$, ..., $\rm{d_{idx}n}$) | ($...$) }:
+ 算子计算参数 `index` 的张量描述,每一个元素值 i 应满足 0 $\leq$ i $\lt$ $\rm{d_o}$[dim]。
+- `dim` - int:
+ 算子针对的维度, 满足 0 $\leq$ dim $\lt$ n。
+
+参数限制:
+
+- **`dT`**: 全部合法类型
+- 对于每一维度n,满足$\rm{d_{idx}n} \leq \rm{d_{i}n}$
+- 对于除`dim`外的每一维度n,满足$\rm{d_{idx}n} \leq \rm{d_{o}n}$
+- 如果`input`中多个元素指向`output`同一位置,会出现不确定性。故测试时,通过规定`index`的不可重复,避免此情况发生。
+
+ 返回值:
+
+- [`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 infiniopGetScatterWorkspaceSize(
+ infiniopScatterDescriptor_t desc,
+ size_t *size
+);
+```
+ 参数:
+
+- `desc`: 使用 `infiniopCreateScatterDescriptor()` 初始化的算子描述符。
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+ - [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+---
+
+### 销毁算子描述符
+
+```c
+infiniopStatus_t infiniopDestroyScatterDescriptor(
+ infiniopScatterDescriptor_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/tril/README.md b/infiniop/ops/tril/README.md
new file mode 100644
index 0000000..9e4830e
--- /dev/null
+++ b/infiniop/ops/tril/README.md
@@ -0,0 +1,126 @@
+
+# `Tril`
+
+`Tril`算子返回输入2D张量`input`的对角分界线下三角部分,其他元素设置为 0。
+参数 `diagonal` 控制的此操作的对角分界线位置。如果`diagonal`为 0,则保留主对角线及其下的所有元素。以此为基准,`diagonal`取正值对应向上偏移,负值对应向下偏移。
+
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopTril(
+ infiniopTrilDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void * output,
+ const void * input,
+ void *stream
+);
+```
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateTrilDescriptor()` 初始化的算子描述符。
+- `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 infiniopCreateTrilDescriptor(
+ infiniopHandle_t handle,
+ infiniopTrilDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc,
+ int diagonal
+);
+```
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopAddDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (M, N) | (N, 1)}:
+ 算子计算参数 `output` 的张量描述。
+- `input_desc` - { dT | (M, N) | (N, 1)}:
+ 算子计算参数 `input` 的张量描述。
+- `diagonal` - int:
+ 设定对角分界线位置的参数。
+
+参数限制:
+
+- **`dT`**: 全部合法类型
+- `output`与`input`均为2D全连续张量。
+
+ 返回值:
+
+- [`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 infiniopGetTrilWorkspaceSize(
+ infiniopTrilDescriptor_t desc,
+ size_t *size
+);
+```
+ 参数:
+
+- `desc`: 使用 `infiniopCreateTrilDescriptor()` 初始化的算子描述符。
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+ - [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+---
+
+### 销毁算子描述符
+
+```c
+infiniopStatus_t infiniopDestroyTrilDescriptor(
+ infiniopTrilDescriptor_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/triu/README.md b/infiniop/ops/triu/README.md
new file mode 100644
index 0000000..85247c2
--- /dev/null
+++ b/infiniop/ops/triu/README.md
@@ -0,0 +1,126 @@
+
+# `Triu`
+
+`Triu`算子返回输入2D张量`input`的对角分界线上三角部分,其他元素设置为 0。
+参数 `diagonal` 控制的此操作的对角分界线位置。如果`diagonal`为 0,则保留主对角线及其上的所有元素。以此为基准,`diagonal`取正值对应分界线向上偏移,负值对应向下偏移。
+
+
+## 接口
+
+### 计算
+
+```c
+infiniStatus_t infiniopTriu(
+ infiniopTriuDescriptor_t desc,
+ void *workspace,
+ size_t workspace_size,
+ void * output,
+ const void * input,
+ void *stream
+);
+```
+ 参数:
+
+- `desc`:
+ 已使用 `infiniopCreateTriuDescriptor()` 初始化的算子描述符。
+- `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 infiniopCreateTriuDescriptor(
+ infiniopHandle_t handle,
+ infiniopTriuDescriptor_t *desc_ptr,
+ infiniopTensorDescriptor_t output_desc,
+ infiniopTensorDescriptor_t input_desc,
+ int diagonal
+);
+```
+ 参数:
+
+- `handle`:
+ `infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]。
+- `desc_ptr`:
+ `infiniopAddDescriptor_t` 指针,指向将被初始化的算子描述符地址;
+- `output_desc` - { dT | (M, N) | (N, 1)}:
+ 算子计算参数 `output` 的张量描述。
+- `input_desc` - { dT | (M, N) | (N, 1)}:
+ 算子计算参数 `input` 的张量描述。
+- `diagonal` - int:
+ 设定对角分界线位置的参数。
+
+参数限制:
+
+- **`dT`**: 全部合法类型
+- `output`与`input`均为2D全连续张量。
+
+ 返回值:
+
+- [`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 infiniopGetTriuWorkspaceSize(
+ infiniopTriuDescriptor_t desc,
+ size_t *size
+);
+```
+ 参数:
+
+- `desc`: 使用 `infiniopCreateTriuDescriptor()` 初始化的算子描述符。
+- `size`:
+ 额外空间大小的计算结果的写入地址;
+
+ 返回值:
+
+ - [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_BAD_PARAM`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
+
+---
+
+### 销毁算子描述符
+
+```c
+infiniopStatus_t infiniopDestroyTriuDescriptor(
+ infiniopTriuDescriptor_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