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