寒武紀(jì)推出BANG語(yǔ)言,高效編程模式釋放智能芯片強(qiáng)勁性能
寒武紀(jì)作為全球人工智能芯片領(lǐng)域的先行者,自2016年開(kāi)始推出一系列人工智能芯片和智能處理卡,向合作伙伴提供了性能卓越、高度靈活的AI加速解決方案。
為進(jìn)一步推動(dòng)AI計(jì)算實(shí)現(xiàn)軟硬協(xié)同,釋放更澎湃的算力,寒武紀(jì)提供包括BANG編程語(yǔ)言(以下簡(jiǎn)稱(chēng)“BANG語(yǔ)言”)在內(nèi)的一套高效軟件棧工具和高性能庫(kù)(如下圖所示),方便開(kāi)發(fā)者在寒武紀(jì)云、邊、端平臺(tái)上開(kāi)發(fā)和部署。
寒武紀(jì)軟件棧工具和高性能庫(kù)
支持寒武紀(jì)全線(xiàn)產(chǎn)品
BANG語(yǔ)言及其工具鏈由寒武紀(jì)編譯團(tuán)隊(duì)推出,專(zhuān)門(mén)針對(duì)寒武紀(jì)智能處理器產(chǎn)品架構(gòu)而設(shè)計(jì),可極大優(yōu)化寒武紀(jì)芯片的通用編程能力并提升用戶(hù)編程的自由度。
BANG語(yǔ)言能夠支持寒武紀(jì)現(xiàn)有的云端、邊緣側(cè)和終端芯片和板卡全線(xiàn)產(chǎn)品(如思元100、思元220、思元270、IP產(chǎn)品等),并可支持寒武紀(jì)后續(xù)新的產(chǎn)品架構(gòu)。
釋放芯片強(qiáng)大算力
用戶(hù)不僅可以直接使用BANG語(yǔ)言編寫(xiě)AI程序,而且能使用BANG語(yǔ)言和寒武紀(jì)高性能庫(kù)進(jìn)行混合編程,最大限度地釋放芯片的強(qiáng)大算力。
BANG語(yǔ)言支持最常用的C99和C++11語(yǔ)言的語(yǔ)法特性,并提供了用于編寫(xiě)高性能程序的內(nèi)置Intrinsic接口。依托寒武紀(jì)強(qiáng)大的編譯工具鏈,開(kāi)發(fā)者在編程靈活的同時(shí)能夠最大程度地利用寒武紀(jì)智能處理器產(chǎn)品上的計(jì)算和存儲(chǔ)資源,確保程序的高性能得以實(shí)現(xiàn)。
在實(shí)際開(kāi)發(fā)過(guò)程中,相對(duì)于原有的編程語(yǔ)言(C/C++),使用BANG語(yǔ)言進(jìn)行編程,開(kāi)發(fā)者僅需要1/10的開(kāi)發(fā)時(shí)間,就可達(dá)到85%的極致性能。
寒武紀(jì)BANG語(yǔ)言關(guān)鍵特性
BANG語(yǔ)言還具備以下關(guān)鍵特性:
· 內(nèi)置寒武紀(jì)智能處理器產(chǎn)品硬件相關(guān)的類(lèi)型系統(tǒng);
· 支持開(kāi)發(fā)者構(gòu)建自定義算法模型;
· 提供統(tǒng)一高效的編程接口,充分發(fā)揮寒武紀(jì)產(chǎn)品的硬件特性;
· 提供異構(gòu)編程模型;
· 提供多核并行編程模型;
· 能夠與寒武紀(jì)高性能庫(kù)進(jìn)行混合編程;
與編譯工具鏈互相協(xié)作
寒武紀(jì)編譯團(tuán)隊(duì)還自研了編譯工具鏈,以提高BANG語(yǔ)言的運(yùn)行性能。編譯工具鏈包括CNCC(Cambricon Neuware Compiler Collection )、CNAS(Cambricon Neuware Assembler)、CNLINKER(Cambricon Neuware Linker)。
編譯工具鏈中的CNCC負(fù)責(zé)處理編譯前端工作,將BANG 語(yǔ)言編譯成中間語(yǔ)言MLISA。CNAS主要負(fù)責(zé)將中間語(yǔ)言MLISA編譯為包含MLU (Machine Learning Unit) 機(jī)器指令的目標(biāo)文件,最后由CNLINKER將目標(biāo)文件鏈接成可執(zhí)行程序。
BANG語(yǔ)言和編譯工具鏈互相協(xié)作,可充分發(fā)揮寒武紀(jì)芯片的強(qiáng)大算力,具體協(xié)作流程如下圖所示:
寒武紀(jì)BANG語(yǔ)言和編譯工具鏈互相協(xié)作
提升應(yīng)用 便利調(diào)試
為了提升應(yīng)用程序性能,寒武紀(jì)編譯器進(jìn)行了包括自動(dòng)軟件流水、全新的寄存器分配算法、全局指令調(diào)度、精確的程序依賴(lài)分析、Profiling Guided Optimization、地址指針推理及優(yōu)化、以及數(shù)據(jù)類(lèi)型(如半精度浮點(diǎn)數(shù))計(jì)算優(yōu)化等在內(nèi)的大量?jī)?yōu)化工作。
此外,為了便利開(kāi)展寒武紀(jì)芯片的調(diào)試工作,提升開(kāi)發(fā)效率,寒武紀(jì)編譯器團(tuán)隊(duì)推出了CNGDB(Cambricon Neuware GDB)。CNGDB現(xiàn)已開(kāi)源,請(qǐng)點(diǎn)擊代碼鏈接。
CNGDB是Linux系統(tǒng)上調(diào)試BANG語(yǔ)言程序的工具,基于GNU的調(diào)試器GDB開(kāi)發(fā),能支持GNU GDB在CPU上原有的全部操作,使用它可以在真實(shí)的硬件上同時(shí)調(diào)試寒武紀(jì)硬件產(chǎn)品的設(shè)備側(cè)和主機(jī)側(cè)的代碼。
同時(shí),CNGDB可以支持控制程序執(zhí)行和訪(fǎng)問(wèn)變量等多種操作、多核調(diào)試模式、CPU/Device調(diào)試的透明切換以及生成CNML內(nèi)核的錯(cuò)誤信息,解決了開(kāi)發(fā)者難以調(diào)試的問(wèn)題,極大地提升了程序開(kāi)發(fā)效率。