寒武纪推出BANG语言,高效编程模式释放智能芯片强劲性能
扫描二维码
随时随地手机看文章
寒武纪作为全球人工智能芯片领域的先行者,自2016年开始推出一系列人工智能芯片和智能处理卡,向合作伙伴提供了性能卓越、高度灵活的AI加速解决方案。
为进一步推动AI计算实现软硬协同,释放更澎湃的算力,寒武纪提供包括BANG编程语言(以下简称“BANG语言”)在内的一套高效软件栈工具和高性能库(如下图所示),方便开发者在寒武纪云、边、端平台上开发和部署。
寒武纪软件栈工具和高性能库
支持寒武纪全线产品
BANG语言及其工具链由寒武纪编译团队推出,专门针对寒武纪智能处理器产品架构而设计,可极大优化寒武纪芯片的通用编程能力并提升用户编程的自由度。
BANG语言能够支持寒武纪现有的云端、边缘侧和终端芯片和板卡全线产品(如思元100、思元220、思元270、IP产品等),并可支持寒武纪后续新的产品架构。
释放芯片强大算力
用户不仅可以直接使用BANG语言编写AI程序,而且能使用BANG语言和寒武纪高性能库进行混合编程,最大限度地释放芯片的强大算力。
BANG语言支持最常用的C99和C++11语言的语法特性,并提供了用于编写高性能程序的内置Intrinsic接口。依托寒武纪强大的编译工具链,开发者在编程灵活的同时能够最大程度地利用寒武纪智能处理器产品上的计算和存储资源,确保程序的高性能得以实现。
在实际开发过程中,相对于原有的编程语言(C/C++),使用BANG语言进行编程,开发者仅需要1/10的开发时间,就可达到85%的极致性能。
寒武纪BANG语言关键特性
BANG语言还具备以下关键特性:
· 内置寒武纪智能处理器产品硬件相关的类型系统;
· 支持开发者构建自定义算法模型;
· 提供统一高效的编程接口,充分发挥寒武纪产品的硬件特性;
· 提供异构编程模型;
· 提供多核并行编程模型;
· 能够与寒武纪高性能库进行混合编程;
与编译工具链互相协作
寒武纪编译团队还自研了编译工具链,以提高BANG语言的运行性能。编译工具链包括CNCC(Cambricon Neuware Compiler Collection )、CNAS(Cambricon Neuware Assembler)、CNLINKER(Cambricon Neuware Linker)。
编译工具链中的CNCC负责处理编译前端工作,将BANG 语言编译成中间语言MLISA。CNAS主要负责将中间语言MLISA编译为包含MLU (Machine Learning Unit) 机器指令的目标文件,最后由CNLINKER将目标文件链接成可执行程序。
BANG语言和编译工具链互相协作,可充分发挥寒武纪芯片的强大算力,具体协作流程如下图所示:
寒武纪BANG语言和编译工具链互相协作
提升应用 便利调试
为了提升应用程序性能,寒武纪编译器进行了包括自动软件流水、全新的寄存器分配算法、全局指令调度、精确的程序依赖分析、Profiling Guided Optimization、地址指针推理及优化、以及数据类型(如半精度浮点数)计算优化等在内的大量优化工作。
此外,为了便利开展寒武纪芯片的调试工作,提升开发效率,寒武纪编译器团队推出了CNGDB(Cambricon Neuware GDB)。CNGDB现已开源,请点击代码链接。
CNGDB是Linux系统上调试BANG语言程序的工具,基于GNU的调试器GDB开发,能支持GNU GDB在CPU上原有的全部操作,使用它可以在真实的硬件上同时调试寒武纪硬件产品的设备侧和主机侧的代码。
同时,CNGDB可以支持控制程序执行和访问变量等多种操作、多核调试模式、CPU/Device调试的透明切换以及生成CNML内核的错误信息,解决了开发者难以调试的问题,极大地提升了程序开发效率。