2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口
  mrxYOEPYpIE7 2023年11月02日 23 0

前言:

        我们知道昇腾AI芯片,有1个或多个AiCore,AiCore上有Cube和Vector运算单元提供给算子进行运算,有的AiCore是Cube和Vector一体的,有的Cube和Vector是分开,各自独立的。我们还记得例程中的例子一般都指定核心数BLOCK_DIM=8,这又是为什么,有啥道理呢?本文就来叭一叭,昇腾芯片的运算资源。获取计算单元数量,对我们对输入数据进行多核切分时尤为有用。当然,AscendC也提供了该功能的API,供开发者使用。

一、各种芯片的运算单元数量

    当前Ascend C支持的AI处理器型号为:昇腾310P AI处理器;昇腾910 AI处理器;昇腾910B AI处理器。它们都有几个AICore,每个Core上有多少Cube,有多少Vector?这些信息散步在文档里,或者其它渠道的信息里,以910B为例,有说30核,有说20核,众说纷纭。
    我觉的这个问题,可能换个提法更准确一些,那就是:各种芯片目前开发多少AiCore给开发者使用。那么应该去哪儿找寻答案呢?在CANN的toolkit的安装路径下就有这样的信息:

2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口_AscendC算子开发

    我们看到在安装路径里有个platform_config的文件夹,里面有CANN安装版本支持昇腾AI芯片信息。当前Ascend C支持的3款昇腾AI芯片可以进一步细化到8款具体的芯片。我么期待已经公开的910C系列,以及待公开的更先进的昇腾AI处理器。

    文档里提及Ascend910B,Cube和Vector是分离的,1个Aicore包括1个Cube单元和2个Vector单元。但此处的910B配置信息还是合一的。 所以通常提及的910B芯片,指的应该是Ascend910BX(x:1,2,3,4)。

2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口_AscendC算子开发_02


    从配置文件看,310P的Cube和Vector也是分离的。几款芯片的AICore的Cube和Vector数量如下:

2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口_AscendC算子开发_03

    这些文件里还有芯片的内部存储信息,Cube和Vector的规格信息,外接DDR的频率信息等,有兴趣的小伙伴可以继续深入研究。

二、核心数在tiling计算中的作用

    回忆一下,AscendC编程中我们经常用到BLOCK_DIM,它是用来表示核心数量,这个参数的作用是将输入数据进行多核切分,数据总长totalLength /BLOCK_DIM,就是单核分配到的数据量。例程里一般写成8,从上表上看,也是有道理的,AscendC目前支持的芯片里,最少的AiCore的数目就是8。

    因此,我们可以在算子工程的Host侧实现代码里,不再将BLOCK_DIM固定的写成8,而是获取当前芯片的实际处理能力, 根据实际运算核的数量更科学合理的设计Tiling策略。

ge::graphStatus TilingXXX(gert::TilingContext* context) {
    auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->GetPlatformInfo());
    auto coreNum = ascendcPlatform.GetCoreNum();
    // ... 根据核数自行设计Tiling策略
    context->SetBlockDim(coreNum);
    return ret;
}

三、相关API

        看到这里,是不是想动手试一试了,别着急,下面就来看看AscendC提供的API。

        具体参见:文档首页>CANN社区版>7.0.RC1.alpha003>算子开发>Ascend C算子开发>API参考>Host侧实现API>平台信息获取>PlatformAscendC类 https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/70RC1alpha003/operatordevelopment/ascendcopdevg/atlasophostapi_07_0263.html

2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口_AscendC算子开发_04

        我使用的NPU是Ascend910B1,在算子工程的Host侧算子实现的tiling实现的代码里,调用上述API,并将结果打屏。

2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口_CANN训练营_05

       打印出来的结果看:“aicNum=24,aivNun=48”,与配置文件一致,实际上这个接口就是从配置文件里获取的信息。

2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口_AscendC算子开发_06

        为什么说,这组API不是从芯片内部直接读出来的,而是从刚才的配置文件里读出来的。笔者尝试将ascend910B1.ini中的AiCore,从输出的结果看,与ini文件里的信息保持一致。

2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口_AscendC算子开发_07

结语:

        看到这儿的小伙伴,我们一起来探索AscendC算子开发吧!如果还没有加入CANN训练营,可以按下面的链接进行报名,不仅可以学到基于昇腾AI开发的知识,还有大奖可以拿。

报名链接:https://www.hiascend.com/developer/activities/details/84b950830fc44476851860f51f0873a2/signup?channelCode=0&recommended=234384

2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口_CANN训练营_08


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

mrxYOEPYpIE7