Skip to content

Commit 90c691e

Browse files
Merge pull request #24 from Graylatzhou/main
docs:The documentation for the Mul Operator
2 parents dc2ff8f + 7a5f069 commit 90c691e

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed

infiniop/ops/mul/README.md

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

0 commit comments

Comments
 (0)