首页 > 其他分享 >2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供的API接口

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

时间:2023-10-19 20:31:57浏览次数:50  
标签:API Cube CANN 一叭 芯片 Vector AI 算子 AscendC

前言:

        我们知道昇腾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接口_CANN训练营

    我们看到在安装路径里有个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接口_CANN训练营_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接口_CANN训练营_06

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

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

结语:

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

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

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


标签:API,Cube,CANN,一叭,芯片,Vector,AI,算子,AscendC
From: https://blog.51cto.com/u_15485447/7942235

相关文章

  • [spring-mvc.xml] cannot be opened because it does not exist
    IOExceptionparsingXMLdocumentfromclasspathresource[spring-mvc.xml];nestedexceptionisjava.io.FileNotFoundException:classpathresource[spring-mvc.xml]cannotbeopenedbecauseitdoesnotexist检查pom.xml文件:<packaging>war</packagin......
  • Detected non-NVML platform: could not load NVML: libnvidia-ml.so.1: cannot open
    前言在kubernetes中配置https://github.com/NVIDIA/k8s-device-plugin时,报错:Detectednon-NVMLplatform:couldnotloadNVML:libnvidia-ml.so.1:cannotopensharedobject解决kubernetes使用运行时docker,需要编辑通常存在的配置文件/etc/docker/daemon.json,以......
  • IDEA 出现 Cannot resolve method getParameter() in JSP 解决方法
    原链接java-CannotresolvemethodgetParameter()inJSP-StackOverflowIDEA中出现下图情况,版本IDEA2022.2.3。此方法大概率可用,如果帮到你请点个赞吧~  1.我们右键当前项目,选择进入"OpenModuleSettings",如下图2.进入下图界面后,点击下图加号弹出二级菜单,在通......
  • vue进行跳转之后出现Cannot read properties of undefined (reading 'router') TypeEr
    问题描述使用router进行页面跳转时,就出现了这样的问题:也就是这里出现了问题:问题解决本来是按照网上的教程:const_this=this;但是,但是,我本来就是用的这种方法呀~然后就打算直接在这个界面引用:importrouterfrom'@/router'router.push('/one');里面引用的跳转页面......
  • 解决OSError: cannot open resource self.font = core.getfont(font, size, index, en
    解决OSError:cannotopenresourceself.font=core.getfont(font,size,index,encoding,layout_engin在使用Python编程时,我们有时会遇到OSError:cannotopenresourceself.font=core.getfont(font,size,index,encoding,layout_engin这个错误。这个错误通常是由于缺少......
  • 解决OSError: cannot open resource self.font = core.getfont(font, size, index, en
    解决OSError:cannotopenresourceself.font=core.getfont(font,size,index,encoding,layout_engin在使用Python编程时,我们有时会遇到OSError:cannotopenresourceself.font=core.getfont(font,size,index,encoding,layout_engin这个错误。这个错误通常是由于缺少......
  • scanner Demo04
    packagecom.chen.scanner;importjava.util.Scanner;publicclassDemo04{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);//从键盘接收inti=0;floatf=0.0f;System.out.println(&quo......
  • scanner Demo05
    packagecom.chen.scanner;importjava.util.Scanner;publicclassDemo05{publicstaticvoidmain(String[]args){//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果;Scannerscanner=newSc......
  • How to fix the bug that the beforeunload event cannot be triggered All In One
    HowtofixthebugthatthebeforeunloadeventcannotbetriggeredAllInOne如何修复beforeunload事件无法触发的bugAllInOnebeforeunloadconstbeforeUnloadHandler=(event)=>{event.preventDefault();//Equivalenttothefollowingle......
  • samtools: error while loading shared libraries: libcrypto.so.1.0.0: cannot open
     001、问题:conda安装samtools后调用出现如下报错:samtools:errorwhileloadingsharedlibraries:libcrypto.so.1.0.0:cannotopensharedobjectfile:Nosuchfileordirectory 002、解决方法(base)[root@pc1home]#find~-name"libcrypto.so.1*"##......