开发者
资源
[object Object]

AI CPU是位于Device侧ARM64架构的处理器,其具备与AI Core相同的内存访问能力,可直接访问Device侧内存资源;也可以与Host侧的CPU一样,进行类似的数据计算,通常作为AI Core的补充,主要承担非矩阵类、逻辑比较复杂的分支密集型计算。AI CPU的运行环境为基础的Linux环境,编程时可使用libc库,C++标准库,STL模板库等。其硬件架构图如下所示:

图 1 AI CPU硬件架构图[object Object][object Object]

本节介绍的AI CPU编程仅支持如下产品型号:

  • Atlas 350 加速卡
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品
[object Object]

在进行AI CPU编程时,与AI Core类似,同样需要定义设备侧函数入口(即核函数),该函数必须通过__aicpu__标识符进行声明,并且需与__global__标识符联合使用以表明其只能被Host侧调用。AI CPU的Device侧实现文件需要以.aicpu为后缀(或者以.cpp为后缀,在编译时增加-x aicpu选项)。该实现文件中包括上面介绍的核函数以及AI CPU普通函数定义,AI CPU普通函数无需添加执行空间标识符。

如下是一个AI CPU“Hello World”程序的示例,hello_world.aicpu文件内容如下:

[object Object]
[object Object]
[object Object]

AI CPU核函数的调用需要在.asc文件中进行,和AI Core的算子调用类似,同样使用<<<>>>语法。

[object Object]
  • numBlocks:AI CPU Device侧暂不支持分核逻辑,因此Host侧调用多核无实际意义。建议设置为1。
  • l2ctrl:保留参数,当前固定为nullptr,开发者无需关注。
  • stream:类型为aclrtStream,stream用于维护一些异步操作的执行顺序,确保按照应用程序中的代码调用顺序在Device上执行。stream创建等管理接口请参考
[object Object]

加载和运行算子时,需要使用Runtime API,完成运行时管理和配置,详细内容请参考。AI CPU算子的编译请参考

[object Object]

若需要使用模板核函数,则需要在.aicpu文件中给出模板核函数的实例化声明,参考如下:

[object Object]

并在.asc文件中新增模板核函数实例化的extern声明:

[object Object]
[object Object]
[object Object]