• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

OneAPI:天下大同

2020/01/08
60
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

OneAPI英特爾在生態(tài)布局中最重要的一環(huán),這已經(jīng)不是什么秘密了。早在 2018 年底舉行的英特爾架構(gòu)日上,英特爾的芯片首席架構(gòu)師 Raja Koduri 就對外公布了公司正在著力研發(fā)的一件“大事”:一個名為 OneAPI 的軟件編程框架。

(圖片來自 anandTech)

OneAPI:夢想照進(jìn)現(xiàn)實?

顧名思義,OneAPI 旨在提供一個適用于各類計算架構(gòu)的統(tǒng)一編程模型和應(yīng)用程序接口。也就是說,應(yīng)用程序的開發(fā)者只需要開發(fā)一次代碼,就可以讓代碼在跨平臺的異構(gòu)系統(tǒng)上執(zhí)行,底層的硬件架構(gòu)可以是 CPU、GPU、FPGA神經(jīng)網(wǎng)絡(luò)處理器,或者其他針對不同應(yīng)用的硬件加速器等等。

OneAPI 的口號是“No transistor left behind”,老石把它翻譯成“晶體管一個也不能少”,這也很形象的總結(jié)了 OneAPI 的終極目標(biāo)。

很多人在看到 OneAPI 之后的第一反應(yīng),都是三個字:不可能。有些略顯極端的媒體甚至認(rèn)為,OneAPI 已經(jīng)超出科幻小說的范疇,實在難以置信。

這些懷疑的聲音并非毫無依據(jù),應(yīng)用程序的跨平臺優(yōu)化一直是業(yè)界研究的熱點和重點之一。而 OneAPI 希望一次性解決四個硬件架構(gòu)的異構(gòu)編程問題,無異于在游戲開始就選擇了地獄難度。

夢想還是要有的,萬一實現(xiàn)了呢?

對于大多數(shù)應(yīng)用程序的開發(fā)者來說,使用高級語言編程已經(jīng)成為了再平常不過的事情。試想一下,你上一次寫 C++或 Python、并需要知道特定處理器指令的操作碼是什么時候?

事實上,現(xiàn)有的高級語言編譯器已經(jīng)很好的將程序開發(fā)與底層的計算機體系結(jié)構(gòu)分離開來。這使得應(yīng)用程序開發(fā)者可以專注于算法和應(yīng)用的開發(fā),而無需關(guān)心太多底層的 CPU 究竟如何實現(xiàn)程序。

然而,隨著應(yīng)用的復(fù)雜性不斷增加,對算力的要求也逐漸加大。此時,單純依靠堆積 CPU 內(nèi)核已經(jīng)無法滿足應(yīng)用程序?qū)τ谛阅堋崟r性、功耗、成本等等的要求。人們開始使用越來越多的非 CPU 計算單元,比如 GPU、FPGA、以及各種針對不同應(yīng)用而開發(fā)的專用芯片等。這些硬件加速器與 CPU 一起組成了復(fù)雜的異構(gòu)平臺。

為了發(fā)揮這個異構(gòu)平臺的最大性能,開發(fā)者需要深入了解底層硬件的體系結(jié)構(gòu),以及一系列的特定開發(fā)手段和技巧,以便針對性的利用各個異構(gòu)單元的優(yōu)勢。

拿 FPGA 來說,如果按開發(fā)軟件的思路去開發(fā) FPGA 硬件,比如使用了各種循環(huán)嵌套、多層條件分支等等,恐怕只會得到一個連時序都無法收斂的 FPGA 設(shè)計。同樣的,如果想用 GPU 做一些加速運算,那么最好在團(tuán)隊中有人對 CUDA 或 OpenCL 等有豐富的經(jīng)驗,否則就有可能白白消耗了 GPU 的高功耗而收效甚微。

這里只有一個問題:對于普通的軟件工程師或算法工程師而言,了解和掌握這些硬件相關(guān)的開發(fā)知識幾乎是不可能的。

而這正是 OneAPI 希望解決的痛點(引自英特爾):

“OneAPI 提供一個通用、開放的編程體驗,讓開發(fā)者可以自由選擇架構(gòu),無需在性能上作出妥協(xié),也大大降低了使用不同的代碼庫、編程語言、編程工具和工作流程所帶來的復(fù)雜性”。

OneAPI:HLS 的進(jìn)化形態(tài)?

