---
title: 异构编译步骤
description: "毕昇编译器支持AI Core异构编译，当需要编写包含AI Core的异构程序时，可按如下步骤进行："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/compiler/BishengCompiler/atlas_bisheng_10_0011.html
sourcePath: /source/zh/canncommercial/900/compiler/BishengCompiler/atlas_bisheng_10_0011.html
indexId: 01a58036606f4b5e96d2a1ff889bca23ee3ef45271d49a59e80e04f96a4ac59281
---
# 异构编译步骤

毕昇编译器支持AI Core异构编译，当需要编写包含AI Core的异构程序时，可按如下步骤进行：

1. 从CANN发布包中获取毕昇编译器程序(bisheng)的路径，并设置环境变量。${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例，安装后文件默认存储路径为：/usr/local/Ascend/cann。

```
#
设置编译器环境变量，如：
$export
PATH=${INSTALL_DIR}/compiler/ccec_compiler/bin:$PATH
```


2. 代码开发。编写AI Core异构程序的基本流程如下：

  a. include必需的Runtime（运行时管理）头文件。
  b. 通过Runtime API创建device和stream。
  c. 申请设备内存，按需将输入数据拷贝至设备内存。
  d. 编写设备kernel函数。
  e. 通过<<<>>>内核调用符运行设备kernel函数。
  f. 按需将输出数据拷贝至主机内存，并释放设备内存。
3. 获取runtime的动态链接库以及头文件的位置。在本示例中，编译依赖和所在位置如下：| 编译依赖 | 位置 | 以下简称 |
| --- | --- | --- |
| runtime动态链接库 | ${INSTALL\_DIR}/lib64/ | $RT\_LIB |
| runtime头文件 | ${INSTALL\_DIR}/include | $RT\_INC |


4. 编写并执行编译命令，一步编译生成可执行文件。下文场景示例为开发环境和运行环境一致的情况。

```
// 简化写法，无意义场景不可运行，仅演示编译使用方法
#ifdef ASCENDC_CPU_DEBUG
#define __aicore__
#else
#define __aicore__ [aicore]
#endif
#define BLOCKS 5
__global__ __aicore__ void foo(__gm__ int* buf)
{
*buf = 1;
}
int main(int argc, char* argv[])
{
aclrtStream stream;
aclrtCreateStream(&stream);
int a[100];
// nullptr - No L2 usage here
foo<<<BLOCKS, nullptr, stream>>>(a);
return 0;
}
```


  编译命令如下：

```
# 功能：Host & Device代码混合编译，生成可执行文件 axpy
# 编译命令：
$bisheng --npu-arch=dav-2201 -O2 axpy.cce -o axpy -I$RT_INC -L$RT_LIB
```


5. 运行可执行文件。

```
# 运行：
$export LD_LIBRARY_PATH=$RT_LIB:$LD_LIBRARY_PATH
$./axpy
```
