已合并
修改c_api接口asc_set_store_atomic_config形式 #245
hw-zjy创建于 1月31日
修改c_api接口asc_set_store_atomic_config形式 #245
已合并
hw-zjy创建于 1月31日
6 个文件变更+68-19
Rdocs/api/context/c_api/simd_atomic/asc_set_store_atomic_config.mddocs/api/context/c_api/simd_atomic/asc_set_store_atomic_config_v1.md+14-13
@@ -1,4 +1,4 @@
1-# asc_set_store_atomic_config1+# asc_set_store_atomic_config_v1
2 2 
3## 产品支持情况3## 产品支持情况
4 4 
@@ -13,18 +13,20 @@
13 13 
14## 函数原型14## 函数原型
15 15 
16-```c++16+```cpp
17-__aicore__ inline void asc_set_store_atomic_config(asc_store_atomic_config& config)17+__aicore__ inline void asc_set_store_atomic_config_v1(uint16_t type, uint16_t op)
18```18```
19 19 
20## 参数说明20## 参数说明
21 21 
M
Mmunanhw2月4日

先要说明: 针对不同的AI处理器型号,入参的取值范围和各取值的含义不同。

likedislike
hw-zjy
2月5日 评论:
22-| 参数名 | 输入/输出 | 描述 |22+| 参数名 | 输入/输出 | 描述 |
M
Mmunanhw2月4日

需要加上针对xxx,参数说明如下:

参考

  • 针对如下型号:
    Atlas A3 训练系列产品/Atlas A3 推理系列产品
    Atlas A2 训练系列产品/Atlas A2 推理系列产品
    参数说明如下:

    参数名 输入/输出 描述
    type 输入 原子操作使能位。
    0:无原子操作。
    1:使能原子操作,进行原子操作的数据类型为float。
    2:使能原子操作,进行原子操作的数据类型为half。
    3:使能原子操作,进行原子操作的数据类型为int16_t。
    4:使能原子操作,进行原子操作的数据类型为int32_t。
    5:使能原子操作,进行原子操作的数据类型为int8_t。
    6:使能原子操作,进行原子操作的数据类型为bfloat16_t。
    其余值无具体含义。
    op 输入 原子操作类型。
    0:求和操作。
    其余值无具体含义。
