Skip to content

Commit 8eda451

Browse files
Merge pull request #25 from goldenfox2025/main
docs:clip算子文档
2 parents 90c691e + 1bba206 commit 8eda451

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

infiniop/ops/clip/README.md

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
# `Clip`
2+
3+
`Clip`,即**裁剪**算子。用于将输入张量的元素值限制在指定的最小值和最大值范围内。对于超出范围的值,将被裁剪到范围边界。
4+
5+
对于输入张量 $x$,以及两个与输入相同形状的张量参数 $minval$和 $maxval$,输出张量 $y$ 中的每个元素按以下规则计算:
6+
7+
$$
8+
y_i = \begin{cases}
9+
minval_i & \text{if } x_i < minval_i \\
10+
maxval_i & \text{if } x_i > maxval_i \\
11+
x_i & \text{otherwise}
12+
\end{cases}
13+
$$
14+
15+
每个元素都会与输入张量的对应元素进行比较。例如,对于输入张量 $x = [-1.5, 0.5, 2.5]$,minval = [-2.0, 0.0, 1.0],maxval = [0.0, 1.0, 2.0],输出将是 $y = [-1.5, 0.5, 2.0]$。
16+
17+
## 接口
18+
19+
### 计算
20+
21+
```c
22+
infiniStatus_t infiniopClip(
23+
infiniopClipDescriptor_t desc,
24+
void *workspace,
25+
size_t workspace_size,
26+
void *y,
27+
const void *x,
28+
const void *min_val,
29+
const void *max_val,
30+
void *stream
31+
);
32+
```
33+
34+
<div style="background-color: lightblue; padding: 1px;"> 参数: </div>
35+
36+
- `desc`:
37+
已使用 `infiniopCreateClipDescriptor()` 初始化的算子描述符。
38+
- `workspace`:
39+
算子执行所需的工作空间。
40+
- `workspace_size`:
41+
工作空间大小,以字节为单位。
42+
- `y`:
43+
计算输出结果。
44+
- `x`:
45+
输入张量。
46+
- `min_val`:
47+
裁剪的最小值,必须是与输入张量形状相同的张量。
48+
- `max_val`:
49+
裁剪的最大值,必须是与输入张量形状相同的张量。在实现中使用了 `return max(min(x, max_val), min_val)` 的方式,这会导致当 min_val > max_val 时,输出总是等于 min_val。
50+
- `stream`:
51+
计算流/队列。
52+
<div style="background-color: lightblue; padding: 1px;"> 返回值: </div>
53+
54+
- [`INFINI_STATUS_SUCCESS`]
55+
- [`INFINI_STATUS_BAD_TENSOR_DTYPE`]
56+
- [`INFINI_STATUS_INSUFFICIENT_WORKSPACE`]
57+
- [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]
58+
59+
60+
### 创建算子描述符
61+
62+
```c
63+
infiniStatus_t infiniopCreateClipDescriptor(
64+
infiniopHandle_t handle,
65+
infiniopClipDescriptor_t *desc_ptr,
66+
infiniopTensorDescriptor_t y,
67+
infiniopTensorDescriptor_t x,
68+
infiniopTensorDescriptor_t min_val,
69+
infiniopTensorDescriptor_t max_val
70+
);
71+
```
72+
73+
<div style="background-color: lightblue; padding: 1px;"> 参数:</div>
74+
75+
- `handle`:
76+
`infiniopHandle_t` 类型的硬件控柄。详情请看:[`InfiniopHandle_t`]
77+
- `desc_ptr`:
78+
`infiniopClipDescriptor_t` 指针,指向将被初始化的算子描述符地址。
79+
- `y` - {dT | (d1, ..., dn) | (...)} :
80+
算子输出的张量描述。
81+
- `x` - {dT | (d1, ..., dn) | (...)} :
82+
算子输入的张量描述。
83+
- `min_val` - {dT | (d1, ..., dn) | (...)} :
84+
裁剪的最小值张量描述,必须是与输入张量形状相同的张量。
85+
- `max_val` - {dT | (d1, ..., dn) | (...)} :
86+
裁剪的最大值张量描述,必须是与输入张量形状相同的张量。
87+
88+
89+
90+
91+
<div style="background-color: lightblue; padding: 1px;"> 返回值:</div>
92+
93+
- [`INFINI_STATUS_SUCCESS`]
94+
- [`INFINI_STATUS_BAD_TENSOR_DTYPE`]
95+
- [`INFINI_STATUS_BAD_TENSOR_SHAPE`]
96+
- [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]
97+
98+
99+
100+
### 查询工作空间大小
101+
102+
```c
103+
infiniStatus_t infiniopGetClipWorkspaceSize(
104+
infiniopClipDescriptor_t desc,
105+
size_t *workspace_size
106+
);
107+
```
108+
109+
<div style="background-color: lightblue; padding: 1px;"> 参数: </div>
110+
111+
- `desc`:
112+
输入。已初始化的算子描述符。
113+
- `workspace_size`:
114+
输出。算子执行所需的工作空间大小,以字节为单位。
115+
116+
<div style="background-color: lightblue; padding: 1px;"> 返回值: </div>
117+
118+
- [`INFINI_STATUS_SUCCESS`]: 成功获取工作空间大小。
119+
- [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: 当设备类型不受支持时。
120+
121+
### 销毁算子描述符
122+
123+
```c
124+
infiniStatus_t infiniopDestroyClipDescriptor(
125+
infiniopClipDescriptor_t desc
126+
);
127+
```
128+
129+
<div style="background-color: lightblue; padding: 1px;"> 参数: </div>
130+
131+
- `desc`:
132+
输入。待销毁的算子描述符。
133+
134+
<div style="background-color: lightblue; padding: 1px;"> 返回值: </div>
135+
136+
- [`INFINI_STATUS_SUCCESS`]
137+
- [`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]
138+
139+
140+
<!-- 链接 -->
141+
[`InfiniopHandle_t`]: /infiniop/handle/README.md
142+
[`INFINI_STATUS_SUCCESS`]: /common/status/README.md#INFINI_STATUS_SUCCESS
143+
[`INFINI_STATUS_BAD_PARAM`]: /common/status/README.md#INFINI_STATUS_BAD_PARAM
144+
[`INFINI_STATUS_BAD_TENSOR_SHAPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_SHAPE
145+
[`INFINI_STATUS_BAD_TENSOR_DTYPE`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_DTYPE
146+
[`INFINI_STATUS_BAD_TENSOR_STRIDES`]: /common/status/README.md#INFINI_STATUS_BAD_TENSOR_STRIDES
147+
[`INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED`]: /common/status/README.md#INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
148+
[`INFINI_STATUS_INTERNAL_ERROR`]: /common/status/README.md#INFINI_STATUS_INTERNAL_ERROR
149+
[`INFINI_STATUS_INSUFFICIENT_WORKSPACE`]: /common/status/README.md#INFINI_STATUS_INSUFFICIENT_WORKSPACE

0 commit comments

Comments
 (0)