具體來說,英特爾將旗下的芯片架構(gòu)分成了 SVMS 四類,即:
標(biāo)量(Scalar):CPU

矢量(Vector):GPU

矩陣(Matrix):AI 芯片

空間(Special):FPGA

這四類架構(gòu)分別有各自的優(yōu)勢和適用范圍,同時也有著各自的編程模型和方法。

以 FPGA 為例,F(xiàn)PGA 的硬件可編程性一直是它最主要的特點,也是與其他硬件加速器相區(qū)分的重要特性。然而,對 FPGA 進(jìn)行編程遠(yuǎn)遠(yuǎn)沒有聽起來那么簡單,這在老石之前的文章中也詳細(xì)介紹過多次。其中最大的難點,就是要使用硬件描述語言(HDL)對電路行為進(jìn)行建模,而且這種建模往往有著比較低的抽象程度。

也就是說,F(xiàn)PGA 開發(fā)者需要將待實現(xiàn)的算法進(jìn)行分解、并行化、設(shè)計流水線,使其成為一個個數(shù)據(jù)通路或控制電路,同時還要設(shè)計數(shù)據(jù)的存儲和讀取方式、各種時鐘域的同步、進(jìn)行時序收斂等諸多優(yōu)化,以符合系統(tǒng)的功耗、吞吐量、精度、面積等需求。這還不包括電路仿真、調(diào)試,以及在軟件層面需要做的一系列工作。

這樣,為了做出一個真正優(yōu)化過的 FPGA 設(shè)計,往往需要一個有著豐富設(shè)計經(jīng)驗的團(tuán)隊協(xié)同合作。而就算有這樣的團(tuán)隊,在處理一個再常見不過的 for 循環(huán)嵌套時,都可能花費長達(dá)數(shù)月的時間進(jìn)行 FPGA 的硬件實現(xiàn)與性能調(diào)優(yōu)。只需要看一下過去幾年里,各類國際頂會和期刊上有多少關(guān)于 FPGA 循環(huán)展開與優(yōu)化的論文就可見一斑了。

為了應(yīng)對 FPGA 的設(shè)計復(fù)雜度過大的問題,業(yè)界通常有兩種方法:第一,盡量將優(yōu)化過的硬件設(shè)計封裝成 IP,讓使用者直接調(diào)用。第二,使用諸如高層次綜合(HLS)的方法,直接將高層語言描述的模型轉(zhuǎn)化為 FPGA 硬件。

HLS 一直是 FPGA 業(yè)界發(fā)展的重要方向,幾乎沒有之一。老石在之前的文章《高層次綜合 – 解鎖 FPGA 廣闊應(yīng)用的最后一塊拼圖》中曾經(jīng)詳細(xì)分析過,這里不再贅述,有興趣的讀者可以參考那篇文章。

HLS 的主要問題是,它設(shè)計的初衷是為了硬件工程師服務(wù),而非軟件和算法開發(fā)者。因此,起碼到目前為止,在業(yè)界取得成功的 HLS 工具都需要使用者有著豐富的硬件知識。在數(shù)字電路工程師手中,HLS 工具已經(jīng)被證明可以極大的縮短設(shè)計周期,有時甚至可以得到近似或優(yōu)于人工優(yōu)化過的 RTL 代碼。然而對于軟件工程師,HLS 就好比讓 C 羅去湖人隊打籃球,固然噱頭十足,但很難得到令人滿意的成績。

OneAPI 在很大程度上可以看做是 HLS 的擴展,但它的主要目標(biāo)受眾則是軟件和算法工程師,這也將成為 OneAPI 與其他 HLS 工具的最主要區(qū)別。OneAPI 提供了一個統(tǒng)一的軟件編程接口,使得開發(fā)者可以隨意在底層硬件之間進(jìn)行切換和優(yōu)化,而無需太多關(guān)心具體的電路結(jié)構(gòu)和細(xì)節(jié)。

DPC++語言與硬件加速庫

具體來說,OneAPI 的核心是一個名為 Data Parallel C++(DPC++)的編程語言。DPC++本質(zhì)上是 C++的擴展,增加了對 SYCL 的支持。

SYCL 由 Khronos 組織開發(fā),它是一個在 OpenCL 上的 C++抽象層,使得用戶可以直接用簡潔的 C++對 GPU 等進(jìn)行開發(fā),而無需被 OpenCL 限制。

