1.4 硬件感知

扫码观看视频

硬件感知(Hardware Perception)是一种设计原则,通过在软件中设立接口,在开发者进行开发时能实时检测硬件参数状况,如获取处理器的核数、芯片的版本信息、硬件存储空间的大小、硬件存储空间的带宽大小等信息。

开发者在使用Ascend C进行编程时,可能需要获取一些硬件平台的信息,如获取硬件平台的核数等。PlatformAscendC 类提供获取这些平台信息的功能。使用该功能需要包含“tiling/platform/platform_ascendc.h”头文件。PlatformAscendC 类提供了如下接口,能实现对应的获取硬件平台信息的功能。

GetCoreNum:获取AI Core的数量。

GetSocVersion:获取当前硬件平台的版本信息。

GetCoreNumAic:获取当前硬件平台矩阵计算单元的核数信息。

GetCoreNumAiv:获取当前硬件平台向量计算单元的核数信息。

CalcTschBlockDim:计算底层任务调度的核数。

GetCoreMemSize:获取硬件平台存储空间的内存大小。

GetCoreMemBw:获取硬件平台存储空间的带宽大小。

一个实际的调用样例如程序清单1-1所示。清单中第1行引入了使用Ascend C进行硬件感知所需的头文件。第2~12行定义了一个需要进行硬件感知的函数:其中第3行调用GetPlatformInfo()函数获取platformInfo结构体的信息;第4~6行定义了两个64位无符号整型数据ub_size和l1_size,并通过调用GetCoreMemSize()函数获取UB和L1缓冲区的硬件存储空间大小的数据存储在ub_size和l1_size中;第7~8行通过调用GetCoreNumAic()函数和GetCoreNumAiv()函数分别获取当前硬件平台矩阵计算单元和向量计算单元的数量;第10行首先通过调用CalcTschBlockDim()函数计算底层任务调度的核数,该函数第一个入参的含义为数据切分的份数,后续两个入参分别表示当算子使用了矩阵计算API或向量计算API时显示的对应的核数,否则为0。

程序清单1-1 使用PlatformAscendC类的样例代码

1     #include "tiling/platform/platform_ascendc.h"
2     ge::graphStatus TilingXXX(gert::TilingContext* context) {
3     auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->
   GetPlatformInfo());//获取platformInfo结构体的信息
4     uint64_t ub_size, l1_size; 
5     ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::UB, ub_size); 
6     ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::L1, l1_size); 
   //获取硬件存储空间大小的数据
7     auto aicNum = ascendcPlatform.GetCoreNumAic();
8     auto aivNum = ascendcPlatform.GetCoreNumAiv();//获取当前硬件平台矩阵计算单元和
   //向量计算单元的数量
9  //其他操作 
 
10         context->SetBlockDim(ascendcPlatform.CalcTschBlockDim(aivNum, aicNum, 
   aivNum)); //计算底层任务调度的核数
11         return ret;
12     }