- Ascend C异构并行程序设计:昇腾算子编程指南
- 苏统华 杜鹏 闫长江编著
- 730字
- 2025-04-17 18:50:02
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 }