| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 9 个月前 | ||
| 2 个月前 |
Arange
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
功能说明
-
算子功能:从
start起始、以step为步长、到end结束(左闭右开,不含end),生成一个一维等差序列张量并写入out。start、end、step均为 Host 侧标量(aclScalar),out为一维输出张量(aclTensor)。功能与昇腾内置aclnnArange、PyTorchtorch.arange一致。 -
计算公式:
序列元素:
outi=start+i×step,i=0,1,…,N−1\text{out}_i = \text{start} + i \times \text{step}, \quad i = 0, 1, \dots, N-1
输出元素个数 N(左闭右开,向上取整):
N=⌈end−startstep⌉N = \left\lceil \frac{\text{end} - \text{start}}{\text{step}} \right\rceil
取整口径为
ceil(左闭右开),与昇腾内置aclnnArange/ PyTorchtorch.arange一致。其中out的元素个数 N 由调用方按上式计算,并据此分配并构造out张量(shape 为[N]);算子本身不重新计算或校验 N(详见“约束说明 - 调用方前置约束”)。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| start | 输入 | Host 侧的 aclScalar,取值范围的起始位置,对应公式中的 start。 | FLOAT、FLOAT16、BFLOAT16、INT8、UINT8、INT16、INT32、INT64 | ND |
| end | 输入 | Host 侧的 aclScalar,取值范围的结束位置(左闭右开,不含 end),对应公式中的 end。 | FLOAT、FLOAT16、BFLOAT16、INT8、UINT8、INT16、INT32、INT64 | ND |
| step | 输入 | Host 侧的 aclScalar,取值的步长,对应公式中的 step。 | FLOAT、FLOAT16、BFLOAT16、INT8、UINT8、INT16、INT32、INT64 | ND |
| out | 输出 | 一维输出张量,存放等差序列,shape 为 [N],对应公式中的 out。 | FLOAT、FLOAT16、BFLOAT16、INT8、UINT8、INT16、INT32、INT64 | ND |
start、end、step、out四者的数据类型必须保持一致,不做跨数据类型推导。
关于 INT32 / INT64:算子原型实际注册 8 种数据类型(FLOAT / FLOAT16 / BFLOAT16 / INT8 / UINT8 / INT16 / INT32 / INT64)。其中 INT8 / UINT8 / INT16 为必测数据类型;INT32 / INT64 为兼容保留项(INT32 同时是 examples 与性能对标的主用例)。INT32 / INT64 同样走 FP32 中间域计算(详见“功能说明”),由于 FP32 尾数仅 24 位,当序列值的绝对值 超过 2^24(16777216) 时存在精度损失(无法精确表示该量级的整数),调用方应在该约束内使用,或避免对超大值域使用 INT32 / INT64。
约束说明
算子约束
start、end、step、out四者的数据类型必须保持一致,且数据格式只支持 ND。out不支持空 Tensor(要求 N ≥ 1)。- 整数类型(INT8、UINT8、INT16)输出当序列值超出对应类型值域时,按硬件 Cast 饱和(clamp) 语义处理(例如 INT8 越界值截断到 [-128, 127])。该行为已在 NPU 上实测确认,调用方应保证序列值落在目标类型值域内以获得与 CPU 标杆一致的结果。
- 确定性:算子为纯逐元素等差序列生成(
out[i] = start + i*step),无 Reduce、无核间累加,相同输入恒产生相同输出,默认确定性实现。
调用方前置约束(值级,由调用方保证;接口不做值级校验)
aclnnArange 接口的入参校验仅覆盖数据类型(白名单 + 四者一致性)与空指针;以下值级约束属于调用方前置条件,接口不做值级校验。调用方须在调用前自行保证,否则行为未定义:
| 前置约束 | 调用方须保证 |
|---|---|
| step ≠ 0 | step 非零 |
| step 符号匹配 | step > 0 时 start < end;step < 0 时 start > end(即 (end - start) 与 step 同号,N ≥ 1) |
| UINT8 非负 | out 为 UINT8 时,start / end / step 均需为非负,且需 step > 0、start < end(UINT8 不可表示负值) |
| N 由调用方计算 | out 的元素个数 N = ceil((end - start) / step),由调用方按该公式计算并据此分配、构造 out 张量;算子不重新计算或校验 N |
| N ≥ 1 | 不支持空 Tensor,N ≤ 0 为非法输入 |
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn 调用 | test_aclnn_arange | 通过 aclnnArange 两段式接口(aclnnArangeGetWorkspaceSize + aclnnArange)调用 Arange 算子,覆盖 FLOAT 升序、负 step 降序、INT8 等多组用例。 |
测试命令调用方式:bash build.sh --run_example arange eager cust --vendor_name=custom --experimental(参考 build.sh 调用说明)。
贡献说明
| 贡献者 | 贡献方 | 贡献算子 | 贡献时间 | 贡献内容 |
|---|---|---|---|---|
| forge | 个人贡献者 | Arange | 2026-06 | 扩展 INT8/UINT8/INT16 数据类型;动态多核 former/tail 切分;ArithProgression 等性能优化 |