likedislike
hw-zjy
2月5日 评论:
23-| --------- | ----- | ---------------- |23+| :----- | :------- | :------- |
24-| asc_store_atomic_config | 输入 | 用于设置原子操作使能位原子操作类型的详细说明请参考[asc_store_atomic_config](../struct/asc_store_atomic_config.md) 。|24+| type | 输入 | 原子操作使能位。<br>0:无原子操作。<br>1:使能原子操作,进行原子操作的数据类型为float。<br>2:使能原子操作,进行原子操作数据类型为half。<br>3:使能原子操作进行原子操作的数据类型为int16_t<br>4:使能原子操作,进行原子操作的数据类型为int32_t。<br>5:使能原子操作,进行原子操作的数据类型为int8_t。<br>6:使能原子操作,进行原子操作的数据类型为bfloat16_t。<br>其余值无具体含义。 |
25+| op | 输入 | 原子操作类型。<br>0:求和操作。<br>其余值无具体含义。 |
26+ 
25## 返回值说明27## 返回值说明
26 28 
27-29+
28 30 
29## 流水类型31## 流水类型
30 32 
@@ -36,9 +38,8 @@ PIPE_S
36 38 
37## 调用示例39## 调用示例
38 40 
39-```c++41+```cpp
40-asc_store_atomic_config config;42+uint16_t type = 1;
41-config.atomic_type = 1; // 使能原子操作,进行原子操作的数据类型为float,值为143+uint16_t op = 0;
42-config.atomic_op = 0; // 求和操作,值为044+asc_set_store_atomic_config_v1(type, op);
43-asc_set_store_atomic_config(config); // 配置float类型原子求和操作45+```
44-```
@@ -0,0 +1,44 @@
1+# asc_set_store_atomic_config_v2
2+ 
3+## 产品支持情况
4+ 
5+|产品 | 是否支持 |
6+| ------------|:----:|
7+| Ascend 950PR/Ascend 950DT | √ |
8+ 
9+## 功能说明
10+ 
11+设置原子操作使能位与原子操作类型的值。
12+ 
13+## 函数原型
14+ 
15+```cpp
16+__aicore__ inline void asc_set_store_atomic_config_v2(uint16_t type, uint16_t op)
17+```
18+ 
19+## 参数说明
20+ 
21+| 参数名 | 输入/输出 | 描述 |
22+| :----- | :------- | :------- |
23+| type | 输入 | 原子操作使能位。<br>1:使能原子操作,进行原子操作的数据类型为int32_t。<br>4:使能原子操作,进行原子操作的数据类型为half。<br>5:使能原子操作,进行原子操作的数据类型为float。<br>7:使能原子操作,进行原子操作的数据类型为bfloat16_t。<br>9:使能原子操作,进行原子操作的数据类型为int16_t。<br>10:使能原子操作,进行原子操作的数据类型为int8_t。<br>其余值无具体含义。 |
24+| op | 输入 | 原子操作类型。<br>2:求和操作。<br>其余值无具体含义。 |
25+ 
26+## 返回值说明
27+ 
28+
29+ 
30+## 流水类型
31+ 
32+PIPE_S
33+ 
34+## 约束说明
35+ 
36+
37+ 
38+## 调用示例
39+ 
40+```cpp
41+uint16_t type = 1;
42+uint16_t op = 2;
43+asc_set_store_atomic_config_v2(type, op);
44+```
@@ -50,9 +50,9 @@ __aicore__ inline void asc_get_store_atomic_config(asc_store_atomic_config& conf
50 asc_get_store_atomic_config_impl(config);50 asc_get_store_atomic_config_impl(config);
51}51}
52 52 
53-__aicore__ inline void asc_set_store_atomic_config(asc_store_atomic_config& config)53+__aicore__ inline void asc_set_store_atomic_config_v1(uint16_t type, uint16_t op)
54{54{
55- asc_set_store_atomic_config_impl(config);55+ asc_set_store_atomic_config_v1_impl(type, op);
56}56}
57 57 
58__aicore__ inline void asc_set_atomic_add_bfloat()58__aicore__ inline void asc_set_atomic_add_bfloat()
@@ -24,9 +24,13 @@
24#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_2201_ATOMIC_IMPL_ASC_SET_STORE_ATOMIC_CONFIG_IMPL_H24#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_2201_ATOMIC_IMPL_ASC_SET_STORE_ATOMIC_CONFIG_IMPL_H
25#include "instr_impl/npu_arch_2201/utils_impl/utils_impl.h"25#include "instr_impl/npu_arch_2201/utils_impl/utils_impl.h"
26 26 
27-__aicore__ inline void asc_set_store_atomic_config_impl(asc_store_atomic_config& config)27+__aicore__ inline void asc_set_store_atomic_config_v1_impl(uint16_t type, uint16_t op)
28{28{
29- set_st_atomic_cfg(config.config);29+ constexpr uint64_t type_mask = 0x7;
30+ constexpr uint64_t op_mask = 0x3;
31+ constexpr uint64_t op_bit = 3;
32+ uint64_t config = (type & type_mask) | ((op & op_mask) << op_bit);
33+ set_st_atomic_cfg(config);
30}34}
31 35 
32#endif36#endif
@@ -22,7 +22,7 @@ __aicore__ inline void asc_set_atomic_none();
22 22 
23__aicore__ inline void asc_get_store_atomic_config(asc_store_atomic_config& config);23__aicore__ inline void asc_get_store_atomic_config(asc_store_atomic_config& config);
24 24 
25-__aicore__ inline void asc_set_store_atomic_config(asc_store_atomic_config& config);25+__aicore__ inline void asc_set_store_atomic_config_v1(uint16_t type, uint16_t op);
26 26 
27__aicore__ inline void asc_set_atomic_add_bfloat();27__aicore__ inline void asc_set_atomic_add_bfloat();
28 28 
@@ -27,6 +27,6 @@ TEST_F(TestSimdAtomicGetStoreAtomicConfigCApi, get_st_atomic_cfg_Succ)
27 uint16_t atomic_op = config.atomic_op;27 uint16_t atomic_op = config.atomic_op;
28 EXPECT_EQ(atomic_type, 0);28 EXPECT_EQ(atomic_type, 0);
29 EXPECT_EQ(atomic_op, 0);29 EXPECT_EQ(atomic_op, 0);
30- asc_set_store_atomic_config(config);30+ asc_set_store_atomic_config_v1(atomic_type, atomic_op);
31 GlobalMockObject::verify();31 GlobalMockObject::verify();
32}32}