预定义宏和内建变量
预定义宏
毕昇编译器同其他语言的编译器一样,会有一些预定义宏方便开发者编写程序。
预定义宏 |
默认值 |
含义 |
|---|---|---|
__CCE_IS_AICORE__ |
1 |
设备侧为1,可用于区分device侧代码还是host侧代码 |
__DAV_CUBE__ |
- |
隔离cube侧代码 |
__DAV_VEC__ |
- |
隔离vec侧代码 |
__NPU_ARCH__ |
- |
可用于区分device侧代码还是host侧代码, 同时隔离device侧不同架构的代码 |
AI处理器型号 |
__NPU_ARCH__ |
|---|---|
Ascend 950PR/Ascend 950DT |
3510 |
2201 |
|
2201 |
|
3002 |
|
2002 |
|
1001 |
注意事项:
- 紧耦合的核(CUBE+VEC不分离),编译器同时定义__DAV_CUBE__, __DAV_VEC__
- 松耦合的核(CUBE,VEC分离),编译CUBE的时候,编译器定义__DAV_CUBE__,编译VEC的时候,编译器定义__DAV_VEC__
- CUBE Only的核,只定义__DAV_CUBE__
- VECTOR Only的核,只定义__DAV_VEC__
内建变量
以下变量为毕昇编译器内建变量,开发者程序中定义的变量名不能和内建变量名相同;同时内建变量通常提供给框架使用,开发者不直接感知,如需获取核id或者核数需要使用对应的Ascend C API获取。
内建变量 |
含义 |
|---|---|
block_idx |
当前核id,核内逻辑值。开发者不直接感知。编程时使用的核id需要使用《Ascend C算子开发》的“SIMD API > 基础API > 系统变量访问 > GetBlockIdx”接口获取。 |
block_num |
使用核数,核内逻辑值,开发者不直接感知。编程时使用的核数需要使用《Ascend C算子开发》的“SIMD API > 基础API > 系统变量访问 > GetBlockNum”接口获取。 |
父主题: AI Core编程指导