Merged
Capi 删除子章节内重复的Reg通用约束,添加链接到概述章节 #6081
Capi 删除子章节内重复的Reg通用约束,添加链接到概述章节 #6081
Merged
chenmykAdd on Sep 16
Total: 199 files changed+2709-845
@@ -1025,6 +1025,8 @@
1025 - [asc_copy_ub2gm_align_arch_3510](SIMD-API/c_api/vector_datamove/asc_copy_ub2gm_align/asc_copy_ub2gm_align_arch_3510.md)1025 - [asc_copy_ub2gm_align_arch_3510](SIMD-API/c_api/vector_datamove/asc_copy_ub2gm_align/asc_copy_ub2gm_align_arch_3510.md)
1026 - [Reg矢量计算](SIMD-API/c_api/reg_compute/reg_compute.md)1026 - [Reg矢量计算](SIMD-API/c_api/reg_compute/reg_compute.md)
1027 - [概述](SIMD-API/c_api/reg_compute/overview.md)1027 - [概述](SIMD-API/c_api/reg_compute/overview.md)
1028+ - [关键特性说明](SIMD-API/c_api/reg_compute/key_features.md)
1029+ - [VF调用](SIMD-API/c_api/reg_compute/vf_call/asc_vf_call.md)
1028 - [Reg数据搬入](SIMD-API/c_api/reg_compute/load/load.md)1030 - [Reg数据搬入](SIMD-API/c_api/reg_compute/load/load.md)
1029 - [Reg数据搬入概述](SIMD-API/c_api/reg_compute/load/reg_load_overview.md)1031 - [Reg数据搬入概述](SIMD-API/c_api/reg_compute/load/reg_load_overview.md)
1030 - [asc_loadalign](SIMD-API/c_api/reg_compute/load/asc_loadalign.md)1032 - [asc_loadalign](SIMD-API/c_api/reg_compute/load/asc_loadalign.md)
@@ -0,0 +1,3 @@
1+version https://git-lfs.github.com/spec/v1
2+oid sha256:cc7db4904857c6c31163de3287a4960cbe3452c0d8498308c05ca2ac0c59286a
3+size 226192
@@ -0,0 +1,3 @@
1+version https://git-lfs.github.com/spec/v1
2+oid sha256:a7256e1979898033626825ed5d1f55365a795285de036796923e03c8eaa56fe0
3+size 252760
@@ -0,0 +1,100 @@
1+# 关键特性说明
2+ 
3+## 硬件循环(HardwareLoop)
4+ 
5+Reg矢量计算架构中,Vector Function(VF)是实现高性能向量计算的核心载体。VF函数中可以包含最多四层嵌套循环,每层循环中还可以包含多个串行循环。VF循环对控制结构的支持有限,仅支持for循环和条件判断,不支持switch、do-while和while-do等其他控制结构。当VF函数中的循环满足Hardware Loop编码规范会被编译器优化为Hardware Loop,提升整体的编码性能,否则它的循环逻辑会由迭代变量和条件判断语句构成Software Loop,无法开启VF循环优化。
6+ 
7+### Hardware Loop编码规范
8+- Hardware Loop最多能支持的嵌套层数为4层;支持串行的Hardware Loop循环。
9+- 迭代变量类型<br>VF内所有Loop的迭代变量必须是uint16_t类型。
10+- 起始值与步长<br>循环起始值从0开始。<br>每次迭代的步长必须是递增1。
11+- 循环内不允许跳转指令,比如条件判断跳转,如if/else、三元运算符?:。<br>VF内if/else在Loop内会阻碍Hardware Loop的生成,编译器虽然会尽可能的做if/else消除优化,但是不做完全性保证。
12+- 一旦执行,循环计数/边界不允许被更改。
13+- 若要利用外层循环的计数作为循环边界,将外层循环计数器赋值给标量后作为内层循环边界。
14+ 
15+## 指令双发优化
16+Reg矢量计算接口指令单双发的情况请参考[Reg矢量计算接口指令单双发汇总](../../../appendix/reg_vector_compute_interface_instruction_single_dual_issue_summary.md)。
17+ 
18+指令双发优化的性能优化详细内容请参考[算子实践参考-指令双发优化](../../../../guide/operator_practice/simd_operator_optimization/vector_compute/vf_optimization/dual_issue_optimization.md)。
19+ 
20+### 指令双发
21+ 
22+指令双发指的是处理器在同一个时钟周期内,能够同时发射两条指令到执行单元进行处理。
23+ 
24+这种机制可以在不改变程序逻辑的前提下,提升处理器在单位时间内的指令处理效率,是实现指令级并行的重要基础之一。
25+ 
26+### 合理拆分VF循环
27+ 
28+VF并不是写的越长,把所有运算都放在一个for循环内就好,需要适当的搬出中间结果到Unified Buffer(UB),减少数据依赖。当指令数量过多,可能触发Icache Miss,即使循环间不存在依赖,也无法进行双发。当循环内包含同步,可以通过切分循环将同步外提减少同步次数。
29+ 
30+### 手动控制循环拆分
31+ 
32+如果循环内存在依赖关系过多的指令,指令无法并发执行,即无法启用双发特性。可以通过展开循环,提升指令双发能力,贴近硬件乱序执行的特性;减少指令因为寄存器资源未到位而产生的等待。
33+ 
34+## VF融合
35+VF融合是将代码中多个VF函数融合成一个VF函数,有效提升性能。VF融合特性是编译器优化特性,通过编译选项--cce-simd-vf-fusion=true开启,VF自动融合会借助Loop Fuse算法,将VF转换成Loop形态,然后将控制流等价(Control-Flow-Equivalent)的VF进行融合,最后将VF进行还原。编译器首先会做融合前的合法性检查,判断两个VF是否等价,Main侧中间代码是否能在VF内执行以及融合后是否可产生正收益。如果满足VF融合条件,编译器会自动执行VF融合优化,为保证融合后的VF执行逻辑与语义与融合前一致,会在原来两个VF之间保守地插入同步指令,编译器还会尝试外提、合并融合后的VF中的指令,对VF代码进行优化。融合策略是能融尽融,用户按照符合融合的合法性检查的模式进行编码,可以增加VF融合的机会。用户也可以参考融合原理手动进行融合优化。
36+ 
37+VF融合的性能优化详细内容请参考[算子实践参考-VF融合优化](../../../../guide/operator_practice/simd_operator_optimization/vector_compute/vf_optimization/vf_fusion_optimization.md)。
38+ 
39+## 数据搬运优化
40+ 
41+Reg向量计算C API提供了下表所示多种搬运指令,合理选择搬运接口并利用接口能力进行优化。连续非对齐场景优化的性能优化详细内容请参考[算子实践参考-连续非对齐场景优化](../../../../guide/operator_practice/simd_operator_optimization/vector_compute/vf_optimization/continuous_unaligned_optimization.md)。
42+ 
43+| 场景 | C API接口 | 描述 |
44+| :-- | :-- | :-- |
45+| 连续对齐搬入 | [asc_loadalign](./load/asc_loadalign.md) | 从32字节对齐的UB起始地址连续搬入到向量数据寄存器或掩码寄存器。|
46+| 非连续对齐搬入 | [asc_loadalign](./load/asc_loadalign.md) | 从32字节对齐的UB起始地址非连续搬入多个DataBlock。|
47+| 连续非对齐搬入 | [asc_loadunalign](./load/asc_loadunalign.md) | 从非32字节对齐的UB起始地址连续搬入到向量数据寄存器。|
48+| 掩码寄存器搬入 | [asc_loadalign](./load/asc_loadalign.md)、[asc_loadalign_mask](./load/asc_loadalign_mask.md) | 从UB连续搬入掩码寄存器。|
49+| 离散搬入 | [asc_gather](./ub_gather/asc_gather.md) | 根据索引值将UB中的元素收集到向量数据寄存器。|
50+| DataBlock离散搬入 | [asc_gather_datablock](./ub_gather/asc_gather_datablock.md) | 根据索引值将UB中的元素按DataBlock(32B)收集到向量数据寄存器。|
51+| 连续对齐搬出 | [asc_storealign](./store/asc_storealign.md) | 将向量数据寄存器或掩码寄存器连续搬出到32字节对齐的UB地址。|
52+| 连续非对齐搬出 | [asc_storeunalign](./store/asc_storeunalign.md) | 将向量数据寄存器连续搬出到非32字节对齐的UB地址。|
53+| 离散搬出 | [asc_scatter](./scatter/asc_scatter.md) | 根据索引值将向量数据寄存器中的元素离散搬出到UB。|
54+| 寄存器间搬运 | [asc_copy](./reg_copy/asc_copy.md) | 支持向量数据寄存器复制到向量数据寄存器,掩码寄存器复制到掩码寄存器,向量数据寄存器复制到掩码寄存器三种模式。|
55+ 
56+### 数据搬运启用分布模式
57+ 
58+- 连续对齐搬入
59+ 
60+ 如图[half转int32_t类型转换过程](#fig1),将UB地址`x_addr`上数据量为VL/2的`half`类型元素通过[asc_loadalign_unpack](./load/asc_loadalign_unpack.md)搬入`x_reg`,调用[asc_half2int32_rd](./reg_convert/asc_half2int32.md)将`half`转换为`int32_t`并写入`y_reg`,最后通过[asc_storealign](./store/asc_storealign.md)搬出至UB地址`y_addr`。
61+ 
62+ **图1** half转int32_t类型转换过程<a id="fig1"></a>
63+ 
64+ ![](../figures/capi_half_to_int32_conversion.png "half转int32_t类型转换过程")
65+ 
66+ ```cpp
67+ __simd_vf__ inline void half_to_int32_vf(__ubuf__ int32_t* y_addr, __ubuf__ half* x_addr)
68+ {
69+ vector_half x_reg;
70+ vector_int32_t y_reg;
71+ uint32_t count = 64;
72+ vector_bool mask = asc_update_mask_b32(count);
73+ 
74+ asc_loadalign_unpack(x_reg, x_addr);
75+ asc_half2int32_rd(y_reg, x_reg, mask, ASC_POSITION_EVEN);
76+ asc_storealign(y_addr, y_reg, mask);
77+ }
78+ ```
79+ 
80+- 连续对齐搬出
81+ 
82+ 如图[float转int16_t类型转换过程](#fig2),将UB地址`x_addr`上数据量为VL的`float`类型元素通过[asc_loadalign](./load/asc_loadalign.md)搬入`x_reg`,调用[asc_float2int16_rn](./reg_convert/asc_float2int16.md)将`float`转换为`int16_t`并写入`y_reg`,最后通过[asc_storealign_pack](./store/asc_storealign_pack.md)搬出至UB地址`y_addr`。
83+ 
84+ **图2** float转int16_t类型转换过程<a id="fig2"></a>
85+ 
86+ ![](../figures/capi_float_to_int16_conversion.png "float转int16_t类型转换过程")
87+ 
88+ ```cpp
89+ __simd_vf__ inline void float_to_int16_vf(__ubuf__ int16_t* y_addr, __ubuf__ float* x_addr)
90+ {
91+ vector_float x_reg;
92+ vector_int16_t y_reg;
93+ uint32_t count = 64;
94+ vector_bool mask = asc_update_mask_b32(count);
95+ 
96+ asc_loadalign(x_reg, x_addr);
97+ asc_float2int16_rn(y_reg, x_reg, mask, ASC_POSITION_EVEN);
98+ asc_storealign_pack(y_addr, y_reg, mask);
99+ }
100+ ```
@@ -30,7 +30,7 @@
30 30 
31从Unified Buffer(UB)中按dtype对齐的起始地址读取VL长度数据,并通过函数返回值返回或写入目的矢量数据寄存器,搬运过程中数据格式和内容保持不变。连续搬入时,需要在每次调用前手动更新源地址。该接口为易用性接口,对性能有要求时可使用[asc_loadunalign](asc_loadunalign.md)或[asc_loadunalign_postupdate](asc_loadunalign_postupdate.md)。31从Unified Buffer(UB)中按dtype对齐的起始地址读取VL长度数据,并通过函数返回值返回或写入目的矢量数据寄存器,搬运过程中数据格式和内容保持不变。连续搬入时,需要在每次调用前手动更新源地址。该接口为易用性接口,对性能有要求时可使用[asc_loadunalign](asc_loadunalign.md)或[asc_loadunalign_postupdate](asc_loadunalign_postupdate.md)。
32 32 
33-本接口仅在AIV上生效,非AIV调用直接返回。33+本接口为Reg矢量搬运接口,仅在AIV上生效。
34 34 
35## 函数原型35## 函数原型
36 36 
@@ -79,8 +79,7 @@ __simd_callee__ inline void asc_load(vector_float& dst,
79 79 
80### 通用约束80### 通用约束
81 81 
82-- 本接口仅在AIV上生效,非AIV调用直接返回。82+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
83-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
84- src起始地址必须按dtype对齐,且必须在UB地址空间内且不越界,否则会报错。83- src起始地址必须按dtype对齐,且必须在UB地址空间内且不越界,否则会报错。
85- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。src起始地址加VL字节不可超过实际可用容量,否则会报错。84- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。src起始地址加VL字节不可超过实际可用容量,否则会报错。
86- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。85- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -41,7 +41,7 @@
41 41 
42![](../../figures/capi_loadalign_norm.png)42![](../../figures/capi_loadalign_norm.png)
43 43 
44-本接口仅在AIV上生效,非AIV调用直接返回。44+本接口为Reg矢量搬运接口,仅在AIV上生效。
45 45 
46## 函数原型46## 函数原型
47 47 
@@ -206,8 +206,7 @@ __simd_callee__ inline void asc_loadalign(vector_float& dst,
206 206 
207### 通用约束207### 通用约束
208 208 
209-- 本接口仅在AIV上生效,非AIV调用直接返回。209+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
210-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
211- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。非连续对齐搬入模式中,当某个`DataBlock`的`mask`包含的元素全部无效时,该`DataBlock`即使越界也不会报错。210- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。非连续对齐搬入模式中,当某个`DataBlock`的`mask`包含的元素全部无效时,该`DataBlock`即使越界也不会报错。
212- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。211- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
213- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。212- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -220,7 +219,6 @@ __simd_callee__ inline void asc_loadalign(vector_float& dst,
220### 非连续对齐搬入模式219### 非连续对齐搬入模式
221 220 
222- 该模式不支持目的操作数为掩码寄存器。221- 该模式不支持目的操作数为掩码寄存器。
223-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
224- 当dtype为`int64_t`时,由于掩码创建接口不支持b64模式,需要先通过[asc_create_mask_b32](../reg_mask/asc_create_mask.md)生成b32掩码,再通过[asc_unpack_lower](../reg_permute_sel/asc_unpack.md)将其展开为适用于b64数据的掩码后传入本接口。展开后的掩码以连续8个bit为一组,仅每组最低位的bit有效,用于控制对应的一个b64元素。222- 当dtype为`int64_t`时,由于掩码创建接口不支持b64模式,需要先通过[asc_create_mask_b32](../reg_mask/asc_create_mask.md)生成b32掩码,再通过[asc_unpack_lower](../reg_permute_sel/asc_unpack.md)将其展开为适用于b64数据的掩码后传入本接口。展开后的掩码以连续8个bit为一组,仅每组最低位的bit有效,用于控制对应的一个b64元素。
225 ```c223 ```c
226 vector_int64_t src_reg;224 vector_int64_t src_reg;
@@ -34,7 +34,7 @@
34- **立即数偏移搬入模式**:从相对源起始地址偏移指定距离的位置搬入数据。本接口不会自动更新源地址。34- **立即数偏移搬入模式**:从相对源起始地址偏移指定距离的位置搬入数据。本接口不会自动更新源地址。
35- **地址寄存器偏移搬入模式**:通过地址寄存器指定相对源起始地址的偏移,常用于Hardware Loop内偏移随循环计数变化的对齐搬入场景。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。35- **地址寄存器偏移搬入模式**:通过地址寄存器指定相对源起始地址的偏移,常用于Hardware Loop内偏移随循环计数变化的对齐搬入场景。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。
36 36 
37-本接口仅在AIV上生效,非AIV调用直接返回。37+本接口为Reg矢量搬运接口,仅在AIV上生效。
38 38 
39## 函数原型39## 函数原型
40 40 
@@ -146,8 +146,7 @@ __simd_callee__ inline void asc_loadalign_brc_datablock(vector_half& dst,
146 146 
147### 通用约束147### 通用约束
148 148 
149-- 本接口仅在AIV上生效,非AIV调用直接返回。149+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
150-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
151- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。150- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
152- 一次读取数据量为32字节(1个DataBlock)。UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。实际读取地址加32字节不可超过实际可用容量,否则会报错。151- 一次读取数据量为32字节(1个DataBlock)。UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。实际读取地址加32字节不可超过实际可用容量,否则会报错。
153- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。152- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -30,7 +30,7 @@
30 30 
31从Unified Buffer(UB)中32字节对齐的起始地址读取一个`DataBlock`(32字节),并将该`DataBlock`广播到整个矢量数据寄存器。搬运过程中数据格式和内容保持不变。接口采用Post Update模式,搬运完成后自动更新源地址指针。31从Unified Buffer(UB)中32字节对齐的起始地址读取一个`DataBlock`(32字节),并将该`DataBlock`广播到整个矢量数据寄存器。搬运过程中数据格式和内容保持不变。接口采用Post Update模式,搬运完成后自动更新源地址指针。
32 32 
33-本接口仅在AIV上生效,非AIV调用直接返回。33+本接口为Reg矢量搬运接口,仅在AIV上生效。
34 34 
35## 函数原型35## 函数原型
36 36 
@@ -75,8 +75,7 @@ __simd_callee__ inline void asc_loadalign_brc_datablock_postupdate(vector_int8_t
75 75 
76### 通用约束76### 通用约束
77 77 
78-- 本接口仅在AIV上生效,非AIV调用直接返回。78+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
79-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
80- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。79- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
81- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。80- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
82- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。81- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -38,7 +38,7 @@
38 38 
39![](../../figures/capi_loadalign_brc_elem.png)39![](../../figures/capi_loadalign_brc_elem.png)
40 40 
41-本接口仅在AIV上生效,非AIV调用直接返回。41+本接口为Reg矢量搬运接口,仅在AIV上生效。
42 42 
43## 函数原型43## 函数原型
44 44 
@@ -150,8 +150,7 @@ __simd_callee__ inline void asc_loadalign_brc_elem(vector_half& dst,
150 150 
151### 通用约束151### 通用约束
152 152 
153-- 本接口仅在AIV上生效,非AIV调用直接返回。153+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
154-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
155- 各功能模式下的实际读取地址必须按dtype对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。154- 各功能模式下的实际读取地址必须按dtype对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
156- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。155- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
157- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。156- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -34,7 +34,7 @@
34- **立即数偏移搬入模式**:从相对源起始地址偏移指定距离的位置搬入数据。本接口不会自动更新源地址。34- **立即数偏移搬入模式**:从相对源起始地址偏移指定距离的位置搬入数据。本接口不会自动更新源地址。
35- **地址寄存器偏移搬入模式**:通过地址寄存器指定相对源起始地址的偏移,常用于Hardware Loop内偏移随循环计数变化的对齐搬入场景。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。35- **地址寄存器偏移搬入模式**:通过地址寄存器指定相对源起始地址的偏移,常用于Hardware Loop内偏移随循环计数变化的对齐搬入场景。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。
36 36 
37-本接口仅在AIV上生效,非AIV调用直接返回。37+本接口为Reg矢量搬运接口,仅在AIV上生效。
38 38 
39## 函数原型39## 函数原型
40 40 
@@ -146,8 +146,7 @@ __simd_callee__ inline void asc_loadalign_brc_elem2datablock(vector_half& dst,
146 146 
147### 通用约束147### 通用约束
148 148 
149-- 本接口仅在AIV上生效,非AIV调用直接返回。149+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
150-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
151- 各功能模式下,b16类型的实际读取地址必须按16字节对齐,b32类型的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。150- 各功能模式下,b16类型的实际读取地址必须按16字节对齐,b32类型的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
152- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。151- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
153- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。152- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -30,7 +30,7 @@
30 30 
31从Unified Buffer(UB)中16字节对齐(b16类型)或32字节对齐(b32类型)的起始地址连续读取8个元素,并将每个元素广播到目的矢量数据寄存器对应的一个`DataBlock`(32字节)中。搬运过程中数据格式和内容保持不变。接口采用Post Update模式,搬运完成后自动更新源地址指针。31从Unified Buffer(UB)中16字节对齐(b16类型)或32字节对齐(b32类型)的起始地址连续读取8个元素,并将每个元素广播到目的矢量数据寄存器对应的一个`DataBlock`(32字节)中。搬运过程中数据格式和内容保持不变。接口采用Post Update模式,搬运完成后自动更新源地址指针。
32 32 
33-本接口仅在AIV上生效,非AIV调用直接返回。33+本接口为Reg矢量搬运接口,仅在AIV上生效。
34 34 
35## 函数原型35## 函数原型
36 36 
@@ -73,8 +73,7 @@ __simd_callee__ inline void asc_loadalign_brc_elem2datablock_postupdate(vector_h
73 73 
74### 通用约束74### 通用约束
75 75 
76-- 本接口仅在AIV上生效,非AIV调用直接返回。76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
78- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须满足对应对齐要求:b16类型按16字节对齐,b32类型按32字节对齐;且实际读取范围必须在UB地址空间内且不越界,否则会报错。77- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须满足对应对齐要求:b16类型按16字节对齐,b32类型按32字节对齐;且实际读取范围必须在UB地址空间内且不越界,否则会报错。
79- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。78- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
80- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。79- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -34,7 +34,7 @@
34 34 
35![](../../figures/capi_loadalign_brc_elem.png)35![](../../figures/capi_loadalign_brc_elem.png)
36 36 
37-本接口仅在AIV上生效,非AIV调用直接返回。37+本接口为Reg矢量搬运接口,仅在AIV上生效。
38 38 
39## 函数原型39## 函数原型
40 40 
@@ -79,8 +79,7 @@ __simd_callee__ inline void asc_loadalign_brc_elem_postupdate(vector_int16_t& ds
79 79 
80### 通用约束80### 通用约束
81 81 
82-- 本接口仅在AIV上生效,非AIV调用直接返回。82+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
83-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
84- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按dtype对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。83- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按dtype对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
85- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。84- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
86- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。85- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -32,7 +32,7 @@
32 32 
33本接口与[asc_loadalign](asc_loadalign.md)的非连续对齐搬入模式功能相同,区别在于本接口通过函数返回值返回结果。33本接口与[asc_loadalign](asc_loadalign.md)的非连续对齐搬入模式功能相同,区别在于本接口通过函数返回值返回结果。
34 34 
35-本接口仅在AIV上生效,非AIV调用直接返回。35+本接口为Reg矢量搬运接口,仅在AIV上生效。
36 36 
37## 函数原型37## 函数原型
38 38 
@@ -76,11 +76,9 @@ __simd_callee__ inline vector_uint8_t asc_loadalign_datablock_strided(__ubuf__ u
76 76 
77## 约束说明77## 约束说明
78 78 
79-- 本接口仅在AIV上生效,非AIV调用直接返回。79+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
80-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
81- 实际读取地址必须按32字节对齐,且有效`DataBlock`的读取范围必须在UB地址空间内且不越界,否则会报错。80- 实际读取地址必须按32字节对齐,且有效`DataBlock`的读取范围必须在UB地址空间内且不越界,否则会报错。
82- 当一个`DataBlock`中的元素全部被`mask`设置为无效时,该`DataBlock`即使越界也不会报错。81- 当一个`DataBlock`中的元素全部被`mask`设置为无效时,该`DataBlock`即使越界也不会报错。
83-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入。
84- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化。82- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化。
85 83 
86## 调用示例84## 调用示例
@@ -34,7 +34,7 @@
34- **立即数偏移搬入模式**:从相对源起始地址偏移指定距离的位置搬入数据。本接口不会自动更新源地址。34- **立即数偏移搬入模式**:从相对源起始地址偏移指定距离的位置搬入数据。本接口不会自动更新源地址。
35- **地址寄存器偏移搬入模式**:通过地址寄存器指定相对源起始地址的偏移,常用于Hardware Loop内偏移随循环计数变化的对齐搬入场景。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。35- **地址寄存器偏移搬入模式**:通过地址寄存器指定相对源起始地址的偏移,常用于Hardware Loop内偏移随循环计数变化的对齐搬入场景。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。
36 36 
37-本接口仅在AIV上生效,非AIV调用直接返回。37+本接口为Reg矢量搬运接口,仅在AIV上生效。
38 38 
39## 函数原型39## 函数原型
40 40 
@@ -149,8 +149,7 @@ __simd_callee__ inline void asc_loadalign_deintlv(vector_float& dst0,
149 149 
150### 通用约束150### 通用约束
151 151 
152-- 本接口仅在AIV上生效,非AIV调用直接返回。152+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
153-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
154- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。153- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
155- `dst0`与`dst1`必须为不同的矢量数据寄存器。154- `dst0`与`dst1`必须为不同的矢量数据寄存器。
156- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。155- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
@@ -30,7 +30,7 @@
30 30 
31从Unified Buffer(UB)中32字节对齐的起始地址读取2×VL长度数据,将偶数下标元素写入矢量数据寄存器`dst0`,将奇数下标元素写入矢量数据寄存器`dst1`。接口采用Post Update模式,搬运完成后自动更新源地址指针。31从Unified Buffer(UB)中32字节对齐的起始地址读取2×VL长度数据,将偶数下标元素写入矢量数据寄存器`dst0`,将奇数下标元素写入矢量数据寄存器`dst1`。接口采用Post Update模式,搬运完成后自动更新源地址指针。
32 32 
33-本接口仅在AIV上生效,非AIV调用直接返回。33+本接口为Reg矢量搬运接口,仅在AIV上生效。
34 34 
35## 函数原型35## 函数原型
36 36 
@@ -76,8 +76,7 @@ __simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_int16_t& dst
76 76 
77### 通用约束77### 通用约束
78 78 
79-- 本接口仅在AIV上生效,非AIV调用直接返回。79+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
80-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
81- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。80- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
82- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。81- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
83- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。82- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -45,7 +45,7 @@
45 45 
46![](../../figures/capi_loadalign_mask_downsample.png)46![](../../figures/capi_loadalign_mask_downsample.png)
47 47 
48-本接口仅在AIV上生效,非AIV调用直接返回。48+本接口为Reg矢量搬运接口,仅在AIV上生效。
49 49 
50## 函数原型50## 函数原型
51 51 
@@ -170,8 +170,7 @@ __simd_callee__ inline void asc_loadalign_downsample(vector_half& dst,
170 170 
171### 通用约束171### 通用约束
172 172 
173-- 本接口仅在AIV上生效,非AIV调用直接返回。173+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
174-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
175- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。174- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
176- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。175- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
177- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。176- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -37,7 +37,7 @@
37 37 
38![](../../figures/capi_loadalign_mask_downsample.png)38![](../../figures/capi_loadalign_mask_downsample.png)
39 39 
40-本接口仅在AIV上生效,非AIV调用直接返回。40+本接口为Reg矢量搬运接口,仅在AIV上生效。
41 41 
42## 函数原型42## 函数原型
43 43 
@@ -85,8 +85,7 @@ __simd_callee__ inline void asc_loadalign_downsample_postupdate(vector_int16_t&
85 85 
86### 通用约束86### 通用约束
87 87 
88-- 本接口仅在AIV上生效,非AIV调用直接返回。88+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
89-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
90- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。89- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
91- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。90- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
92- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。91- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -36,7 +36,7 @@
36 36 
37![](../../figures/capi_loadalign_mask_norm.png)37![](../../figures/capi_loadalign_mask_norm.png)
38 38 
39-本接口仅在AIV上生效,非AIV调用直接返回。39+本接口为Reg矢量搬运接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -58,8 +58,7 @@ __simd_callee__ inline vector_bool asc_loadalign_mask(__ubuf__ uint32_t* src)
58 58 
59## 约束说明59## 约束说明
60 60 
61-- 本接口仅在AIV上生效,非AIV调用直接返回。61+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
62-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
63- `src`的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。62- `src`的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
64- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化。63- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化。
65 64 
@@ -36,7 +36,7 @@
36 36 
37![](../../figures/capi_loadalign_mask_downsample.png)37![](../../figures/capi_loadalign_mask_downsample.png)
38 38 
39-本接口仅在AIV上生效,非AIV调用直接返回。39+本接口为Reg矢量搬运接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -58,8 +58,7 @@ __simd_callee__ inline vector_bool asc_loadalign_mask_downsample(__ubuf__ uint32
58 58 
59## 约束说明59## 约束说明
60 60 
61-- 本接口仅在AIV上生效,非AIV调用直接返回。61+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
62-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
63- `src`的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。62- `src`的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
64- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化。63- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化。
65 64 
@@ -36,7 +36,7 @@
36 36 
37![](../../figures/capi_loadalign_mask_upsample.png)37![](../../figures/capi_loadalign_mask_upsample.png)
38 38 
39-本接口仅在AIV上生效,非AIV调用直接返回。39+本接口为Reg矢量搬运接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -58,8 +58,7 @@ __simd_callee__ inline vector_bool asc_loadalign_mask_upsample(__ubuf__ uint32_t
58 58 
59## 约束说明59## 约束说明
60 60 
61-- 本接口仅在AIV上生效,非AIV调用直接返回。61+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
62-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
63- `src`的实际读取地址必须按16字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。62- `src`的实际读取地址必须按16字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
64- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化。63- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化。
65 64 
@@ -37,7 +37,7 @@
37 37 
38![](../../figures/capi_loadalign_norm.png)38![](../../figures/capi_loadalign_norm.png)
39 39 
40-本接口仅在AIV上生效,非AIV调用直接返回。40+本接口为Reg矢量搬运接口,仅在AIV上生效。
41 41 
42## 函数原型42## 函数原型
43 43 
@@ -126,8 +126,7 @@ __simd_callee__ inline void asc_loadalign_postupdate(vector_float& dst,
126 126 
127### 通用约束127### 通用约束
128 128 
129-- 本接口仅在AIV上生效,非AIV调用直接返回。129+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
130-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
131- 各功能模式下的当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。非连续对齐搬入模式中,当某个`DataBlock`的`mask`包含的元素全部无效时,该`DataBlock`即使越界也不会报错。130- 各功能模式下的当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。非连续对齐搬入模式中,当某个`DataBlock`的`mask`包含的元素全部无效时,该`DataBlock`即使越界也不会报错。
132- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。131- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
133- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。132- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -135,7 +134,6 @@ __simd_callee__ inline void asc_loadalign_postupdate(vector_float& dst,
135### 非连续对齐搬入模式134### 非连续对齐搬入模式
136 135 
137- 该模式不支持目的操作数为掩码寄存器。136- 该模式不支持目的操作数为掩码寄存器。
138-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
139- 当dtype为`int64_t`时,由于掩码创建接口不支持b64模式,需要先通过[asc_create_mask_b32](../reg_mask/asc_create_mask.md)生成b32掩码,再通过[asc_unpack_lower](../reg_permute_sel/asc_unpack.md)将其展开为适用于b64数据的掩码后传入本接口。展开后的掩码以连续8个bit为一组,仅每组最低位的bit有效,用于控制对应的一个b64元素。137- 当dtype为`int64_t`时,由于掩码创建接口不支持b64模式,需要先通过[asc_create_mask_b32](../reg_mask/asc_create_mask.md)生成b32掩码,再通过[asc_unpack_lower](../reg_permute_sel/asc_unpack.md)将其展开为适用于b64数据的掩码后传入本接口。展开后的掩码以连续8个bit为一组,仅每组最低位的bit有效,用于控制对应的一个b64元素。
140 ```c138 ```c
141 vector_int64_t src_reg;139 vector_int64_t src_reg;
@@ -38,7 +38,7 @@
38 38 
39![](../../figures/capi_loadalign_unpack.png)39![](../../figures/capi_loadalign_unpack.png)
40 40 
41-本接口仅在AIV上生效,非AIV调用直接返回。41+本接口为Reg矢量搬运接口,仅在AIV上生效。
42 42 
43## 函数原型43## 函数原型
44 44 
@@ -150,8 +150,7 @@ __simd_callee__ inline void asc_loadalign_unpack(vector_half& dst,
150 150 
151### 通用约束151### 通用约束
152 152 
153-- 本接口仅在AIV上生效,非AIV调用直接返回。153+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
154-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
155- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。154- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
156- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。155- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
157- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。156- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -34,7 +34,7 @@
34- **立即数偏移搬入模式**:从相对源起始地址偏移指定距离的位置搬入数据。本接口不会自动更新源地址。34- **立即数偏移搬入模式**:从相对源起始地址偏移指定距离的位置搬入数据。本接口不会自动更新源地址。
35- **地址寄存器偏移搬入模式**:通过地址寄存器指定相对源起始地址的偏移,常用于Hardware Loop内偏移随循环计数变化的对齐搬入场景。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。35- **地址寄存器偏移搬入模式**:通过地址寄存器指定相对源起始地址的偏移,常用于Hardware Loop内偏移随循环计数变化的对齐搬入场景。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。
36 36 
37-本接口仅在AIV上生效,非AIV调用直接返回。37+本接口为Reg矢量搬运接口,仅在AIV上生效。
38 38 
39## 函数原型39## 函数原型
40 40 
@@ -146,8 +146,7 @@ __simd_callee__ inline void asc_loadalign_unpack4(vector_int8_t& dst,
146 146 
147### 通用约束147### 通用约束
148 148 
149-- 本接口仅在AIV上生效,非AIV调用直接返回。149+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
150-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
151- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。150- 各功能模式下的实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
152- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。151- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
153- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。152- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -30,7 +30,7 @@
30 30 
31从Unified Buffer(UB)中32字节对齐的起始地址读取VL/4长度的连续数据,在每个源元素后补3个值为0的元素,并将得到的VL长度数据写入目的矢量数据寄存器。接口采用Post Update模式,搬运完成后自动更新源地址指针。31从Unified Buffer(UB)中32字节对齐的起始地址读取VL/4长度的连续数据,在每个源元素后补3个值为0的元素,并将得到的VL长度数据写入目的矢量数据寄存器。接口采用Post Update模式,搬运完成后自动更新源地址指针。
32 32 
33-本接口仅在AIV上生效,非AIV调用直接返回。33+本接口为Reg矢量搬运接口,仅在AIV上生效。
34 34 
35## 函数原型35## 函数原型
36 36 
@@ -73,8 +73,7 @@ __simd_callee__ inline void asc_loadalign_unpack4_postupdate(vector_int8_t& dst,
73 73 
74### 通用约束74### 通用约束
75 75 
76-- 本接口仅在AIV上生效,非AIV调用直接返回。76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
78- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。77- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
79- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。78- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
80- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。79- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -34,7 +34,7 @@
34 34 
35![](../../figures/capi_loadalign_unpack.png)35![](../../figures/capi_loadalign_unpack.png)
36 36 
37-本接口仅在AIV上生效,非AIV调用直接返回。37+本接口为Reg矢量搬运接口,仅在AIV上生效。
38 38 
39## 函数原型39## 函数原型
40 40 
@@ -77,8 +77,7 @@ __simd_callee__ inline void asc_loadalign_unpack_postupdate(vector_int16_t& dst,
77 77 
78### 通用约束78### 通用约束
79 79 
80-- 本接口仅在AIV上生效,非AIV调用直接返回。80+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
81-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
82- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。81- 当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
83- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。82- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
84- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。83- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -45,7 +45,7 @@
45 45 
46![](../../figures/capi_loadalign_mask_upsample.png)46![](../../figures/capi_loadalign_mask_upsample.png)
47 47 
48-本接口仅在AIV上生效,非AIV调用直接返回。48+本接口为Reg矢量搬运接口,仅在AIV上生效。
49 49 
50## 函数原型50## 函数原型
51 51 
@@ -170,8 +170,7 @@ __simd_callee__ inline void asc_loadalign_upsample(vector_half& dst,
170 170 
171### 通用约束171### 通用约束
172 172 
173-- 本接口仅在AIV上生效,非AIV调用直接返回。173+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
174-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
175- 当`dst`为矢量数据寄存器时,各功能模式下的实际读取地址必须按32字节对齐;当`dst`为掩码寄存器时,实际读取地址必须按16字节对齐。实际读取范围必须在UB地址空间内且不越界,否则会报错。174- 当`dst`为矢量数据寄存器时,各功能模式下的实际读取地址必须按32字节对齐;当`dst`为掩码寄存器时,实际读取地址必须按16字节对齐。实际读取范围必须在UB地址空间内且不越界,否则会报错。
176- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。175- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
177- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。176- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -37,7 +37,7 @@
37 37 
38![](../../figures/capi_loadalign_mask_upsample.png)38![](../../figures/capi_loadalign_mask_upsample.png)
39 39 
40-本接口仅在AIV上生效,非AIV调用直接返回。40+本接口为Reg矢量搬运接口,仅在AIV上生效。
41 41 
42## 函数原型42## 函数原型
43 43 
@@ -85,8 +85,7 @@ __simd_callee__ inline void asc_loadalign_upsample_postupdate(vector_half& dst,
85 85 
86### 通用约束86### 通用约束
87 87 
88-- 本接口仅在AIV上生效,非AIV调用直接返回。88+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
89-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
90- 当`dst`为矢量数据寄存器时,当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐;当`dst`为掩码寄存器时,必须按16字节对齐。实际读取范围必须在UB地址空间内且不越界,否则会报错。89- 当`dst`为矢量数据寄存器时,当前实际读取地址及Post Update更新后的下一次实际读取地址必须按32字节对齐;当`dst`为掩码寄存器时,必须按16字节对齐。实际读取范围必须在UB地址空间内且不越界,否则会报错。
91- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。90- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
92- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。91- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -32,6 +32,8 @@
32 32 
33设本次实际读取的起始字节地址为`src_start_addr`,结束字节地址为`src_end_addr`,其中`src_end_addr = src_start_addr + VL`;将`src_start_addr`向低地址方向对齐到32字节边界,得到`aligned_src_start_addr`。`asc_loadunalign_pre`将字节地址范围`[aligned_src_start_addr, aligned_src_start_addr + 32)`的数据缓存到非对齐寄存器,本接口将该缓存与从UB读取的后续数据拼接,得到字节地址范围`[src_start_addr, src_end_addr)`的数据。33设本次实际读取的起始字节地址为`src_start_addr`,结束字节地址为`src_end_addr`,其中`src_end_addr = src_start_addr + VL`;将`src_start_addr`向低地址方向对齐到32字节边界,得到`aligned_src_start_addr`。`asc_loadunalign_pre`将字节地址范围`[aligned_src_start_addr, aligned_src_start_addr + 32)`的数据缓存到非对齐寄存器,本接口将该缓存与从UB读取的后续数据拼接,得到字节地址范围`[src_start_addr, src_end_addr)`的数据。
34 34 
35+本接口为Reg矢量搬运接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```c39```c
@@ -69,8 +71,7 @@ __simd_callee__ inline void asc_loadunalign(vector_int8_t& dst,
69 71 
70## 约束说明72## 约束说明
71 73 
72-- 本接口仅在AIV上生效,非AIV调用直接返回。74+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
73-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
74- `src1`起始地址必须按dtype对齐,且实际访问范围必须在UB地址空间内,否则会报错。75- `src1`起始地址必须按dtype对齐,且实际访问范围必须在UB地址空间内,否则会报错。
75- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。76- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
76- 如果本指令与其他指令存在UB地址重叠,必须插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。77- 如果本指令与其他指令存在UB地址重叠,必须插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -38,6 +38,8 @@
38 38 
39- **地址寄存器偏移搬入模式**:设当前UB地址指针为`src_ptr`,循环迭代索引为`i`,步长`stride`的单位为元素个数。[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)生成当前迭代的起始偏移`offset = i * stride`,本次实际读取地址为`src_ptr + offset`。搬入完成后,接口将`offset`更新为`offset + inc`,因此当前循环迭代内下一次实际读取地址为`src_ptr + i * stride + inc`。以上指针和偏移运算均以元素为单位。`src_ptr`保持不变;`inc`只更新当前循环迭代内的地址偏移,不影响下一次循环迭代的起始偏移。39- **地址寄存器偏移搬入模式**:设当前UB地址指针为`src_ptr`,循环迭代索引为`i`,步长`stride`的单位为元素个数。[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)生成当前迭代的起始偏移`offset = i * stride`,本次实际读取地址为`src_ptr + offset`。搬入完成后,接口将`offset`更新为`offset + inc`,因此当前循环迭代内下一次实际读取地址为`src_ptr + i * stride + inc`。以上指针和偏移运算均以元素为单位。`src_ptr`保持不变;`inc`只更新当前循环迭代内的地址偏移,不影响下一次循环迭代的起始偏移。
40 40 
41+本接口为Reg矢量搬运接口,仅在AIV上生效。
42+ 
41## 函数原型43## 函数原型
42 44 
43### 连续非对齐搬入模式45### 连续非对齐搬入模式
@@ -121,8 +123,7 @@ __simd_callee__ inline void asc_loadunalign_postupdate(vector_int8_t& dst,
121 123 
122### 通用约束124### 通用约束
123 125 
124-- 本接口仅在AIV上生效,非AIV调用直接返回。126+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
125-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
126- `src1`起始地址或`src1`与`offset`确定的实际访问地址必须按dtype对齐,且实际访问范围必须在UB地址空间内,否则会报错。127- `src1`起始地址或`src1`与`offset`确定的实际访问地址必须按dtype对齐,且实际访问范围必须在UB地址空间内,否则会报错。
127- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。128- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
128- 如果本指令与其他指令存在UB地址重叠,必须插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。129- 如果本指令与其他指令存在UB地址重叠,必须插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -39,6 +39,8 @@
39- **源地址预处理模式**:以UB源地址作为起始地址,为[asc_loadunalign](asc_loadunalign.md)或[asc_loadunalign_postupdate](asc_loadunalign_postupdate.md)的连续非对齐搬入模式准备前置数据缓存。39- **源地址预处理模式**:以UB源地址作为起始地址,为[asc_loadunalign](asc_loadunalign.md)或[asc_loadunalign_postupdate](asc_loadunalign_postupdate.md)的连续非对齐搬入模式准备前置数据缓存。
40- **地址寄存器偏移预处理模式**:以UB源地址与地址寄存器记录的元素偏移量共同确定起始地址,为`asc_loadunalign_postupdate`的地址寄存器偏移搬入模式准备前置数据缓存。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。40- **地址寄存器偏移预处理模式**:以UB源地址与地址寄存器记录的元素偏移量共同确定起始地址,为`asc_loadunalign_postupdate`的地址寄存器偏移搬入模式准备前置数据缓存。需要与[asc_update_addr_reg](../reg_addr_reg/asc_update_addr_reg.md)配合使用。
41 41 
42+本接口为Reg矢量搬运接口,仅在AIV上生效。
43+ 
42## 函数原型44## 函数原型
43 45 
44### 源地址预处理模式46### 源地址预处理模式
@@ -110,8 +112,7 @@ __simd_callee__ inline void asc_loadunalign_pre(vector_load_unalign& dst,
110 112 
111### 通用约束113### 通用约束
112 114 
113-- 本接口仅在AIV上生效,非AIV调用直接返回。115+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
114-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
115- 实际访问地址在接口内部向低地址方向对齐到32字节边界后读取数据。传入的`src`或`src`与`offset`确定的地址必须按dtype对齐,对齐后的32字节读取范围必须在UB地址空间内,否则会报错。116- 实际访问地址在接口内部向低地址方向对齐到32字节边界后读取数据。传入的`src`或`src`与`offset`确定的地址必须按dtype对齐,对齐后的32字节读取范围必须在UB地址空间内,否则会报错。
116- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。117- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化(默认预留6KB SIMD VF栈 + 2KB Ascend C预留,可用248KB;SIMD+SIMT混编时再划分32KB~128KB作Data Cache,可用容量进一步减少)。UB地址偏移后不可超过实际可用容量,否则会报错。
117- 如果本指令与其他指令存在UB地址重叠,必须插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。118- 如果本指令与其他指令存在UB地址重叠,必须插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -10,7 +10,7 @@ Reg数据搬入接口用于将Unified Buffer(UB)中的数据搬入矢量数
10 10 
11#### 对齐搬入11#### 对齐搬入
12 12 
13-**表1** 矢量数据寄存器对齐搬入接口13+**表1** 矢量数据寄存器对齐搬入接口
14 14 
15| 接口名称 | 模式 | 功能简述 | 地址对齐要求 |15| 接口名称 | 模式 | 功能简述 | 地址对齐要求 |
16| --- | --- | --- | --- |16| --- | --- | --- | --- |
@@ -56,7 +56,7 @@ Reg数据搬入接口用于将Unified Buffer(UB)中的数据搬入矢量数
56 56 
57#### 非对齐搬入57#### 非对齐搬入
58 58 
59-**表2** 矢量数据寄存器非对齐搬入接口59+**表2** 矢量数据寄存器非对齐搬入接口
60 60 
61| 接口名称 | 模式 | 功能简述 | 地址对齐要求 |61| 接口名称 | 模式 | 功能简述 | 地址对齐要求 |
62| --- | --- | --- | --- |62| --- | --- | --- | --- |
@@ -71,7 +71,7 @@ Reg数据搬入接口用于将Unified Buffer(UB)中的数据搬入矢量数
71 71 
72### 掩码寄存器搬入72### 掩码寄存器搬入
73 73 
74-**表3** 掩码寄存器搬入接口74+**表3** 掩码寄存器搬入接口
75 75 
76| 接口名称 | 模式 | 功能简述 | 地址对齐要求 |76| 接口名称 | 模式 | 功能简述 | 地址对齐要求 |
77| --- | --- | --- | --- |77| --- | --- | --- | --- |
@@ -93,8 +93,7 @@ Reg数据搬入接口用于将Unified Buffer(UB)中的数据搬入矢量数
93 93 
94## 通用约束94## 通用约束
95 95 
96-- 本接口仅在AIV上生效,非AIV调用直接返回。96+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
97-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
98- 各功能模式下的实际读取地址必须满足[接口分类与选择](#接口分类与选择)中的地址对齐要求,且实际读取范围必须在UB地址空间内且不越界,否则会报错。97- 各功能模式下的实际读取地址必须满足[接口分类与选择](#接口分类与选择)中的地址对齐要求,且实际读取范围必须在UB地址空间内且不越界,否则会报错。
99- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化。UB地址偏移后不可超过实际可用容量,否则会报错。详细说明请参见[存储单元说明](../../general_description_and_constraints.md#存储单元说明)。98- UB容量上限为256KB,用户可用容量随编译选项与编程场景变化。UB地址偏移后不可超过实际可用容量,否则会报错。详细说明请参见[存储单元说明](../../general_description_and_constraints.md#存储单元说明)。
100- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。99- 如果本指令与其他指令存在UB地址重叠,需要插入同步指令[asc_mem_bar](../reg_sync/asc_mem_bar.md),保证多个指令串行化,防止出现异常数据。
@@ -105,7 +104,7 @@ Reg数据搬入接口用于将Unified Buffer(UB)中的数据搬入矢量数
105 104 
106对齐连续搬入提供四种源地址维护方式。以下示例均将长度为1024、数据类型为`half`的源数据连续搬入矢量数据寄存器,再写入UB。单次迭代处理128个元素,共迭代8次,最终结果均为`dst[i] = src[i]`。105对齐连续搬入提供四种源地址维护方式。以下示例均将长度为1024、数据类型为`half`的源数据连续搬入矢量数据寄存器,再写入UB。单次迭代处理128个元素,共迭代8次,最终结果均为`dst[i] = src[i]`。
107 106 
108-**表4** 对齐连续搬入方式对比107+**表4** 对齐连续搬入方式对比
109 108 
110| 场景 | 搬入方式 | 源地址维护方式 | 适用场景 |109| 场景 | 搬入方式 | 源地址维护方式 | 适用场景 |
111| --- | --- | --- | --- |110| --- | --- | --- | --- |
@@ -192,7 +191,7 @@ __simd_vf__ inline void load_align_post_update_vf(__ubuf__ half* dst, __ubuf__ h
192 191 
193非对齐搬入通过非对齐寄存器缓存起始地址所在32字节块的前置数据,再与后续读取的数据拼接,得到从有效起始地址开始的VL长度数据。192非对齐搬入通过非对齐寄存器缓存起始地址所在32字节块的前置数据,再与后续读取的数据拼接,得到从有效起始地址开始的VL长度数据。
194 193 
195-**图1** 非对齐搬入示意图<a id="fig-loadunalign"></a>194+**图1** 非对齐搬入示意图<a id="fig-loadunalign"></a>
196 195 
197![非对齐搬入示意图](../../figures/capi_loadunalign.png "非对齐搬入示意图")196![非对齐搬入示意图](../../figures/capi_loadunalign.png "非对齐搬入示意图")
198 197 
@@ -203,7 +202,7 @@ __simd_vf__ inline void load_align_post_update_vf(__ubuf__ half* dst, __ubuf__ h
203 202 
204实际访问会覆盖向低地址方向对齐后的32字节范围,因此除有效起始地址满足dtype对齐外,对齐后的读取范围也必须位于UB地址空间内。203实际访问会覆盖向低地址方向对齐后的32字节范围,因此除有效起始地址满足dtype对齐外,对齐后的读取范围也必须位于UB地址空间内。
205 204 
206-**表5** 非对齐搬入接口的配合关系205+**表5** 非对齐搬入接口的配合关系
207 206 
208| 主搬入方式 | 配套接口 | 说明 |207| 主搬入方式 | 配套接口 | 说明 |
209| --- | --- | --- |208| --- | --- | --- |
@@ -217,19 +216,19 @@ __simd_vf__ inline void load_align_post_update_vf(__ubuf__ half* dst, __ubuf__ h
217 216 
218首次搬出前,非对齐寄存器无需初始化。连续调用时,必须复用同一个非对齐寄存器;若上一次尾块与本次主块不连续,则需要在下一次主搬出前调用后处理接口完成前一次尾块的写入。217首次搬出前,非对齐寄存器无需初始化。连续调用时,必须复用同一个非对齐寄存器;若上一次尾块与本次主块不连续,则需要在下一次主搬出前调用后处理接口完成前一次尾块的写入。
219 218 
220-**图2** 非对齐搬出示意图(首次搬出)<a id="fig-storeunalign-empty"></a>219+**图2** 非对齐搬出示意图(首次搬出)<a id="fig-storeunalign-empty"></a>
221 220 
222![非对齐搬出示意图(首次搬出)](../../figures/capi_storeunalign_1.png "非对齐搬出示意图(首次搬出)")221![非对齐搬出示意图(首次搬出)](../../figures/capi_storeunalign_1.png "非对齐搬出示意图(首次搬出)")
223 222 
224首次搬出时,非对齐寄存器中没有前序尾块数据。主搬出接口将矢量数据寄存器中可直接写入的数据写入UB,并将末尾数据保存至非对齐寄存器。调用后处理接口后,尾块数据被写入UB。223首次搬出时,非对齐寄存器中没有前序尾块数据。主搬出接口将矢量数据寄存器中可直接写入的数据写入UB,并将末尾数据保存至非对齐寄存器。调用后处理接口后,尾块数据被写入UB。
225 224 
226-**图3** 非对齐搬出示意图(连续搬出)<a id="fig-storeunalign-cached"></a>225+**图3** 非对齐搬出示意图(连续搬出)<a id="fig-storeunalign-cached"></a>
227 226 
228![非对齐搬出示意图(连续搬出)](../../figures/capi_storeunalign_2.png "非对齐搬出示意图(连续搬出)")227![非对齐搬出示意图(连续搬出)](../../figures/capi_storeunalign_2.png "非对齐搬出示意图(连续搬出)")
229 228 
230后续连续搬出时,主搬出接口将非对齐寄存器中的前序尾块与本次矢量数据寄存器的主块数据拼接后写入UB,再将本次尾块更新至非对齐寄存器。连续搬出结束后,调用后处理接口写入最后一次缓存的尾块。229后续连续搬出时,主搬出接口将非对齐寄存器中的前序尾块与本次矢量数据寄存器的主块数据拼接后写入UB,再将本次尾块更新至非对齐寄存器。连续搬出结束后,调用后处理接口写入最后一次缓存的尾块。
231 230 
232-**表6** 非对齐搬出接口的配合关系231+**表6** 非对齐搬出接口的配合关系
233 232 
234| 主搬出方式 | 配套接口 | 说明 |233| 主搬出方式 | 配套接口 | 说明 |
235| --- | --- | --- |234| --- | --- | --- |
@@ -241,7 +240,7 @@ __simd_vf__ inline void load_align_post_update_vf(__ubuf__ half* dst, __ubuf__ h
241 240 
242下图以`uint32_t`数据为例,展示连续非对齐搬入后再连续非对齐搬出的过程。搬入前置初始化和搬出后处理均位于循环外:连续搬入时,`asc_loadunalign_postupdate`更新的非对齐寄存器可供下一次搬入使用;连续搬出时,`asc_storeunalign_postupdate`将尾块保存在非对齐寄存器,最后一次循环结束后再统一写回。241下图以`uint32_t`数据为例,展示连续非对齐搬入后再连续非对齐搬出的过程。搬入前置初始化和搬出后处理均位于循环外:连续搬入时,`asc_loadunalign_postupdate`更新的非对齐寄存器可供下一次搬入使用;连续搬出时,`asc_storeunalign_postupdate`将尾块保存在非对齐寄存器,最后一次循环结束后再统一写回。
243 242 
244-**图4** 连续非对齐搬入搬出示例<a id="fig-loadstoreunalign"></a>243+**图4** 连续非对齐搬入搬出示例<a id="fig-loadstoreunalign"></a>
245 244 
246![连续非对齐搬入搬出示例](../../figures/capi_loadunalign_storeunalign.png "连续非对齐搬入搬出示例")245![连续非对齐搬入搬出示例](../../figures/capi_loadunalign_storeunalign.png "连续非对齐搬入搬出示例")
247 246 
@@ -278,7 +277,7 @@ __simd_vf__ inline void load_store_unalign_vf(__ubuf__ uint32_t* dst, __ubuf__ u
278 277 
279以下接口支持b64数据类型。278以下接口支持b64数据类型。
280 279 
281-**表7** 支持b64数据类型的接口280+**表7** 支持b64数据类型的接口
282 281 
283| 支持的数据类型 | 接口 |282| 支持的数据类型 | 接口 |
284| --- | --- |283| --- | --- |
@@ -66,5 +66,5 @@ __global__ __vector__ void asc_add_kernel(__gm__ float* dst, __gm__ float* src0,
66 66 
67- 通过引用参数输出结果的Reg矢量计算C API,在非AIV上调用时直接返回。67- 通过引用参数输出结果的Reg矢量计算C API,在非AIV上调用时直接返回。
68- 通过函数返回值输出结果的Reg矢量计算C API,在非AIV上调用时返回对应矢量类型的默认构造值。68- 通过函数返回值输出结果的Reg矢量计算C API,在非AIV上调用时返回对应矢量类型的默认构造值。
69-- Reg矢量计算C API接口需要在Vector Function(`__simd_vf__` 标记的函数)内调用。69+- Reg矢量计算C API接口需要在Vector Function(`__simd_vf__` 标记的函数)内调用,不支持在`__aicore__`函数中直接调用,调用关系请参考[SIMD BuiltIn关键字](../../../../guide/programming_guide/language_extension/simd_builtin_keywords.md)。
70- 对于支持配置`mask`参数的Reg矢量计算C API接口,`mask`需通过[掩码设置接口](./reg_mask/reg_mask.md)预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。70- 对于支持配置`mask`参数的Reg矢量计算C API接口,`mask`需通过[掩码设置接口](./reg_mask/reg_mask.md)预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
@@ -53,7 +53,7 @@
53 53 
54 ```c54 ```c
55 __simd_callee__ inline addr_reg asc_update_addr_reg_b8(uint32_t offset0,55 __simd_callee__ inline addr_reg asc_update_addr_reg_b8(uint32_t offset0,
56- uint32_t offset1)56+ uint32_t offset1)
57 __simd_callee__ inline addr_reg asc_update_addr_reg_b16(uint32_t offset0,57 __simd_callee__ inline addr_reg asc_update_addr_reg_b16(uint32_t offset0,
58 uint32_t offset1)58 uint32_t offset1)
59 __simd_callee__ inline addr_reg asc_update_addr_reg_b32(uint32_t offset0,59 __simd_callee__ inline addr_reg asc_update_addr_reg_b32(uint32_t offset0,
@@ -64,8 +64,8 @@
64 64 
65 ```c65 ```c
66 __simd_callee__ inline addr_reg asc_update_addr_reg_b8(uint32_t offset0,66 __simd_callee__ inline addr_reg asc_update_addr_reg_b8(uint32_t offset0,
67- uint32_t offset1,67+ uint32_t offset1,
68- uint32_t offset2)68+ uint32_t offset2)
69 __simd_callee__ inline addr_reg asc_update_addr_reg_b16(uint32_t offset0,69 __simd_callee__ inline addr_reg asc_update_addr_reg_b16(uint32_t offset0,
70 uint32_t offset1,70 uint32_t offset1,
71 uint32_t offset2)71 uint32_t offset2)
@@ -78,9 +78,9 @@
78 78 
79 ```c79 ```c
80 __simd_callee__ inline addr_reg asc_update_addr_reg_b8(uint32_t offset0,80 __simd_callee__ inline addr_reg asc_update_addr_reg_b8(uint32_t offset0,
81- uint32_t offset1,81+ uint32_t offset1,
82- uint32_t offset2,82+ uint32_t offset2,
83- uint32_t offset3)83+ uint32_t offset3)
84 __simd_callee__ inline addr_reg asc_update_addr_reg_b16(uint32_t offset0,84 __simd_callee__ inline addr_reg asc_update_addr_reg_b16(uint32_t offset0,
85 uint32_t offset1,85 uint32_t offset1,
86 uint32_t offset2,86 uint32_t offset2,
@@ -34,6 +34,8 @@ $$
34dst_i = \lvert src_i \rvert34dst_i = \lvert src_i \rvert
35$$35$$
36 36 
37+本接口为Reg矢量计算接口,仅在AIV上生效。
38+ 
37## 函数原型39## 函数原型
38 40 
39```c41```c
@@ -64,11 +66,11 @@ __simd_callee__ inline void asc_abs(vector_half& dst,
64 66 
65**表1** 参数说明67**表1** 参数说明
66 68 
67-| 参数名 | 输入/输出 | 描述 |69+| 参数名 | 输入/输出 | 描述 |
68| :----- | :-------- | :--------------------------------------------------------------------------------------------------------------- |70| :----- | :-------- | :--------------------------------------------------------------------------------------------------------------- |
69-| dst | 输出 | 目的操作数(矢量数据寄存器)。 |71+| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
70-| src | 输入 | 源操作数(矢量数据寄存器)。 |72+| src | 输入 | 源操作数(矢量数据寄存器)。 |
71-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |73+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
72 74 
73矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。75矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
74 76 
@@ -79,9 +81,7 @@ __simd_callee__ inline void asc_abs(vector_half& dst,
79 81 
80## 约束说明82## 约束说明
81 83 
82-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。84+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
83-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
84-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
85- `dst`与`src`的数据类型需要保持一致。85- `dst`与`src`的数据类型需要保持一致。
86- `mask`掩码位为0时,结果对应元素置0。86- `mask`掩码位为0时,结果对应元素置0。
87- 当`src`为有符号整数类型的最小负值时,结果保留原值不变。87- 当`src`为有符号整数类型的最小负值时,结果保留原值不变。
@@ -48,7 +48,7 @@ $$
48 48 
49输出`carry`适用场景请参考[asc_addc功能说明](asc_addc.md#功能说明)。49输出`carry`适用场景请参考[asc_addc功能说明](asc_addc.md#功能说明)。
50 50 
51-本接口仅在AIV上生效。51+本接口为Reg矢量计算接口,仅在AIV上生效。
52 52 
53## 函数原型53## 函数原型
54 54 
@@ -147,9 +147,7 @@ __simd_callee__ inline void asc_add(vector_bool& carry,
147 147 
148### 通用约束148### 通用约束
149 149 
150-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。150+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
151-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
152-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
153 151 
154### 无进位输出加法约束152### 无进位输出加法约束
155 153 
@@ -34,6 +34,8 @@ $$
34dst_i = src_i + value34dst_i = src_i + value
35$$35$$
36 36 
37+本接口为Reg矢量计算接口,仅在AIV上生效。
38+ 
37## 函数原型39## 函数原型
38 40 
39```c41```c
@@ -67,12 +69,12 @@ __simd_callee__ inline void asc_add_scalar(vector_half& dst,
67 69 
68**表1** 参数说明70**表1** 参数说明
69 71 
70-| 参数名 | 输入/输出 | 描述 |72+| 参数名 | 输入/输出 | 描述 |
71| ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |73| ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
72-| dst | 输出 | 目的操作数(矢量数据寄存器)。 |74+| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
73-| src | 输入 | 源操作数(矢量数据寄存器)。 |75+| src | 输入 | 源操作数(矢量数据寄存器)。 |
74-| value | 输入 | 源操作数(标量)。 |76+| value | 输入 | 源操作数(标量)。 |
75-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |77+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
76 78 
77矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。79矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
78 80 
@@ -83,9 +85,7 @@ __simd_callee__ inline void asc_add_scalar(vector_half& dst,
83 85 
84## 约束说明86## 约束说明
85 87 
86-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。88+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
87-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
88-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
89- `dst`与`src`的数据类型需要保持一致。89- `dst`与`src`的数据类型需要保持一致。
90- `mask`掩码位为0时,结果对应元素置0。90- `mask`掩码位为0时,结果对应元素置0。
91 91 
@@ -40,7 +40,7 @@ $$
40 40 
41![](../../figures/asc_addc_1.png)41![](../../figures/asc_addc_1.png)
42 42 
43-本接口仅在AIV上生效。43+本接口为Reg矢量计算接口,仅在AIV上生效。
44 44 
45## 函数原型45## 函数原型
46 46 
@@ -73,7 +73,7 @@ __simd_callee__ inline void asc_addc(vector_bool& carry,
73 73 
74**表1** 参数说明74**表1** 参数说明
75 75 
76-| 参数名 | 输入/输出 | 描述 |76+| 参数名 | 输入/输出 | 描述 |
77| :----- | :------- | :------- |77| :----- | :------- | :------- |
78| carry | 输出 | 目的操作数(掩码寄存器)。存储加法计算后的进位数据。 |78| carry | 输出 | 目的操作数(掩码寄存器)。存储加法计算后的进位数据。 |
79| dst | 输出 | 目的操作数(矢量数据寄存器)。 |79| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
@@ -90,8 +90,7 @@ __simd_callee__ inline void asc_addc(vector_bool& carry,
90 90 
91## 约束说明91## 约束说明
92 92 
93-- 本接口在非AIV上调用直接返回。93+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
94-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
95- 运算输出完整计算结果(包含进位位),不受[asc_set_ctrl](../../spr/asc_set_ctrl.md)影响,硬件不会对输出进行饱和或截断。94- 运算输出完整计算结果(包含进位位),不受[asc_set_ctrl](../../spr/asc_set_ctrl.md)影响,硬件不会对输出进行饱和或截断。
96 95 
97## 关键特性96## 关键特性
@@ -36,6 +36,8 @@ $$
36dst_i = src0_i \div src1_i36dst_i = src0_i \div src1_i
37$$37$$
38 38 
39+本接口为Reg矢量计算接口,仅在AIV上生效。
40+ 
39## 函数原型41## 函数原型
40 42 
41```c43```c
@@ -90,9 +92,7 @@ __simd_callee__ inline vector_float asc_div(vector_float src0,
90 92 
91## 约束说明93## 约束说明
92 94 
93-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。95+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
94-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
95-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
96- 注意除零错误,结果请参考[Div特殊值/边界值输入的计算结果说明](../../../../appendix/reg_vector_compute_interface_boundary_value_summary.md#table1325925915217)。96- 注意除零错误,结果请参考[Div特殊值/边界值输入的计算结果说明](../../../../appendix/reg_vector_compute_interface_boundary_value_summary.md#table1325925915217)。
97- `half`、`float`数据类型的计算结果与标准`IEEE 754`二进制浮点除法相比可能存在1 ULP精度差异。97- `half`、`float`数据类型的计算结果与标准`IEEE 754`二进制浮点除法相比可能存在1 ULP精度差异。
98 98 
@@ -35,6 +35,8 @@ $$
35dst_i = e^{src_i}35dst_i = e^{src_i}
36$$36$$
37 37 
38+本接口为Reg矢量计算接口,仅在AIV上生效。
39+ 
38## 函数原型40## 函数原型
39 41 
40```c42```c
@@ -84,9 +86,7 @@ __simd_callee__ inline vector_float asc_exp(vector_float src,
84 86 
85## 约束说明87## 约束说明
86 88 
87-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。89+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
88-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
89-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
90 90 
91## 调用示例91## 调用示例
92 92 
@@ -34,6 +34,8 @@ $$
34dst_i = ln(src_i)34dst_i = ln(src_i)
35$$35$$
36 36 
37+本接口为Reg矢量计算接口,仅在AIV上生效。
38+ 
37## 函数原型39## 函数原型
38 40 
39```c41```c
@@ -59,11 +61,11 @@ __simd_callee__ inline void asc_ln(vector_half& dst,
59 61 
60**表1** 参数说明62**表1** 参数说明
61 63 
62-| 参数名 | 输入/输出 | 描述 |64+| 参数名 | 输入/输出 | 描述 |
63| :----- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------- |65| :----- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------- |
64-| dst | 输出 | 目的操作数(矢量数据寄存器)。 |66+| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
65-| src | 输入 | 源操作数(矢量数据寄存器)。 |67+| src | 输入 | 源操作数(矢量数据寄存器)。 |
66-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |68+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
67 69 
68矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。70矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
69 71 
@@ -73,6 +75,7 @@ __simd_callee__ inline void asc_ln(vector_half& dst,
73 75 
74## 约束说明76## 约束说明
75 77 
78+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
76- `dst`与`src`的数据类型需要保持一致。79- `dst`与`src`的数据类型需要保持一致。
77- `mask`掩码位为0时,`dst`对应元素置0。80- `mask`掩码位为0时,`dst`对应元素置0。
78 81 
@@ -34,6 +34,8 @@ $$
34dst_i = ln(src_i)34dst_i = ln(src_i)
35$$35$$
36 36 
37+本接口为Reg矢量计算接口,仅在AIV上生效。
38+ 
37## 函数原型39## 函数原型
38 40 
39```c41```c
@@ -60,11 +62,11 @@ __simd_callee__ inline void asc_log(vector_half& dst,
60 62 
61**表1** 参数说明63**表1** 参数说明
62 64 
63-| 参数名 | 输入/输出 | 描述 |65+| 参数名 | 输入/输出 | 描述 |
64| :----- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------- |66| :----- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------- |
65-| dst | 输出 | 目的操作数(矢量数据寄存器)。 |67+| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
66-| src | 输入 | 源操作数(矢量数据寄存器)。 |68+| src | 输入 | 源操作数(矢量数据寄存器)。 |
67-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |69+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
68 70 
69矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。71矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
70 72 
@@ -74,6 +76,7 @@ __simd_callee__ inline void asc_log(vector_half& dst,
74 76 
75## 约束说明77## 约束说明
76 78 
79+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77- `dst`与`src`的数据类型需要保持一致。80- `dst`与`src`的数据类型需要保持一致。
78- `mask`掩码位为0时,`dst`对应元素置0。81- `mask`掩码位为0时,`dst`对应元素置0。
79 82 
@@ -36,6 +36,8 @@ $$
36dst_i = max(src0_i, src1_i)36dst_i = max(src0_i, src1_i)
37$$37$$
38 38 
39+本接口为Reg矢量计算接口,仅在AIV上生效。
40+ 
39## 函数原型41## 函数原型
40 42 
41```c43```c
@@ -90,9 +92,7 @@ __simd_callee__ inline vector_float asc_max(vector_float src0,
90 92 
91## 约束说明93## 约束说明
92 94 
93-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。95+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
94-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
95-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
96- max(-0, +0) = +0。96- max(-0, +0) = +0。
97 97 
98## 调用示例98## 调用示例
@@ -34,6 +34,8 @@ $$
34dst_i = max(src_i, value)34dst_i = max(src_i, value)
35$$35$$
36 36 
37+本接口为Reg矢量计算接口,仅在AIV上生效。
38+ 
37## 函数原型39## 函数原型
38 40 
39```c41```c
@@ -67,12 +69,12 @@ __simd_callee__ inline void asc_max_scalar(vector_half& dst,
67 69 
68**表1** 参数说明70**表1** 参数说明
69 71 
70-| 参数名 | 输入/输出 | 描述 |72+| 参数名 | 输入/输出 | 描述 |
71| ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------- |73| ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
72-| dst | 输出 | 目的操作数(矢量数据寄存器)。 |74+| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
73-| src | 输入 | 源操作数(矢量数据寄存器)。 |75+| src | 输入 | 源操作数(矢量数据寄存器)。 |
74-| value | 输入 | 源操作数(标量)。 |76+| value | 输入 | 源操作数(标量)。 |
75-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |77+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
76 78 
77矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。79矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
78 80 
@@ -83,9 +85,7 @@ __simd_callee__ inline void asc_max_scalar(vector_half& dst,
83 85 
84## 约束说明86## 约束说明
85 87 
86-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。88+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
87-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
88-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
89- `dst`与`src`的数据类型需要保持一致。89- `dst`与`src`的数据类型需要保持一致。
90- `mask`掩码位为0时,结果对应元素置0。90- `mask`掩码位为0时,结果对应元素置0。
91- `src`为-0、`value`为+0时,结果为+0。91- `src`为-0、`value`为+0时,结果为+0。
@@ -35,6 +35,8 @@ $$
35dst_i = min(src0_i, src1_i)35dst_i = min(src0_i, src1_i)
36$$36$$
37 37 
38+本接口为Reg矢量计算接口,仅在AIV上生效。
39+ 
38## 函数原型40## 函数原型
39 41 
40```c42```c
@@ -89,9 +91,7 @@ __simd_callee__ inline vector_float asc_min(vector_float src0,
89 91 
90## 约束说明92## 约束说明
91 93 
92-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。94+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
93-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
94-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
95- min(-0, +0) = -0。95- min(-0, +0) = -0。
96 96 
97## 调用示例97## 调用示例
@@ -34,6 +34,8 @@ $$
34dst_i = min(src_i, value)34dst_i = min(src_i, value)
35$$35$$
36 36 
37+本接口为Reg矢量计算接口,仅在AIV上生效。
38+ 
37## 函数原型39## 函数原型
38 40 
39```c41```c
@@ -67,12 +69,12 @@ __simd_callee__ inline void asc_min_scalar(vector_half& dst,
67 69 
68**表1** 参数说明70**表1** 参数说明
69 71 
70-| 参数名 | 输入/输出 | 描述 |72+| 参数名 | 输入/输出 | 描述 |
71| ------ | --------- | ---------------------------------------------------------------------------------------------------------------- |73| ------ | --------- | ---------------------------------------------------------------------------------------------------------------- |
72-| dst | 输出 | 目的操作数(矢量数据寄存器)。 |74+| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
73-| src | 输入 | 源操作数(矢量数据寄存器)。 |75+| src | 输入 | 源操作数(矢量数据寄存器)。 |
74-| value | 输入 | 源操作数(标量)。 |76+| value | 输入 | 源操作数(标量)。 |
75-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |77+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
76 78 
77矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。79矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
78 80 
@@ -83,9 +85,7 @@ __simd_callee__ inline void asc_min_scalar(vector_half& dst,
83 85 
84## 约束说明86## 约束说明
85 87 
86-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。88+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
87-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
88-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
89- 输入`src`为-0、`value`为+0的情况下,结果为-0。89- 输入`src`为-0、`value`为+0的情况下,结果为-0。
90- `mask`掩码位为0时,结果对应元素置0。90- `mask`掩码位为0时,结果对应元素置0。
91 91 
@@ -36,7 +36,7 @@ $$
36dst_i = src0_i \times src1_i36dst_i = src0_i \times src1_i
37$$37$$
38 38 
39-本接口仅在AIV上生效。39+本接口为Reg矢量计算接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -92,9 +92,7 @@ __simd_callee__ inline vector_float asc_mul(vector_float src0,
92 92 
93## 约束说明93## 约束说明
94 94 
95-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。95+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
96-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
97-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
98 96 
99## 调用示例97## 调用示例
100 98 
@@ -34,6 +34,8 @@ $$
34dst_i = src_i \times value34dst_i = src_i \times value
35$$35$$
36 36 
37+本接口为Reg矢量计算接口,仅在AIV上生效。
38+ 
37## 函数原型39## 函数原型
38 40 
39```c41```c
@@ -67,12 +69,12 @@ __simd_callee__ inline void asc_mul_scalar(vector_half& dst,
67 69 
68**表1** 参数说明70**表1** 参数说明
69 71 
70-| 参数名 | 输入/输出 | 描述 |72+| 参数名 | 输入/输出 | 描述 |
71| :----- | :------- | :------- |73| :----- | :------- | :------- |
72| dst | 输出 | 目的操作数(矢量数据寄存器)。 |74| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
73| src | 输入 | 源操作数(矢量数据寄存器)。 |75| src | 输入 | 源操作数(矢量数据寄存器)。 |
74| value | 输入 | 源操作数(标量)。 |76| value | 输入 | 源操作数(标量)。 |
75-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |77+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
76 78 
77矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。79矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
78 80 
@@ -83,9 +85,7 @@ __simd_callee__ inline void asc_mul_scalar(vector_half& dst,
83 85 
84## 约束说明86## 约束说明
85 87 
86-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。88+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
87-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
88-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
89- `mask`掩码位为0时,结果对应元素置0。89- `mask`掩码位为0时,结果对应元素置0。
90 90 
91## 调用示例91## 调用示例
@@ -40,12 +40,12 @@ $$
40 40 
41其中,`bit`表示`src0`和`src1`的数据类型位宽。41其中,`bit`表示`src0`和`src1`的数据类型位宽。
42 42 
43-本接口仅在AIV上生效。43+**图 1** asc_mull计算示意图
44- 
45-**图 1** asc_mull计算示意图
46 44 
47![](../../figures/asc_mull.png)45![](../../figures/asc_mull.png)
48 46 
47+本接口为Reg矢量计算接口,仅在AIV上生效。
48+ 
49## 函数原型49## 函数原型
50 50 
51```c51```c
@@ -81,7 +81,7 @@ __simd_callee__ inline void asc_mull(vector_uint32_t& dst0,
81| dst1 | 输出 | 目的操作数(矢量数据寄存器)。数据类型须与`src0`一致。 |81| dst1 | 输出 | 目的操作数(矢量数据寄存器)。数据类型须与`src0`一致。 |
82| src0 | 输入 | 源操作数(矢量数据寄存器)。 |82| src0 | 输入 | 源操作数(矢量数据寄存器)。 |
83| src1 | 输入 | 源操作数(矢量数据寄存器)。数据类型须与`src0`一致。 |83| src1 | 输入 | 源操作数(矢量数据寄存器)。数据类型须与`src0`一致。 |
84-| mask | 输入 | 源操作数掩码(掩码寄存器),用于指示参与计算的元素。对应位置为1时参与计算,为0时不参与计算且`dst0`、`dst1`对应元素置零。需通过掩码设置接口预先赋值后再传入。 |84+| mask | 输入 | 源操作数掩码(掩码寄存器),用于指示参与计算的元素。对应位置为1时参与计算,为0时不参与计算且`dst0`、`dst1`对应元素置零。 |
85 85 
86矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。86矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
87 87 
@@ -93,9 +93,7 @@ __simd_callee__ inline void asc_mull(vector_uint32_t& dst0,
93 93 
94### 通用约束94### 通用约束
95 95 
96-- 非AIV调用直接返回。96+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
97-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
98-- `mask`需通过掩码设置接口预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
99- 掩码位为0的元素位置不参与乘法运算,`dst0`和`dst1`对应位置写0。97- 掩码位为0的元素位置不参与乘法运算,`dst0`和`dst1`对应位置写0。
100 98 
101### 计算约束99### 计算约束
@@ -36,7 +36,7 @@ $$
36dst_i = -src_i36dst_i = -src_i
37$$37$$
38 38 
39-本接口仅在AIV上生效。39+本接口为Reg矢量计算接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -86,10 +86,8 @@ __simd_callee__ inline void asc_neg(vector_half& dst,
86 86 
87## 约束说明87## 约束说明
88 88 
89-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。89+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
90-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。90+- `src`为矢量数据寄存器;无返回值原型中的`dst`为矢量数据寄存器。
91-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src`为矢量数据寄存器;无返回值原型中的`dst`为矢量数据寄存器。
92-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
93- `mask`比特位为0时,计算结果对应比特位写0。91- `mask`比特位为0时,计算结果对应比特位写0。
94- 整数输入为有符号整数类型的最小负值时,结果保留原值不变。92- 整数输入为有符号整数类型的最小负值时,结果保留原值不变。
95- 浮点输入通过翻转符号位实现取反:正数变为对应负数,负数变为对应正数,+0.0变为-0.0,-0.0变为+0.0,+inf变为-inf,-inf变为+inf。93- 浮点输入通过翻转符号位实现取反:正数变为对应负数,负数变为对应正数,+0.0变为-0.0,-0.0变为+0.0,+inf变为-inf,-inf变为+inf。
@@ -37,6 +37,8 @@ $$
37dst_i = \sqrt{src_i}37dst_i = \sqrt{src_i}
38$$38$$
39 39 
40+本接口为Reg矢量计算接口,仅在AIV上生效。
41+ 
40## 函数原型42## 函数原型
41 43 
42```c44```c
@@ -86,9 +88,7 @@ __simd_callee__ inline vector_float asc_sqrt(vector_float src,
86 88 
87## 约束说明89## 约束说明
88 90 
89-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。91+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
90-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
91-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
92- 输入为负数时结果为nan。92- 输入为负数时结果为nan。
93- 输入为-0时结果为-0。93- 输入为-0时结果为-0。
94 94 
@@ -48,7 +48,7 @@ $$
48 48 
49输出`carry`适用场景请参考[asc_subc功能说明](asc_subc.md#功能说明)。49输出`carry`适用场景请参考[asc_subc功能说明](asc_subc.md#功能说明)。
50 50 
51-本接口仅在AIV上生效。51+本接口为Reg矢量计算接口,仅在AIV上生效。
52 52 
53## 函数原型53## 函数原型
54 54 
@@ -147,9 +147,7 @@ __simd_callee__ inline void asc_sub(vector_bool& carry,
147 147 
148### 通用约束148### 通用约束
149 149 
150-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。150+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
151-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
152-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
153 151 
154### 无借位输出减法约束152### 无借位输出减法约束
155 153 
@@ -40,7 +40,7 @@ $$
40 40 
41![](../../figures/asc_subc_1.png)41![](../../figures/asc_subc_1.png)
42 42 
43-本接口仅在AIV上生效。43+本接口为Reg矢量计算接口,仅在AIV上生效。
44 44 
45## 函数原型45## 函数原型
46 46 
@@ -73,7 +73,7 @@ __simd_callee__ inline void asc_subc(vector_bool& carry,
73 73 
74**表1** 参数说明74**表1** 参数说明
75 75 
76-| 参数名 | 输入/输出 | 描述 |76+| 参数名 | 输入/输出 | 描述 |
77| :----- | :------- | :------- |77| :----- | :------- | :------- |
78| carry | 输出 | 目的操作数(掩码寄存器)。用于存储减法借位输出。减法不借位等价于补码加法进位。 |78| carry | 输出 | 目的操作数(掩码寄存器)。用于存储减法借位输出。减法不借位等价于补码加法进位。 |
79| dst | 输出 | 目的操作数(矢量数据寄存器),用于存储计算结果的低32位。 |79| dst | 输出 | 目的操作数(矢量数据寄存器),用于存储计算结果的低32位。 |
@@ -91,8 +91,7 @@ __simd_callee__ inline void asc_subc(vector_bool& carry,
91 91 
92## 约束说明92## 约束说明
93 93 
94-- 本接口在非AIV上调用直接返回。94+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
95-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
96- 运算输出完整计算结果(包含借位标志),不受[asc_set_ctrl](../../spr/asc_set_ctrl.md)影响,硬件不会对输出进行饱和或截断。95- 运算输出完整计算结果(包含借位标志),不受[asc_set_ctrl](../../spr/asc_set_ctrl.md)影响,硬件不会对输出进行饱和或截断。
97 96 
98## 关键特性97## 关键特性
@@ -79,9 +79,8 @@ __simd_callee__ inline void asc_duplicate(vector_int8_t& dst,
79 79 
80## 约束说明80## 约束说明
81 81 
82-- 本接口为Reg矢量计算接口,只能在使用`__simd_vf__`标记的VF函数内调用,不支持在`__aicore__`函数中直接调用,仅在AIV上生效,在AIC上调用将直接返回。82+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
83- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。83- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。
84-- 使用mask前,需要通过掩码设置或搬入接口完成初始化;未初始化的掩码寄存器内容不确定。
85- mask仅筛选dst中写入广播值的位置,不筛选src中的元素。无论mask的最低位是否有效,待广播的数据均为src的最低位元素。84- mask仅筛选dst中写入广播值的位置,不筛选src中的元素。无论mask的最低位是否有效,待广播的数据均为src的最低位元素。
86 85 
87## 调用示例86## 调用示例
@@ -73,8 +73,7 @@ __simd_callee__ inline void asc_duplicate_highest(vector_float& dst,
73 73 
74## 约束说明74## 约束说明
75 75 
76-- 本接口只能在使用`__simd_vf__`标记的Vector Function内调用,不支持在`__aicore__`函数中直接调用,仅在AIV上生效,在AIC上调用将直接返回。76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77-- 使用`mask`前,需要通过掩码设置或搬入接口完成初始化;未初始化的掩码寄存器内容不确定。
78- `mask`仅筛选`dst`中写入广播值的位置,不筛选`src`中的元素。无论`mask`的最高位是否有效,待广播的数据均为`src`的最高位元素。77- `mask`仅筛选`dst`中写入广播值的位置,不筛选`src`中的元素。无论`mask`的最高位是否有效,待广播的数据均为`src`的最高位元素。
79- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。78- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。
80 79 
@@ -73,8 +73,7 @@ __simd_callee__ inline void asc_duplicate_highest_merge(vector_float& dst,
73 73 
74## 约束说明74## 约束说明
75 75 
76-- 本接口只能在使用`__simd_vf__`标记的Vector Function内调用,不支持在`__aicore__`函数中直接调用,仅在AIV上生效,在AIC上调用将直接返回。76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77-- 使用`mask`前,需要通过掩码设置或搬入接口完成初始化;未初始化的掩码寄存器内容不确定。
78- `mask`仅筛选`dst`中写入广播值的位置,不筛选`src`中的元素。无论`mask`的最高位是否有效,待广播的数据均为`src`的最高位元素。77- `mask`仅筛选`dst`中写入广播值的位置,不筛选`src`中的元素。无论`mask`的最高位是否有效,待广播的数据均为`src`的最高位元素。
79- 调用接口前需要初始化`dst`,否则未被`mask`筛选的元素值不确定。78- 调用接口前需要初始化`dst`,否则未被`mask`筛选的元素值不确定。
80- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。79- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。
@@ -30,6 +30,8 @@
30 30 
31merge模式下,将src的最低位元素广播到dst中被mask筛选的位置,dst中未被mask筛选的元素保留原值。31merge模式下,将src的最低位元素广播到dst中被mask筛选的位置,dst中未被mask筛选的元素保留原值。
32 32 
33+本接口为Reg矢量计算接口,仅在AIV上生效。
34+ 
33## 函数原型35## 函数原型
34 36 
35```cpp37```cpp
@@ -65,7 +67,7 @@ __simd_callee__ inline void asc_duplicate_merge(vector_float& dst, vector_float
65 67 
66## 约束说明68## 约束说明
67 69 
68-无70+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
69 71 
70## 调用示例72## 调用示例
71 73 
@@ -111,9 +111,8 @@ __simd_callee__ inline void asc_duplicate_scalar(vector_int8_t& dst,
111 111 
112## 约束说明112## 约束说明
113 113 
114-- 本接口只能在使用`__simd_vf__`标记的Vector Function内调用,不支持在`__aicore__`函数中直接调用,仅在AIV上生效,在AIC上调用将直接返回。114+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
115- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。115- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。
116-- 使用`mask`前,需要通过掩码设置或搬入接口完成初始化;未初始化的掩码寄存器内容不确定。
117- 调用带返回值接口时,应使用类型明确的变量或显式类型转换,例如`static_cast<uint8_t>(1)`,以匹配正确的函数原型。116- 调用带返回值接口时,应使用类型明确的变量或显式类型转换,例如`static_cast<uint8_t>(1)`,以匹配正确的函数原型。
118 117 
119## 调用示例118## 调用示例
@@ -73,8 +73,7 @@ __simd_callee__ inline void asc_duplicate_scalar_merge(vector_float& dst,
73 73 
74## 约束说明74## 约束说明
75 75 
76-- 本接口只能在使用`__simd_vf__`标记的Vector Function内调用,不支持在`__aicore__`函数中直接调用,仅在AIV上生效,在AIC上调用将直接返回。76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77-- 使用`mask`前,需要通过掩码设置或搬入接口完成初始化;未初始化的掩码寄存器内容不确定。
78- 调用接口前需要初始化`dst`,否则未被`mask`筛选的元素值不确定。77- 调用接口前需要初始化`dst`,否则未被`mask`筛选的元素值不确定。
79- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。78- 同一寄存器的数据依赖由硬件保序,无需额外插入同步指令。本接口与前后Reg数据搬运接口之间,如果不同寄存器访问同一Unified Buffer(UB)地址且存在写后读或写后写依赖,需要调用[asc_mem_bar](../reg_sync/asc_mem_bar.md)进行同步。
80 79 
@@ -38,7 +38,7 @@ dst_i =
38\end{cases}38\end{cases}
39$$39$$
40 40 
41-本接口仅在AIV上生效。41+本接口为Reg矢量计算接口,仅在AIV上生效。
42 42 
43## 函数原型43## 函数原型
44 44 
@@ -77,7 +77,7 @@ __simd_callee__ inline void asc_eq(vector_bool& dst,
77 77 
78**表1** 参数说明78**表1** 参数说明
79 79 
80-| 参数名 | 输入/输出 | 描述 |80+| 参数名 | 输入/输出 | 描述 |
81| :----- | :------- | :------- |81| :----- | :------- | :------- |
82| dst | 输出 | 目的操作数(掩码寄存器),仅用于无返回值原型。 |82| dst | 输出 | 目的操作数(掩码寄存器),仅用于无返回值原型。 |
83| src0 | 输入 | 源操作数(矢量数据寄存器)。 |83| src0 | 输入 | 源操作数(矢量数据寄存器)。 |
@@ -93,10 +93,8 @@ __simd_callee__ inline void asc_eq(vector_bool& dst,
93 93 
94## 约束说明94## 约束说明
95 95 
96-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。96+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
97-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。97+- `src0`、`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
98-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src0`、`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
99-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
100- `mask`比特位为0时,计算结果对应比特位写0。98- `mask`比特位为0时,计算结果对应比特位写0。
101- 浮点比较时,+0.0与-0.0视为相等。99- 浮点比较时,+0.0与-0.0视为相等。
102- 浮点比较输入含nan时,计算结果对应比特位写0。100- 浮点比较输入含nan时,计算结果对应比特位写0。
@@ -38,7 +38,7 @@ dst_i =
38\end{cases}38\end{cases}
39$$39$$
40 40 
41-本接口仅在AIV上生效。41+本接口为Reg矢量计算接口,仅在AIV上生效。
42 42 
43## 函数原型43## 函数原型
44 44 
@@ -93,10 +93,8 @@ __simd_callee__ inline void asc_eq_scalar(vector_bool& dst,
93 93 
94## 约束说明94## 约束说明
95 95 
96-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。96+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
97-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。97+- `src`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
98-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
99-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
100- `mask`比特位为0时,计算结果对应比特位写0。98- `mask`比特位为0时,计算结果对应比特位写0。
101- 浮点比较时,+0.0与-0.0视为相等。99- 浮点比较时,+0.0与-0.0视为相等。
102- 浮点比较输入含nan时,计算结果对应比特位写0。100- 浮点比较输入含nan时,计算结果对应比特位写0。
@@ -36,7 +36,7 @@ $$
36dst_i = (src0_i \geq src1_i)36dst_i = (src0_i \geq src1_i)
37$$37$$
38 38 
39-本接口仅在AIV上生效。39+本接口为Reg矢量计算接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -91,10 +91,8 @@ __simd_callee__ inline void asc_ge(vector_bool& dst,
91 91 
92## 约束说明92## 约束说明
93 93 
94-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。94+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
95-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。95+- `src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
96-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
97-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
98- `mask`比特位为0时,计算结果对应比特位写0。96- `mask`比特位为0时,计算结果对应比特位写0。
99- 浮点比较时,+0.0与-0.0视为相等。97- 浮点比较时,+0.0与-0.0视为相等。
100- 浮点比较输入含nan时,计算结果对应比特位写0。98- 浮点比较输入含nan时,计算结果对应比特位写0。
@@ -38,6 +38,8 @@ dst_i =
38\end{cases}38\end{cases}
39$$39$$
40 40 
41+本接口为Reg矢量计算接口,仅在AIV上生效。
42+ 
41## 函数原型43## 函数原型
42 44 
43```c45```c
@@ -71,12 +73,12 @@ __simd_callee__ inline void asc_ge_scalar(vector_bool& dst,
71 73 
72**表1** 参数说明74**表1** 参数说明
73 75 
74-| 参数名 | 输入/输出 | 描述 |76+| 参数名 | 输入/输出 | 描述 |
75| ------ | --------- | ---------------------------------------------------------------------------------------------------------------- |77| ------ | --------- | ---------------------------------------------------------------------------------------------------------------- |
76-| dst | 输出 | 目的操作数(掩码寄存器)。 |78+| dst | 输出 | 目的操作数(掩码寄存器)。 |
77-| src | 输入 | 源操作数(矢量数据寄存器)。 |79+| src | 输入 | 源操作数(矢量数据寄存器)。 |
78-| value | 输入 | 源操作数(标量)。 |80+| value | 输入 | 源操作数(标量)。 |
79-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与比较。`mask`中与元素对应的比特位为1时,该元素参与比较;为0时,该元素不参与比较。 |81+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与比较。`mask`中与元素对应的比特位为1时,该元素参与比较;为0时,该元素不参与比较。 |
80 82 
81矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。83矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
82 84 
@@ -87,9 +89,7 @@ __simd_callee__ inline void asc_ge_scalar(vector_bool& dst,
87 89 
88## 约束说明90## 约束说明
89 91 
90-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。92+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
91-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
92-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
93- `src`与`value`的数据类型需要保持一致。93- `src`与`value`的数据类型需要保持一致。
94- `mask`掩码位为0时,结果对应比特位置0。94- `mask`掩码位为0时,结果对应比特位置0。
95- 浮点比较输入包含nan时,结果对应比特位写0。95- 浮点比较输入包含nan时,结果对应比特位写0。
@@ -36,7 +36,7 @@ $$
36dst_i = (src0_i > src1_i)36dst_i = (src0_i > src1_i)
37$$37$$
38 38 
39-本接口仅在AIV上生效。39+本接口为Reg矢量计算接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -77,7 +77,7 @@ __simd_callee__ inline void asc_gt(vector_bool& dst,
77 77 
78| 参数名 | 输入/输出 | 描述 |78| 参数名 | 输入/输出 | 描述 |
79|:-----| :--- |:-------|79|:-----| :--- |:-------|
80-| dst | 输出 | 目的操作数(掩码寄存器),仅用于无返回值原型。 |80+| dst | 输出 | 目的操作数(掩码寄存器),仅用于无返回值原型。 |
81| src0 | 输入 | 源操作数(矢量数据寄存器)。 |81| src0 | 输入 | 源操作数(矢量数据寄存器)。 |
82| src1 | 输入 | 源操作数(矢量数据寄存器)。 |82| src1 | 输入 | 源操作数(矢量数据寄存器)。 |
83| mask | 输入 | 源操作数掩码(掩码寄存器),用于指示在计算过程中哪些元素参与计算。mask中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |83| mask | 输入 | 源操作数掩码(掩码寄存器),用于指示在计算过程中哪些元素参与计算。mask中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
@@ -91,10 +91,8 @@ __simd_callee__ inline void asc_gt(vector_bool& dst,
91 91 
92## 约束说明92## 约束说明
93 93 
94-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。94+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
95-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。95+- `src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
96-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
97-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
98- `mask`比特位为0时,计算结果对应比特位写0。96- `mask`比特位为0时,计算结果对应比特位写0。
99- 浮点比较时,+0.0与-0.0视为相等。97- 浮点比较时,+0.0与-0.0视为相等。
100- 浮点比较输入含nan时,计算结果对应比特位写0。98- 浮点比较输入含nan时,计算结果对应比特位写0。
@@ -38,6 +38,8 @@ dst_i =
38 \end{cases}38 \end{cases}
39$$39$$
40 40 
41+本接口为Reg矢量计算接口,仅在AIV上生效。
42+ 
41## 函数原型43## 函数原型
42 44 
43```c45```c
@@ -71,12 +73,12 @@ __simd_callee__ inline void asc_gt_scalar(vector_bool& dst,
71 73 
72**表1** 参数说明74**表1** 参数说明
73 75 
74-| 参数名 | 输入/输出 | 描述 |76+| 参数名 | 输入/输出 | 描述 |
75| ------ | -------- | -------------------------------- |77| ------ | -------- | -------------------------------- |
76-| dst | 输出 | 目的操作数(掩码寄存器)。 |78+| dst | 输出 | 目的操作数(掩码寄存器)。 |
77-| src | 输入 | 源操作数(矢量数据寄存器)。 |79+| src | 输入 | 源操作数(矢量数据寄存器)。 |
78-| value | 输入 | 源操作数(标量)。 |80+| value | 输入 | 源操作数(标量)。 |
79-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与比较。`mask`中与元素对应的比特位为1时,该元素参与比较;为0时,该元素不参与比较。 |81+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与比较。`mask`中与元素对应的比特位为1时,该元素参与比较;为0时,该元素不参与比较。 |
80 82 
81矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。83矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
82 84 
@@ -87,9 +89,7 @@ __simd_callee__ inline void asc_gt_scalar(vector_bool& dst,
87 89 
88## 约束说明90## 约束说明
89 91 
90-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。92+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
91-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
92-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
93- `mask`掩码位为0时,结果对应比特位置0。93- `mask`掩码位为0时,结果对应比特位置0。
94- 浮点数据类型比较,涉及`nan`时比较结果为0。94- 浮点数据类型比较,涉及`nan`时比较结果为0。
95 95 
@@ -36,7 +36,7 @@ $$
36dst_i = (src0_i \leq src1_i)36dst_i = (src0_i \leq src1_i)
37$$37$$
38 38 
39-本接口仅在AIV上生效。39+本接口为Reg矢量计算接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -91,10 +91,8 @@ __simd_callee__ inline void asc_le(vector_bool& dst,
91 91 
92## 约束说明92## 约束说明
93 93 
94-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。94+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
95-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。95+- `src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
96-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
97-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
98- `mask`比特位为0时,计算结果对应比特位写0。96- `mask`比特位为0时,计算结果对应比特位写0。
99- 浮点比较时,+0.0与-0.0视为相等。97- 浮点比较时,+0.0与-0.0视为相等。
100- 浮点比较输入含nan时,计算结果对应比特位写0。98- 浮点比较输入含nan时,计算结果对应比特位写0。
@@ -38,7 +38,7 @@ dst_i =
38\end{cases}38\end{cases}
39$$39$$
40 40 
41-本接口仅在AIV上生效。41+本接口为Reg矢量计算接口,仅在AIV上生效。
42 42 
43## 函数原型43## 函数原型
44 44 
@@ -93,10 +93,8 @@ __simd_callee__ inline void asc_le_scalar(vector_bool& dst,
93 93 
94## 约束说明94## 约束说明
95 95 
96-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。96+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
97-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。97+- `src`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
98-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
99-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
100- `mask`比特位为0时,计算结果对应比特位写0。98- `mask`比特位为0时,计算结果对应比特位写0。
101- 浮点比较时,+0.0与-0.0视为相等。99- 浮点比较时,+0.0与-0.0视为相等。
102- 浮点比较输入含nan时,计算结果对应比特位写0。100- 浮点比较输入含nan时,计算结果对应比特位写0。
@@ -36,7 +36,7 @@ $$
36dst_i = (src0_i < src1_i)36dst_i = (src0_i < src1_i)
37$$37$$
38 38 
39-本接口仅在AIV上生效。39+本接口为Reg矢量计算接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -91,10 +91,8 @@ __simd_callee__ inline void asc_lt(vector_bool& dst,
91 91 
92## 约束说明92## 约束说明
93 93 
94-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。94+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
95-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。95+- `src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
96-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
97-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
98- `mask`比特位为0时,计算结果对应比特位写0。96- `mask`比特位为0时,计算结果对应比特位写0。
99- 浮点比较时,+0.0与-0.0视为相等。97- 浮点比较时,+0.0与-0.0视为相等。
100- 浮点比较输入含nan时,计算结果对应比特位写0。98- 浮点比较输入含nan时,计算结果对应比特位写0。
@@ -38,7 +38,7 @@ dst_i =
38\end{cases}38\end{cases}
39$$39$$
40 40 
41-本接口仅在AIV上生效。41+本接口为Reg矢量计算接口,仅在AIV上生效。
42 42 
43## 函数原型43## 函数原型
44 44 
@@ -93,10 +93,8 @@ __simd_callee__ inline void asc_lt_scalar(vector_bool& dst,
93 93 
94## 约束说明94## 约束说明
95 95 
96-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。96+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
97-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。97+- `src`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
98-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
99-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
100- `mask`比特位为0时,计算结果对应比特位写0。98- `mask`比特位为0时,计算结果对应比特位写0。
101- 浮点比较时,+0.0与-0.0视为相等。99- 浮点比较时,+0.0与-0.0视为相等。
102- 浮点比较输入含nan时,计算结果对应比特位写0。100- 浮点比较输入含nan时,计算结果对应比特位写0。
@@ -36,7 +36,7 @@ $$
36dst_i = (src0_i \neq src1_i)36dst_i = (src0_i \neq src1_i)
37$$37$$
38 38 
39-本接口仅在AIV上生效。39+本接口为Reg矢量计算接口,仅在AIV上生效。
40 40 
41## 函数原型41## 函数原型
42 42 
@@ -91,10 +91,8 @@ __simd_callee__ inline void asc_ne(vector_bool& dst,
91 91 
92## 约束说明92## 约束说明
93 93 
94-- 通过函数返回值返回结果的函数原型在非AIV上调用返回对应矢量类型的默认构造值。94+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
95-- 通过引用参数输出结果的函数原型在非AIV上调用直接返回。95+- `src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
96-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用,`src0`和`src1`为矢量数据寄存器;无返回值原型中的`dst`为掩码寄存器。
97-- `mask`需通过[掩码设置接口](../../defs/type/data_type_definition.md#掩码寄存器)预先赋值后再传入;未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
98- `mask`比特位为0时,计算结果对应比特位写0。96- `mask`比特位为0时,计算结果对应比特位写0。
99- 浮点比较时,+0.0与-0.0视为相等。97- 浮点比较时,+0.0与-0.0视为相等。
100- 浮点比较输入含nan时,计算结果对应比特位写1。98- 浮点比较输入含nan时,计算结果对应比特位写1。
@@ -38,6 +38,8 @@ dst_i =
38\end{cases}38\end{cases}
39$$39$$
40 40 
41+本接口为Reg矢量计算接口,仅在AIV上生效。
42+ 
41## 函数原型43## 函数原型
42 44 
43```c45```c
@@ -71,12 +73,12 @@ __simd_callee__ inline void asc_ne_scalar(vector_bool& dst,
71 73 
72**表1** 参数说明74**表1** 参数说明
73 75 
74-| 参数名 | 输入/输出 | 描述 |76+| 参数名 | 输入/输出 | 描述 |
75| ------ | --------- | ---------------------------------------------------------------------------------------------------------------- |77| ------ | --------- | ---------------------------------------------------------------------------------------------------------------- |
76-| dst | 输出 | 目的操作数(掩码寄存器)。 |78+| dst | 输出 | 目的操作数(掩码寄存器)。 |
77-| src | 输入 | 源操作数(矢量数据寄存器)。 |79+| src | 输入 | 源操作数(矢量数据寄存器)。 |
78-| value | 输入 | 源操作数(标量)。 |80+| value | 输入 | 源操作数(标量)。 |
79-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与比较。`mask`中与元素对应的比特位为1时,该元素参与比较;为0时,该元素不参与比较。 |81+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与比较。`mask`中与元素对应的比特位为1时,该元素参与比较;为0时,该元素不参与比较。 |
80 82 
81矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。83矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
82 84 
@@ -87,9 +89,7 @@ __simd_callee__ inline void asc_ne_scalar(vector_bool& dst,
87 89 
88## 约束说明90## 约束说明
89 91 
90-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。92+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
91-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
92-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
93- `src`与`value`的数据类型需要保持一致。93- `src`与`value`的数据类型需要保持一致。
94- `mask`掩码位为0时,结果对应比特位置0。94- `mask`掩码位为0时,结果对应比特位置0。
95- 浮点比较输入包含nan时,结果对应比特位写1。95- 浮点比较输入包含nan时,结果对应比特位写1。
@@ -1,6 +1,8 @@
1# Reg矢量计算1# Reg矢量计算
2 2 
3- **[概述](./overview.md)**3- **[概述](./overview.md)**
4+- **[关键特性说明](./key_features.md)**
5+- **[VF调用](vf_call/asc_vf_call.md)**
4- **[Reg数据搬入](load/load.md)**6- **[Reg数据搬入](load/load.md)**
5- **[Reg聚合搬入](ub_gather/gather.md)**7- **[Reg聚合搬入](ub_gather/gather.md)**
6- **[Reg数据搬出](store/store.md)**8- **[Reg数据搬出](store/store.md)**
@@ -31,7 +31,7 @@
31 31 
32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
33 33 
34-本接口为`reg`矢量计算接口,仅在AIV上生效。34+本接口为Reg矢量计算接口,仅在AIV上生效。
35 35 
36## 函数原型36## 函数原型
37 37 
@@ -73,12 +73,9 @@ __simd_callee__ inline vector_fp4x2_e1m2_t asc_bfloat162e1m2x2_<round_mode>(vect
73 73 
74## 约束说明74## 约束说明
75 75 
76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
76- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。77- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
77- 位置选择标签选择目的操作数的写入地址,其他位置清零。78- 位置选择标签选择目的操作数的写入地址,其他位置清零。
78-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
79-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
80-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
81-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
82- `mask`掩码位为0时,`dst`对应元素置0。79- `mask`掩码位为0时,`dst`对应元素置0。
83 80 
84## 调用示例81## 调用示例
@@ -31,7 +31,7 @@
31 31 
32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
33 33 
34-本接口为`reg`矢量计算接口,仅在AIV上生效。34+本接口为Reg矢量计算接口,仅在AIV上生效。
35 35 
36## 函数原型36## 函数原型
37 37 
@@ -73,12 +73,9 @@ __simd_callee__ inline vector_fp4x2_e2m1_t asc_bfloat162e2m1x2_<round_mode>(vect
73 73 
74## 约束说明74## 约束说明
75 75 
76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
76- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。77- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
77- 位置选择标签选择目的操作数的写入地址,其他位置清零。78- 位置选择标签选择目的操作数的写入地址,其他位置清零。
78-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
79-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
80-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
81-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
82- `mask`掩码位为0时,`dst`对应元素置0。79- `mask`掩码位为0时,`dst`对应元素置0。
83 80 
84## 调用示例81## 调用示例
@@ -30,6 +30,8 @@
30 30 
31根据`mask`将`src`中的每个参与计算的`bfloat16_t`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数类型位宽比为1:2,读取数据时需要将一个`VL`大小的数据分为两部分,根据参数`src_pos`选择读取`src`索引为偶数的位置或奇数的位置。31根据`mask`将`src`中的每个参与计算的`bfloat16_t`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数类型位宽比为1:2,读取数据时需要将一个`VL`大小的数据分为两部分,根据参数`src_pos`选择读取`src`索引为偶数的位置或奇数的位置。
32 32 
33+本接口为Reg矢量计算接口,仅在AIV上生效。
34+ 
33## 函数原型35## 函数原型
34 36 
35```c37```c
@@ -74,11 +76,8 @@ __simd_callee__ inline vector_float asc_bfloat162float(vector_bfloat16_t src,
74 76 
75## 约束说明77## 约束说明
76 78 
79+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。80- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
78-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
79-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
80-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
81-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
82- `mask`掩码位为0时,`dst`对应元素置0。81- `mask`掩码位为0时,`dst`对应元素置0。
83 82 
84## 调用示例83## 调用示例
@@ -32,6 +32,8 @@
32 32 
33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。
34 34 
35+本接口为Reg矢量计算接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```c39```c
@@ -81,10 +83,7 @@ __simd_callee__ inline vector_half asc_bfloat162half_rn(vector_bfloat16_t src,
81 83 
82## 约束说明84## 约束说明
83 85 
84-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。86+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
85-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
86-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
87-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
88- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。87- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
89- `mask`掩码位为0时,`dst`对应元素置0。88- `mask`掩码位为0时,`dst`对应元素置0。
90 89 
@@ -32,6 +32,8 @@
32 32 
33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。
34 34 
35+本接口为Reg矢量计算接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```c39```c
@@ -95,11 +97,8 @@ __simd_callee__ inline vector_int32_t asc_bfloat162int32_rn(vector_bfloat16_t sr
95 97 
96## 约束说明98## 约束说明
97 99 
100+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
98- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。101- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
99-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
100-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
101-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
102-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
103- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。102- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
104- `mask`掩码位为0时,`dst`对应元素置0。103- `mask`掩码位为0时,`dst`对应元素置0。
105 104 
@@ -32,6 +32,8 @@
32 32 
33关于舍入模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。33关于舍入模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
34 34 
35+本接口为Reg矢量计算接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```cpp39```cpp
@@ -81,9 +83,7 @@ __simd_callee__ inline void asc_ceil(vector_half& dst,
81 83 
82## 约束说明84## 约束说明
83 85 
84-- 本接口在非AIV上调用直接返回。86+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
85-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
86-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
87- `half`和`bfloat16_t`支持饱和模式。`float`类型只支持不饱和模式。87- `half`和`bfloat16_t`支持饱和模式。`float`类型只支持不饱和模式。
88- `mask`掩码位为0时,`dst`对应元素置0。88- `mask`掩码位为0时,`dst`对应元素置0。
89 89 
@@ -29,7 +29,7 @@
29 29 
30根据`mask`将`src`中参与计算的`fp4x2_e1m2_t`类型元素转换为`bfloat16_t`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。30根据`mask`将`src`中参与计算的`fp4x2_e1m2_t`类型元素转换为`bfloat16_t`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。
31 31 
32-本接口为`reg`矢量计算接口,仅在AIV上生效。32+本接口为Reg矢量计算接口,仅在AIV上生效。
33 33 
34## 函数原型34## 函数原型
35 35 
@@ -70,11 +70,8 @@ __simd_callee__ inline vector_bfloat16_t asc_e1m2x22bfloat16(vector_fp4x2_e1m2_t
70 70 
71## 约束说明71## 约束说明
72 72 
73+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
73- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。74- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
74-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
75-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
76-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
77-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
78- `mask`掩码位为0时,`dst`对应元素置0。75- `mask`掩码位为0时,`dst`对应元素置0。
79 76 
80## 调用示例77## 调用示例
@@ -29,7 +29,7 @@
29 29 
30根据`mask`将`src`中参与计算的`fp4x2_e2m1_t`类型元素转换为`bfloat16_t`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。30根据`mask`将`src`中参与计算的`fp4x2_e2m1_t`类型元素转换为`bfloat16_t`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。
31 31 
32-本接口为`reg`矢量计算接口,仅在AIV上生效。32+本接口为Reg矢量计算接口,仅在AIV上生效。
33 33 
34## 函数原型34## 函数原型
35 35 
@@ -70,11 +70,8 @@ __simd_callee__ inline vector_bfloat16_t asc_e2m1x22bfloat16(vector_fp4x2_e2m1_t
70 70 
71## 约束说明71## 约束说明
72 72 
73+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
73- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。74- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
74-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
75-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
76-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
77-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
78- `mask`掩码位为0时,`dst`对应元素置0。75- `mask`掩码位为0时,`dst`对应元素置0。
79 76 
80## 调用示例77## 调用示例
@@ -29,7 +29,7 @@
29 29 
30根据`mask`将`src`中参与计算的`fp8_e4m3fn_t`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。30根据`mask`将`src`中参与计算的`fp8_e4m3fn_t`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。
31 31 
32-本接口为`reg`矢量计算接口,仅在AIV上生效。32+本接口为Reg矢量计算接口,仅在AIV上生效。
33 33 
34## 函数原型34## 函数原型
35 35 
@@ -70,11 +70,8 @@ __simd_callee__ inline vector_float asc_e4m32float(vector_fp8_e4m3fn_t src,
70 70 
71## 约束说明71## 约束说明
72 72 
73+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
73- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。74- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
74-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
75-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
76-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
77-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
78- `mask`掩码位为0时,`dst`对应元素置0。75- `mask`掩码位为0时,`dst`对应元素置0。
79 76 
80## 调用示例77## 调用示例
@@ -29,7 +29,7 @@
29 29 
30根据`mask`将`src`中参与计算的`fp8_e5m2_t`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。30根据`mask`将`src`中参与计算的`fp8_e5m2_t`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。
31 31 
32-本接口为`reg`矢量计算接口,仅在AIV上生效。32+本接口为Reg矢量计算接口,仅在AIV上生效。
33 33 
34## 函数原型34## 函数原型
35 35 
@@ -70,11 +70,8 @@ __simd_callee__ inline vector_float asc_e5m22float(vector_fp8_e5m2_t src,
70 70 
71## 约束说明71## 约束说明
72 72 
73+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
73- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。74- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
74-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
75-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
76-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
77-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
78- `mask`掩码位为0时,`dst`对应元素置0。75- `mask`掩码位为0时,`dst`对应元素置0。
79 76 
80## 调用示例77## 调用示例
@@ -45,7 +45,7 @@ def asc_float2bfloat16_rn(dst, src, mask, dst_pos):
45 45 
46关于舍入模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。46关于舍入模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
47 47 
48-本接口为`reg`矢量计算接口,仅在AIV上生效。48+本接口为Reg矢量计算接口,仅在AIV上生效。
49 49 
50## 函数原型50## 函数原型
51 51 
@@ -88,11 +88,11 @@ __simd_callee__ inline void asc_float2bfloat16_rn(vector_bfloat16_t& dst,
88 88 
89**表1** 参数说明89**表1** 参数说明
90 90 
91-| 参数名 | 输入/输出 | 描述 |91+| 参数名 | 输入/输出 | 描述 |
92| ------ | --------- | ------------------------------------------------------------------------------------------------------------------ |92| ------ | --------- | ------------------------------------------------------------------------------------------------------------------ |
93-| dst | 输出 | 目的操作数(矢量数据寄存器)。 |93+| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
94-| src | 输入 | 源操作数(矢量数据寄存器)。 |94+| src | 输入 | 源操作数(矢量数据寄存器)。 |
95-| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |95+| mask | 输入 | 掩码寄存器,用于控制各元素是否参与计算。`mask`中与元素对应的比特位为1时,该元素参与计算;为0时,该元素不参与计算。 |
96| dst_pos | 输入 | 位置选择标签(编译期标签分发,通过编译期重载选择对应实现),类型为`std::integral_constant<asc_position_mode, asc_position_mode::EVEN>`或`std::integral_constant<asc_position_mode, asc_position_mode::ODD>`。取`ASC_POSITION_EVEN`时选择将结果写入目的操作数索引为偶数的位置,其他位置清零;取`ASC_POSITION_ODD`时选择将结果写入目的操作数索引为奇数的位置,其他位置清零。 |96| dst_pos | 输入 | 位置选择标签(编译期标签分发,通过编译期重载选择对应实现),类型为`std::integral_constant<asc_position_mode, asc_position_mode::EVEN>`或`std::integral_constant<asc_position_mode, asc_position_mode::ODD>`。取`ASC_POSITION_EVEN`时选择将结果写入目的操作数索引为偶数的位置,其他位置清零;取`ASC_POSITION_ODD`时选择将结果写入目的操作数索引为奇数的位置,其他位置清零。 |
97 97 
98矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。98矢量数据寄存器和掩码寄存器的详细说明请参见[reg数据类型定义](../../defs/type/data_type_definition.md)。
@@ -104,10 +104,9 @@ __simd_callee__ inline void asc_float2bfloat16_rn(vector_bfloat16_t& dst,
104 104 
105## 约束说明105## 约束说明
106 106 
107+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
107- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。108- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
108- 位置选择标签选择目的操作数的写入地址,其他位置清零。109- 位置选择标签选择目的操作数的写入地址,其他位置清零。
109-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
110-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
111- `src`与`dst`的数据类型需要与函数原型匹配。110- `src`与`dst`的数据类型需要与函数原型匹配。
112- `mask`掩码位为0时,`dst`对应元素置0。111- `mask`掩码位为0时,`dst`对应元素置0。
113- 结果写入`dst`的奇数索引位置时,偶数索引位置置0;结果写入偶数索引位置时,奇数索引位置置0。112- 结果写入`dst`的奇数索引位置时,偶数索引位置置0;结果写入偶数索引位置时,奇数索引位置置0。
@@ -31,7 +31,7 @@
31 31 
32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
33 33 
34-本接口为`reg`矢量计算接口,仅在AIV上生效。34+本接口为Reg矢量计算接口,仅在AIV上生效。
35 35 
36## 函数原型36## 函数原型
37 37 
@@ -73,12 +73,9 @@ __simd_callee__ inline vector_fp8_e4m3fn_t asc_float2e4m3_rn<sat_mode>(vector_fl
73 73 
74## 约束说明74## 约束说明
75 75 
76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
76- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。77- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
77- 位置选择标签选择目的操作数的写入地址,其他位置清零。78- 位置选择标签选择目的操作数的写入地址,其他位置清零。
78-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
79-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
80-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
81-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
82- `mask`掩码位为0时,`dst`对应元素置0。79- `mask`掩码位为0时,`dst`对应元素置0。
83- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。80- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
84 81 
@@ -31,7 +31,7 @@
31 31 
32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
33 33 
34-本接口为`reg`矢量计算接口,仅在AIV上生效。34+本接口为Reg矢量计算接口,仅在AIV上生效。
35 35 
36## 函数原型36## 函数原型
37 37 
@@ -73,12 +73,9 @@ __simd_callee__ inline vector_fp8_e5m2_t asc_float2e5m2_rn<sat_mode>(vector_floa
73 73 
74## 约束说明74## 约束说明
75 75 
76+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
76- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。77- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
77- 位置选择标签选择目的操作数的写入地址,其他位置清零。78- 位置选择标签选择目的操作数的写入地址,其他位置清零。
78-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
79-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
80-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
81-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
82- `mask`掩码位为0时,`dst`对应元素置0。79- `mask`掩码位为0时,`dst`对应元素置0。
83- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。80- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
84 81 
@@ -46,6 +46,8 @@ def asc_float2half_rn(dst, src, mask, dst_pos):
46 dst[2 * i + offset] = half(src[i]) # float -> half,RINT舍入46 dst[2 * i + offset] = half(src[i]) # float -> half,RINT舍入
47```47```
48 48 
49+本接口为Reg矢量计算接口,仅在AIV上生效。
50+ 
49## 函数原型51## 函数原型
50 52 
51```c53```c
@@ -103,10 +105,9 @@ __simd_callee__ inline void asc_float2half_rn(vector_half& dst,
103 105 
104## 约束说明106## 约束说明
105 107 
108+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
106- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。109- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
107- 位置选择标签选择目的操作数的写入地址,其他位置清零。110- 位置选择标签选择目的操作数的写入地址,其他位置清零。
108-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
109-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
110- `src`与`dst`的数据类型需要与函数原型匹配。111- `src`与`dst`的数据类型需要与函数原型匹配。
111- `mask`掩码位为0时,`dst`对应元素置0。112- `mask`掩码位为0时,`dst`对应元素置0。
112- 结果写入`dst`的奇数索引位置时,偶数索引位置置零;结果写入偶数索引位置时,奇数索引位置置零。113- 结果写入`dst`的奇数索引位置时,偶数索引位置置零;结果写入偶数索引位置时,奇数索引位置置零。
@@ -31,7 +31,7 @@
31 31 
32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。32关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
33 33 
34-本接口为`reg`矢量计算接口,仅在AIV上生效。34+本接口为Reg矢量计算接口,仅在AIV上生效。
35 35 
36## 函数原型36## 函数原型
37 37 
@@ -74,12 +74,9 @@ __simd_callee__ inline vector_hifloat8_t asc_float2hif8_<round_mode><sat_mode>(v
74 74 
75## 约束说明75## 约束说明
76 76 
77+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。78- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
78- 位置选择标签选择目的操作数的写入地址,其他位置清零。79- 位置选择标签选择目的操作数的写入地址,其他位置清零。
79-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
80-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
81-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
82-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
83- `mask`掩码位为0时,`dst`对应元素置0。80- `mask`掩码位为0时,`dst`对应元素置0。
84- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。81- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
85 82 
@@ -46,7 +46,7 @@ def asc_float2int16_rn(dst, src, mask, dst_pos):
46 dst[2 * i + offset] = int16_t(src[i]) # float -> int16_t,RINT舍入46 dst[2 * i + offset] = int16_t(src[i]) # float -> int16_t,RINT舍入
47```47```
48 48 
49-本接口为`reg`矢量计算接口,仅在AIV上生效。49+本接口为Reg矢量计算接口,仅在AIV上生效。
50 50 
51## 函数原型51## 函数原型
52 52 
@@ -105,10 +105,9 @@ __simd_callee__ inline void asc_float2int16_rn(vector_int16_t& dst,
105 105 
106## 约束说明106## 约束说明
107 107 
108+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
108- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。109- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
109- 位置选择标签选择目的操作数的写入地址,其他位置清零。110- 位置选择标签选择目的操作数的写入地址,其他位置清零。
110-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
111-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
112- `src`与`dst`的数据类型需要与函数原型匹配。111- `src`与`dst`的数据类型需要与函数原型匹配。
113- `mask`掩码位为0时,`dst`对应元素置0。112- `mask`掩码位为0时,`dst`对应元素置0。
114- 结果写入`dst`的奇数索引位置时,偶数索引位置置零;结果写入偶数索引位置时,奇数索引位置置零。113- 结果写入`dst`的奇数索引位置时,偶数索引位置置零;结果写入偶数索引位置时,奇数索引位置置零。
@@ -41,7 +41,7 @@ def asc_float2int32_rn(dst, src, mask):
41 dst[i] = 041 dst[i] = 0
42```42```
43 43 
44-本接口为`reg`矢量计算接口,仅在AIV上生效。44+本接口为Reg矢量计算接口,仅在AIV上生效。
45 45 
46## 函数原型46## 函数原型
47 47 
@@ -86,7 +86,7 @@ __simd_callee__ inline void asc_float2int32_rn(vector_int32_t& dst,
86 86 
87## 约束说明87## 约束说明
88 88 
89-- 本接口非AIV调用直接返回。89+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
90- `src`与`dst`的数据类型需要与函数原型匹配。90- `src`与`dst`的数据类型需要与函数原型匹配。
91- `mask`掩码位为0时,`dst`对应元素置0。91- `mask`掩码位为0时,`dst`对应元素置0。
92- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。92- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
@@ -45,7 +45,7 @@ def asc_float2int64_rn(dst, src, mask, src_pos):
45 dst[i] = int64_t(src[2 * i + offset]) # float -> int64_t,RINT舍入45 dst[i] = int64_t(src[2 * i + offset]) # float -> int64_t,RINT舍入
46```46```
47 47 
48-本接口为`reg`矢量计算接口,仅在AIV上生效。48+本接口为Reg矢量计算接口,仅在AIV上生效。
49 49 
50## 函数原型50## 函数原型
51 51 
@@ -104,10 +104,9 @@ __simd_callee__ inline void asc_float2int64_rn(vector_int64_t& dst,
104 104 
105## 约束说明105## 约束说明
106 106 
107+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
107- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。108- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
108- 位置选择标签用于选择源操作数中参与转换的元素索引。109- 位置选择标签用于选择源操作数中参与转换的元素索引。
109-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
110-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
111- `src`与`dst`的数据类型需要与函数原型匹配。110- `src`与`dst`的数据类型需要与函数原型匹配。
112- `mask`掩码位为0时,`dst`对应元素置0。111- `mask`掩码位为0时,`dst`对应元素置0。
113- `src_pos`取`ASC_POSITION_EVEN`时读取`src`的偶数索引,取`ASC_POSITION_ODD`时读取`src`的奇数索引。112- `src_pos`取`ASC_POSITION_EVEN`时读取`src`的偶数索引,取`ASC_POSITION_ODD`时读取`src`的奇数索引。
@@ -32,6 +32,8 @@
32 32 
33关于舍入模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。33关于舍入模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
34 34 
35+本接口为Reg矢量计算接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```cpp39```cpp
@@ -81,9 +83,7 @@ __simd_callee__ inline void asc_floor(vector_half& dst,
81 83 
82## 约束说明84## 约束说明
83 85 
84-- 本接口在非AIV上调用直接返回。86+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
85-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
86-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
87- `half`和`bfloat16_t`支持饱和模式。`float`类型只支持不饱和模式。87- `half`和`bfloat16_t`支持饱和模式。`float`类型只支持不饱和模式。
88- `mask`掩码位为0时,`dst`对应元素置0。88- `mask`掩码位为0时,`dst`对应元素置0。
89 89 
@@ -30,6 +30,8 @@
30 30 
31根据`mask`将`src`中的每个参与计算的`half`类型元素转换为`bfloat16_t`类型,结果写入`dst`。31根据`mask`将`src`中的每个参与计算的`half`类型元素转换为`bfloat16_t`类型,结果写入`dst`。
32 32 
33+本接口为Reg矢量计算接口,仅在AIV上生效。
34+ 
33## 函数原型35## 函数原型
34 36 
35```c37```c
@@ -77,10 +79,7 @@ __simd_callee__ inline vector_bfloat16_t asc_half2bfloat16_rna(vector_half src,
77 79 
78## 约束说明80## 约束说明
79 81 
80-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。82+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
81-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
82-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
83-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
84- `mask`掩码位为0时,`dst`对应元素置0。83- `mask`掩码位为0时,`dst`对应元素置0。
85 84 
86## 调用示例85## 调用示例
@@ -30,6 +30,8 @@
30 30 
31根据`mask`将`src`中的每个参与计算的`half`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数类型位宽比为1:2,读取数据时需要将一个`VL`大小的数据分为两部分,根据参数`src_pos`选择读取`src`索引为偶数的位置或奇数的位置。31根据`mask`将`src`中的每个参与计算的`half`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数类型位宽比为1:2,读取数据时需要将一个`VL`大小的数据分为两部分,根据参数`src_pos`选择读取`src`索引为偶数的位置或奇数的位置。
32 32 
33+本接口为Reg矢量计算接口,仅在AIV上生效。
34+ 
33## 函数原型35## 函数原型
34 36 
35```c37```c
@@ -74,11 +76,8 @@ __simd_callee__ inline vector_float asc_half2float(vector_half src,
74 76 
75## 约束说明77## 约束说明
76 78 
79+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
77- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。80- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
78-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
79-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
80-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
81-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
82- `mask`掩码位为0时,`dst`对应元素置0。81- `mask`掩码位为0时,`dst`对应元素置0。
83 82 
84## 调用示例83## 调用示例
@@ -32,6 +32,8 @@
32 32 
33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。
34 34 
35+本接口为Reg矢量计算接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```c39```c
@@ -95,12 +97,9 @@ __simd_callee__ inline vector_hifloat8_t asc_half2hif8_rna(vector_half src,
95 97 
96## 约束说明98## 约束说明
97 99 
100+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
98- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。101- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
99- 位置选择标签选择目的操作数的写入地址,其他位置清零。102- 位置选择标签选择目的操作数的写入地址,其他位置清零。
100-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
101-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
102-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
103-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
104- 当数据写入目的操作数索引为奇数的位置,索引为偶数位置的数值置零。反之亦然。103- 当数据写入目的操作数索引为奇数的位置,索引为偶数位置的数值置零。反之亦然。
105- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。104- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
106- `mask`掩码位为0时,`dst`对应元素置0。105- `mask`掩码位为0时,`dst`对应元素置0。
@@ -32,6 +32,8 @@
32 32 
33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。
34 34 
35+本接口为Reg矢量计算接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```c39```c
@@ -81,10 +83,7 @@ __simd_callee__ inline vector_int16_t asc_half2int16_rn(vector_half src,
81 83 
82## 约束说明84## 约束说明
83 85 
84-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。86+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
85-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
86-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
87-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
88- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。87- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
89- `mask`掩码位为0时,`dst`对应元素置0。88- `mask`掩码位为0时,`dst`对应元素置0。
90 89 
@@ -30,6 +30,8 @@
30 30 
31根据`mask`将`src`中的每个参与计算的`half`类型元素转换为`int32_t`类型,结果写入`dst`。由于源操作数与目的操作数类型位宽比为1:2,读取数据时需要将一个`VL`大小的数据分为两部分,根据参数`src_pos`选择读取`src`索引为偶数的位置或奇数的位置。31根据`mask`将`src`中的每个参与计算的`half`类型元素转换为`int32_t`类型,结果写入`dst`。由于源操作数与目的操作数类型位宽比为1:2,读取数据时需要将一个`VL`大小的数据分为两部分,根据参数`src_pos`选择读取`src`索引为偶数的位置或奇数的位置。
32 32 
33+本接口为Reg矢量计算接口,仅在AIV上生效。
34+ 
33## 函数原型35## 函数原型
34 36 
35```c37```c
@@ -91,11 +93,8 @@ __simd_callee__ inline vector_int32_t asc_half2int32_rd(vector_half src,
91 93 
92## 约束说明94## 约束说明
93 95 
96+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
94- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。97- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
95-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
96-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
97-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
98-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
99- `mask`掩码位为0时,`dst`对应元素置0。98- `mask`掩码位为0时,`dst`对应元素置0。
100 99 
101## 调用示例100## 调用示例
@@ -34,7 +34,7 @@
34 34 
35关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。35关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式与饱和模式](rounding_mode.md)。
36 36 
37-本接口为`reg`矢量计算接口,仅在AIV上生效。37+本接口为Reg矢量计算接口,仅在AIV上生效。
38 38 
39## 函数原型39## 函数原型
40 40 
@@ -79,10 +79,10 @@ __simd_callee__ inline void asc_half2int4x2_<round_mode>_sat(
79 79 
80## 约束说明80## 约束说明
81 81 
82+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
82- 位置选择标签参数仅能使用上述编译期常量。83- 位置选择标签参数仅能使用上述编译期常量。
83- 开启饱和模式或非饱和模式时,需配置ctrl寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。84- 开启饱和模式或非饱和模式时,需配置ctrl寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
84-- 本接口仅在AIV上生效,并在Vector Function(`__simd_vf__`标记的函数)内调用。85+- `mask`掩码位为0时,`dst`对应元素置0。
85-- `mask`需通过掩码设置接口预先赋值后再传入;`mask`掩码位为0时,`dst`对应元素置0。
86 86 
87## 调用示例87## 调用示例
88 88 
@@ -32,6 +32,8 @@
32 32 
33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。
34 34 
35+本接口为Reg矢量计算接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```c39```c
@@ -95,12 +97,9 @@ __simd_callee__ inline vector_int8_t asc_half2int8_rn(vector_half src,
95 97 
96## 约束说明98## 约束说明
97 99 
100+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
98- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。101- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
99- 位置选择标签选择目的操作数的写入地址,其他位置清零。102- 位置选择标签选择目的操作数的写入地址,其他位置清零。
100-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
101-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
102-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
103-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
104- 当数据写入目的操作数索引为奇数的位置,索引为偶数位置的数值置零。反之亦然。103- 当数据写入目的操作数索引为奇数的位置,索引为偶数位置的数值置零。反之亦然。
105- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。104- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
106- `mask`掩码位为0时,`dst`对应元素置0。105- `mask`掩码位为0时,`dst`对应元素置0。
@@ -32,6 +32,8 @@
32 32 
33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。33关于舍入模式和饱和/非饱和模式的详细说明,请参见[舍入模式](rounding_mode.md)。
34 34 
35+本接口为Reg矢量计算接口,仅在AIV上生效。
36+ 
35## 函数原型37## 函数原型
36 38 
37```c39```c
@@ -95,10 +97,7 @@ __simd_callee__ inline vector_uint8_t asc_half2uint8_rd(vector_half src,
95 97 
96## 约束说明98## 约束说明
97 99 
98-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。100+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
99-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
100-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
101-- mask需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
102- 当数据写入目的操作数索引为奇数的位置,索引为偶数位置的数值置零。反之亦然。101- 当数据写入目的操作数索引为奇数的位置,索引为偶数位置的数值置零。反之亦然。
103- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。102- 使用饱和或非饱和模式时,需要配置`ctrl`寄存器,详细说明请参见[asc_set_ctrl](../../spr/asc_set_ctrl.md)。
104- `mask`掩码位为0时,`dst`对应元素置0。103- `mask`掩码位为0时,`dst`对应元素置0。
@@ -29,7 +29,7 @@
29 29 
30根据`mask`将`src`中参与计算的`hifloat8_t`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。30根据`mask`将`src`中参与计算的`hifloat8_t`类型元素转换为`float`类型,结果写入`dst`。由于源操作数与目的操作数的类型位宽比为1:4,`src`中的元素按索引分为四组,参数`src_quarter_pos`从`src`中离散选取每隔4个元素的索引位置读取数据,具体为索引0、4、8、…,索引1、5、9、…,索引2、6、10、…或索引3、7、11、…。
31 31 
32-本接口为`reg`矢量计算接口,仅在AIV上生效。32+本接口为Reg矢量计算接口,仅在AIV上生效。
33 33 
34## 函数原型34## 函数原型
35 35 
@@ -70,11 +70,8 @@ __simd_callee__ inline vector_float asc_hif82float(vector_hifloat8_t src,
70 70 
71## 约束说明71## 约束说明
72 72 
73+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
73- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。74- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
74-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
75-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
76-- 本接口在Vector Function(`__simd_vf__`标记的函数)内调用。
77-- `mask`需通过掩码设置接口预先赋值后再传入,未赋值的掩码寄存器内容不确定,会导致有效元素位置错误。
78- `mask`掩码位为0时,`dst`对应元素置0。75- `mask`掩码位为0时,`dst`对应元素置0。
79 76 
80## 调用示例77## 调用示例
@@ -43,7 +43,7 @@ def asc_hif82half(dst, src, mask, src_pos):
43 dst[i] = half(src[2 * i + offset]) # hifloat8_t -> half43 dst[i] = half(src[2 * i + offset]) # hifloat8_t -> half
44```44```
45 45 
46-本接口为`reg`矢量计算接口,仅在AIV上生效。46+本接口为Reg矢量计算接口,仅在AIV上生效。
47 47 
48## 函数原型48## 函数原型
49 49 
@@ -89,9 +89,8 @@ __simd_callee__ inline vector_half asc_hif82half(vector_hifloat8_t src,
89 89 
90## 约束说明90## 约束说明
91 91 
92+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
92- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。93- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
93-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
94-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
95- `src`与`dst`的数据类型需要与函数原型匹配。94- `src`与`dst`的数据类型需要与函数原型匹配。
96- `mask`掩码位为0时,`dst`对应元素置0。95- `mask`掩码位为0时,`dst`对应元素置0。
97- 选择读取`src`的奇数索引位置时,偶数索引位置的元素不参与计算;选择读取偶数索引位置时,奇数索引位置的元素不参与计算。96- 选择读取`src`的奇数索引位置时,偶数索引位置的元素不参与计算;选择读取偶数索引位置时,奇数索引位置的元素不参与计算。
@@ -43,7 +43,7 @@ def asc_int162float(dst, src, mask, src_pos):
43 dst[i] = float(src[2 * i + offset]) # int16_t -> float43 dst[i] = float(src[2 * i + offset]) # int16_t -> float
44```44```
45 45 
46-本接口为`reg`矢量计算接口,仅在AIV上生效。46+本接口为Reg矢量计算接口,仅在AIV上生效。
47 47 
48## 函数原型48## 函数原型
49 49 
@@ -89,9 +89,8 @@ __simd_callee__ inline vector_float asc_int162float(vector_int16_t src,
89 89 
90## 约束说明90## 约束说明
91 91 
92+- Reg矢量计算C API通用约束请参见[通用约束](../overview.md#通用约束)。
92- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。93- 位置选择标签参数仅能使用编译期常量,编译器据此在编译期分发至对应的重载。
93-- 通过引用参数输出结果的函数原型在非AIV上调用时直接返回。
94-- 通过函数返回值输出结果的函数原型在非AIV上调用时返回对应矢量类型的默认构造值。
95- `src`与`dst`的数据类型需要与函数原型匹配。94- `src`与`dst`的数据类型需要与函数原型匹配。
96- `mask`掩码位为0时,`dst`对应元素置0。95- `mask`掩码位为0时,`dst`对应元素置0。
97- 选择读取`src`的奇数索引位置时,偶数索引位置的元素不参与计算;选择读取偶数索引位置时,奇数索引位置的元素不参与计算。96- 选择读取`src`的奇数索引位置时,偶数索引位置的元素不参与计算;选择读取偶数索引位置时,奇数索引位置的元素不参与计算。
Mdocs/zh/api/SIMD-API/c_api/reg_compute/store/reg_store_overview.md+5-5File content is under review, please try again later