Skip to content

Commit 838a9c7

Browse files
Merge pull request #26 from wooway777/SubOp
issue/205 - Doc - Added the documentation for the sub operator.
2 parents 8eda451 + b223951 commit 838a9c7

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

infiniop/ops/sub/README.md

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
2+
# `Sub`
3+
4+
`Sub`, 即**减法**算子,为双目逐元素算子。其计算可被表述为:
5+
6+
$$ c = a - b $$
7+
8+
其中 a 和 b 为输入,c 为输出。
9+
10+
## 接口
11+
12+
### 计算
13+
14+
```c
15+
infiniStatus_t infiniopSub(
16+
infiniopSubDescriptor_t desc,
17+
void *workspace,
18+
size_t workspace_size,
19+
void *c,
20+
const void *a,
21+
const void *b,
22+
void *stream
23+
);
24+
```
25+
26+
<div style="background-color: lightblue; padding: 1px;"> 参数: </div>
27+
28+
- `desc`:
29+
已使用 `infiniopCreateSubDescriptor()` 初始化的算子描述符;
30+
- `workspace`:
31+
指向算子计算所需的额外工作空间;
32+
- `workspace_size`:
33+
`workspace` 的大小,单位:字节;
34+
- `c`:
35+
输出张量。张量限制见[创建算子描述](#创建算子描述)部分;
36+
- `a`:
37+
输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
38+
- `b`:
39+
输入张量。张量限制见[创建算子描述](#创建算子描述)部分;
40+
- `stream`:
41+
计算流/队列;
42+
43+
<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>
44+
45+
- [`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`].
46+
47+
### 创建算子描述
48+
49+
```c
50+
infiniStatus_t infiniopCreateSubDescriptor(
51+
infiniopHandle_t handle,
52+
infiniopSubDescriptor_t *desc_ptr,
53+
infiniopTensorDescriptor_t c_desc,
54+
infiniopTensorDescriptor_t a_desc,
55+
infiniopTensorDescriptor_t b_desc
56+
);
57+
```
58+
59+
<div style="background-color: lightblue; padding: 1px;"> 参数:</div>
60+
61+
- `handle`:
62+
`infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]
63+
- `desc_ptr`:
64+
`infiniopSubDescriptor_t` 指针,指向将被初始化的算子描述符地址;
65+
- `c_desc` - { dT | (d1,...,dn) | (...) }:
66+
算子计算参数 `c` 的张量描述,支持原位计算。
67+
- `a_desc` - { dT | (d1,...,dn) | (...) }:
68+
算子计算参数 `a` 的张量描述,支持原位计算,支持多向广播。
69+
- `b_desc` - { dT | (d1,...,dn) | (...) }:
70+
算子计算参数 `b` 的张量描述,支持原位计算,支持多向广播。
71+
72+
参数限制:
73+
74+
- `dT`: (`Float16`, `Float32`, `Float64`) 之一。
75+
- 输入 `a``b` 的形状需与 `c` 相同。`a``b` 涉及多向广播时需调整步长以匹配多向广播的映射关系。
76+
- 支持原位计算,即计算时 `c` 可以和 `a``b` 指向同一地址。
77+
- 计算输出参数 `c` 不能进行广播(`c` 的步长不能涉及广播设置,即步长不能有 0)
78+
79+
<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>
80+
81+
- [`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`].
82+
83+
### 计算额外工作空间
84+
85+
```c
86+
infiniStatus_t infiniopGetSubWorkspaceSize(
87+
infiniopSubDescriptor_t desc,
88+
size_t *size
89+
);
90+
```
91+
92+
<div style="background-color: lightblue; padding: 1px;"> 参数:</div>
93+
94+
- `desc`:
95+
已使用 `infiniopCreateSubDescriptor()` 初始化的算子描述符;
96+
- `size`:
97+
额外空间大小的计算结果的写入地址;
98+
99+
<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>
100+
101+
- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_NULL_POINTER`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
102+
103+
### 销毁算子描述符
104+
105+
```c
106+
infiniStatus_t infiniopDestroySubDescriptor(
107+
infiniopSubDescriptor_t desc
108+
);
109+
```
110+
111+
<div style="background-color: lightblue; padding: 1px;"> 参数: </div>
112+
113+
- `desc`:
114+
输入。 待销毁的算子描述符;
115+
116+
<div style="background-color: lightblue; padding: 1px;"> 返回值: </div>
117+
118+
- [`INFINI_STATUS_SUCCESS`], [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`].
119+
120+
## 已知问题
121+
122+
123+
124+
<!-- 链接 -->
125+
[`InfiniopHandle_t`]: /infiniop/handle/README.md
126+
127+
[`INFINI_STATUS_SUCCESS`]: /common/status/README.md#INFINI_STATUS_SUCCESS
128+
[`INFINI_STATUS_BAD_PARAM`]: /common/status/README.md#INFINI_STATUS_BAD_PARAM
129+
[`INFINI_STATUS_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE
130+
[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
131+
[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
132+
[`INFINI_STATUS_NULL_POINTER`]: /common/status/README.md#INFINI_STATUS_NULL_POINTER
133+
[`INFINI_STATUS_BAD_TENSOR_SHAPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_SHAPE
134+
[`INFINI_STATUS_BAD_TENSOR_DTYPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_DTYPE
135+
[`INFINI_STATUS_BAD_TENSOR_STRIDES`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_STRIDES

0 commit comments

Comments
 (0)