不過,有關(guān) DPC++本身的資料目前還比較有限,尚不清楚其具體的開發(fā)方法、以及如何對異構(gòu)系統(tǒng)進(jìn)行編程。待具體實例出現(xiàn)后,老石再進(jìn)行詳細(xì)解讀。

除了編程接口外,OneAPI 還會包含一個完整的開發(fā)環(huán)境、軟件庫、驅(qū)動程序、調(diào)試工具等要素,并且這些加速庫都已經(jīng)針對底層硬件進(jìn)行了優(yōu)化設(shè)計。

這種基于優(yōu)化過的加速庫的設(shè)計,和賽靈思的 Vitis 系統(tǒng)有著異曲同工之妙,而這也恰恰代表了業(yè)界發(fā)展的方向?,F(xiàn)如今,生態(tài)為王,為了掌握生態(tài)和開發(fā)者,就必須盡可能多的提供各類開發(fā)庫和 IP,以便開發(fā)者專注于應(yīng)用開發(fā),而無需重復(fù)造輪子。

(圖片來自英特爾)

為了支持 SVMS 四大類硬件架構(gòu),OneAPI 實際上給自己設(shè)置了非常高的目標(biāo)。英特爾已經(jīng)在 2019 年四季度發(fā)布了 OneAPI 的開發(fā)者測試版。除了基本工開發(fā)工具包之外,英特爾還發(fā)布了針對高性能計算(HPC)、深度學(xué)習(xí)、IoT、以及視覺和視頻等四種領(lǐng)域?qū)S玫拈_發(fā)工具包,以期為這些特定的應(yīng)用進(jìn)行針對性的優(yōu)化。在當(dāng)前的版本中,開發(fā)者仍然需要在 SVMS 四大類中手動指定目標(biāo)器件類別。但除此之外,OneAPI 就會自動對目標(biāo)器件的子類別進(jìn)行優(yōu)化。

結(jié)語

兵法云,兵馬未動,糧草先行。在技術(shù)進(jìn)步日新月異的當(dāng)代,各類 AI 芯片、硬件加速器不斷涌現(xiàn),異構(gòu)計算已經(jīng)成為整個行業(yè)最重要的趨勢。針對這些層出不窮的新硬件,則更應(yīng)該“架構(gòu)未動,軟件先行”。作為芯片廠商,單純提供芯片產(chǎn)品已經(jīng)無法滿足市場和使用者的需要,只有同時提供硬件和軟件生態(tài),才能在激烈的競爭中殺出一席之地。

老石認(rèn)為,OneAPI 是英特爾當(dāng)前最具有戰(zhàn)略意義的生態(tài)布局。相信有了諸如 OneAPI 之類的高層設(shè)計工具,軟件工程師和算法專家們就能進(jìn)一步釋放包括 FPGA 在內(nèi)的異構(gòu)系統(tǒng)的底層算力。至于 OneAPI 未來的表現(xiàn)如何,讓我們拭目以待。

OneAPI 相關(guān)的技術(shù)資料和編程指南,已上傳至知識星球“老石談芯 - 進(jìn)階版”,請在文末掃碼進(jìn)入星球查看。

(注:本文僅代表作者個人觀點,與任職單位無關(guān)。)

英特爾

英特爾

英特爾在云計算、數(shù)據(jù)中心、物聯(lián)網(wǎng)和電腦解決方案方面的創(chuàng)新,為我們所生活的智能互連的數(shù)字世界提供支持。

英特爾在云計算、數(shù)據(jù)中心、物聯(lián)網(wǎng)和電腦解決方案方面的創(chuàng)新,為我們所生活的智能互連的數(shù)字世界提供支持。收起

查看更多

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

微信公眾號“老石談芯”主理人,博士畢業(yè)于倫敦帝國理工大學(xué)電子工程系,現(xiàn)任某知名半導(dǎo)體公司高級FPGA研發(fā)工程師,從事基于FPGA的數(shù)據(jù)中心網(wǎng)絡(luò)加速、網(wǎng)絡(luò)功能虛擬化、高速有線網(wǎng)絡(luò)通信等領(lǐng)域的研發(fā)和創(chuàng)新工作。曾經(jīng)針對FPGA、高性能與可重構(gòu)計算等技術(shù)在學(xué)術(shù)界頂級會議和期刊上發(fā)表過多篇研究論文。