---
title: 预定义宏和内建变量
description: "毕昇编译器同其他语言的编译器一样，会有一些预定义宏方便开发者编写程序。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/compiler/BishengCompiler/atlas_bisheng_10_0005.html
sourcePath: /source/zh/canncommercial/900/compiler/BishengCompiler/atlas_bisheng_10_0005.html
indexId: 5bd691250886088db091cf3d40d121e55d45668b4e6f5b24bb730d096a8b9dbf81
---
# 预定义宏和内建变量

#### 预定义宏

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

| 预定义宏 | 默认值 | 含义 |
| --- | --- | --- |
| \_\_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(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendcopapi/atlasascendc\_api\_07\_0185.html)接口获取。 |
| block\_num | 使用核数，核内逻辑值，开发者不直接感知。编程时使用的核数需要使用GetBlockNum(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendcopapi/atlasascendc\_api\_07\_0184.html)接口获取。 |
