开发者
资源

预定义宏和内建变量

预定义宏

毕昇编译器同其他语言的编译器一样,会有一些预定义宏方便开发者编写程序。

预定义宏

默认值

含义

__CCE_IS_AICORE__

1

设备侧为1,可用于区分device侧代码还是host侧代码

__DAV_CUBE__

-

隔离cube侧代码

__DAV_VEC__

-

隔离vec侧代码

__NPU_ARCH__

-

可用于区分device侧代码还是host侧代码同时隔离device侧不同架构的代码

表1 AI处理器型号和__NPU_ARCH__的对应关系

AI处理器型号

__NPU_ARCH__

Atlas 350 加速卡

3510

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

2201

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

2201

Atlas 200I/500 A2 推理产品

3002

Atlas 推理系列产品

2002

Atlas 训练系列产品

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获取。

表2 内建变量列表

内建变量

含义

block_idx

当前核id,核内逻辑值。开发者不直接感知。编程时使用的核id需要使用GetBlockIdx接口获取。

block_num

使用核数,核内逻辑值,开发者不直接感知。编程时使用的核数需要使用GetBlockNum接口获取。