老兵新傳——“闖入”高性能計(jì)算領(lǐng)域的FPGA
2016-10-09
來(lái)源:電子技術(shù)應(yīng)用
自1985年首款FPGA誕生以來(lái),F(xiàn)PGA已經(jīng)是一名在電子信息領(lǐng)域征戰(zhàn)了30年的老兵,這名戰(zhàn)功赫赫的老兵如今已經(jīng)正式開(kāi)赴了一個(gè)新的戰(zhàn)場(chǎng)。從2011年Altera公司發(fā)布支持利用OpenCL來(lái)開(kāi)發(fā)FPGA的SDK工具以后,采用CPU+FPGA構(gòu)成異構(gòu)計(jì)算系統(tǒng)成為另一種具有競(jìng)爭(zhēng)力的解決方案。為了讓更多網(wǎng)友了解FPGA異構(gòu)計(jì)算系統(tǒng)的原理、架構(gòu)和開(kāi)發(fā)流程,《電子技術(shù)應(yīng)用》特別邀請(qǐng)了電子科技大學(xué)黃樂(lè)天博士和電子科技大學(xué)“成電杰出學(xué)生”蒲宇亮在電子技術(shù)應(yīng)用·云課堂進(jìn)行了一場(chǎng)公益演講。
雖然開(kāi)講時(shí)間安排在9月25日,一個(gè)周日晚上的八點(diǎn),仍有100多網(wǎng)友參與了學(xué)習(xí),隨后幾天學(xué)習(xí)人數(shù)已經(jīng)超過(guò)200人。
在演講過(guò)程中,很多網(wǎng)友都提出了自己在學(xué)習(xí)CPU+FPGA異構(gòu)計(jì)算中遇到的問(wèn)題,授課講師黃樂(lè)天、蒲宇亮都進(jìn)行了詳細(xì)的解答。
感興趣的網(wǎng)友還可以通過(guò)以下網(wǎng)址觀看學(xué)習(xí)視頻:
http://webinar.chinaaet.com/zh-CN/Chinaaet/Youke/CourseDetail?courseId=541
授課講師簡(jiǎn)介:
黃樂(lè)天,電子科技大學(xué),講師,博士,《FPGA異構(gòu)計(jì)算》一書(shū)的第一作者。
《電子技術(shù)應(yīng)用》著名專家博主:老莫(http://blog.chinaaet.com/molf)主要研究方向?yàn)椋憾嗵幚砥髌舷到y(tǒng)與片上網(wǎng)絡(luò);高能效并行計(jì)算系統(tǒng);基于FPGA的新型異構(gòu)計(jì)算系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)。
蒲宇亮,電子科技大學(xué)“成電杰出學(xué)生”,中興通訊公司工程師。
研究生期就讀于電子科技大學(xué)——Altera聯(lián)合實(shí)驗(yàn)室,主要研究方向?yàn)榛贔PGA的新型異構(gòu)計(jì)算系統(tǒng),是《FPGA異構(gòu)計(jì)算》一書(shū)的主要作者之一。2016年7月以 “藍(lán)劍”精英人才計(jì)劃(該計(jì)劃全國(guó)僅招50人)身份入職中興通訊。
精華問(wèn)答整理
問(wèn)題:使用的平臺(tái)是SoC還是PCIe的FPGA?
黃樂(lè)天(以下簡(jiǎn)稱黃):我們兩個(gè)平臺(tái)都有使用過(guò)。SoC版本使用的是友晶公司提供的DE1-SoC開(kāi)發(fā)板,基于PCIe的版本使用的是友晶公司提供的DE5-net,這二者在開(kāi)發(fā)方法上并無(wú)本質(zhì)區(qū)別,只是在開(kāi)發(fā)流程和BSP支持上稍有不同。友晶公司的技術(shù)人員提供了很好的支持。
蒲宇亮(以下簡(jiǎn)稱蒲):兩者都可以,SoC資源較少,采用串口傳輸數(shù)據(jù)。若是對(duì)計(jì)算時(shí)間有嚴(yán)格要求則需采用PCIe傳輸?shù)腇PGA進(jìn)行實(shí)現(xiàn)。
問(wèn)題:FPGA異構(gòu)計(jì)算目前在中國(guó)主要應(yīng)用在那些領(lǐng)域?異構(gòu)計(jì)算能夠給這些領(lǐng)域帶來(lái)那些新變化?
黃:FPGA異構(gòu)計(jì)算在中國(guó)目前還處于“試用階段”,有部分公司(因?yàn)樗麄儧](méi)有公開(kāi)報(bào)道也不太好直接點(diǎn)名)在預(yù)研或者實(shí)驗(yàn)階段嘗試在使用這一計(jì)算模式。但基于GPU的傳統(tǒng)異構(gòu)計(jì)算已經(jīng)在并行計(jì)算領(lǐng)域得到了較大規(guī)模的應(yīng)用,如超級(jí)計(jì)算機(jī)、高性能服務(wù)器以及某些專用仿真設(shè)備。
蒲:基于OpenCL的FPGA異構(gòu)計(jì)算比較適合用在算法中存在大規(guī)模并行計(jì)算特性的系統(tǒng)中,類似傳統(tǒng)的GPU并行系統(tǒng),相比GPU系統(tǒng)能夠帶來(lái)更低的功耗和更好的計(jì)算能效,能降低運(yùn)維成本。
問(wèn)題:多核異構(gòu)是指不同的處理器集成到一起?CPU與DSP、FPGA算異構(gòu)嗎?
黃:不同的處理器集成到一起只不過(guò)是異構(gòu)計(jì)算的一個(gè)要素而已,更重要的是要用這些不同的處理器組合到一起去實(shí)現(xiàn)通用計(jì)算。這就涉及到一系列開(kāi)發(fā)方法、流程和工具。如果不是去實(shí)現(xiàn)通用計(jì)算,其實(shí)就是一種獨(dú)特形式的“嵌入式系統(tǒng)設(shè)計(jì)”而已。這部分內(nèi)容在課程視頻中有專門講到。
蒲:目前研究主要是用專用硬件如DSP、FPGA對(duì)原來(lái)的CPU系統(tǒng)進(jìn)行加速,但并沒(méi)有進(jìn)一步挖掘原系統(tǒng)的計(jì)算能力,未來(lái)商用的異構(gòu)計(jì)算系統(tǒng)應(yīng)該是主機(jī)端和設(shè)備端各司其職,將計(jì)算密度大的模塊放在設(shè)備端進(jìn)行加速,而將邏輯控制多的模塊放在主機(jī)端,這樣才能充分發(fā)揮異構(gòu)系統(tǒng)的優(yōu)勢(shì)。
問(wèn)題:異構(gòu)的處理器時(shí)鐘如何同步?
黃:并不需要時(shí)鐘級(jí)別的同步,而是在系統(tǒng)級(jí)別解決同步的問(wèn)題。利用的是多層存儲(chǔ)結(jié)構(gòu),基于barrier的編程方法等使數(shù)據(jù)一致性得到保證即可。這是在任何多核心系統(tǒng)或者復(fù)雜SoC設(shè)計(jì)中都被經(jīng)常采用的方法。如果對(duì)這個(gè)問(wèn)題希望有深入的了解,應(yīng)該閱讀多核片上系統(tǒng)設(shè)計(jì)方面的書(shū)籍或論文。
問(wèn)題:用ARM體系結(jié)構(gòu)和X86體系結(jié)構(gòu)作為Host,有什么區(qū)別嗎?
黃:本質(zhì)上沒(méi)有區(qū)別,Host需要是一個(gè)處理器來(lái)實(shí)現(xiàn)“主控”的功能,完成一些“準(zhǔn)備性”和“總結(jié)性”的工作。區(qū)別只在于ARM體系結(jié)構(gòu)的處理器和X86體系結(jié)構(gòu)的處理器在執(zhí)行程序時(shí)本身性能以及能效上的差別。
蒲:Altera的SoC-de1開(kāi)發(fā)板將ARM和FPGA集成到片上,相比X86體系中需要將數(shù)據(jù)在Host端和設(shè)備端傳輸,帶來(lái)的好處是傳輸速度快,延遲小。
問(wèn)題:Host和Device對(duì)OpenCL的效能哪個(gè)影響大?
黃:由于運(yùn)算加速主要依靠Device來(lái)實(shí)現(xiàn),因此Device的影響更大。但反過(guò)來(lái)說(shuō),OpenCL編程的時(shí)候需要考慮到不同Device的特性來(lái)對(duì)代碼結(jié)構(gòu)和代碼風(fēng)格加以優(yōu)化。我們之前發(fā)表過(guò)多篇論文來(lái)討論這個(gè)問(wèn)題,在視頻課程的最后部分有所介紹。
蒲:Device端影響更大,因?yàn)槠溆?jì)算密度大,在系統(tǒng)設(shè)計(jì)時(shí)研究將哪些模塊放在Device端是一個(gè)關(guān)鍵點(diǎn)。
問(wèn)題:異構(gòu)計(jì)算主要用于哪些領(lǐng)域?
黃:目前主要用于運(yùn)算加速,也就是高性能計(jì)算。但由于高性能計(jì)算用途廣泛,因此也可以說(shuō)異構(gòu)計(jì)算可以被用于很多領(lǐng)域。包括但不限于金融分析、天氣預(yù)報(bào)、大規(guī)模仿真等。
問(wèn)題:KNN算法中FPGA仍然是加速器,多核異構(gòu)與X86+FPGA有啥區(qū)別?
黃:我猜想這位朋友想問(wèn)的是異構(gòu)計(jì)算和利用傳統(tǒng)的設(shè)計(jì)方法在FPGA上實(shí)現(xiàn)一個(gè)加速器之間有什么區(qū)別?這其實(shí)就是代表了開(kāi)發(fā)方法的不同。用傳統(tǒng)的設(shè)計(jì)方法在FPGA上實(shí)現(xiàn)一個(gè)加速器是將CPU上的軟件和FPGA上的加速器分開(kāi)設(shè)計(jì),也就是傳統(tǒng)的嵌入式系統(tǒng)的設(shè)計(jì)方法。而異構(gòu)計(jì)算是在統(tǒng)一的開(kāi)發(fā)平臺(tái),統(tǒng)一的編程模型下開(kāi)發(fā)。使用OpenCL的編程框架使得CPU+FPGA架構(gòu)開(kāi)發(fā)“一體化”。
問(wèn)題:開(kāi)發(fā)者在適應(yīng)異構(gòu)計(jì)算時(shí),采用的程序開(kāi)發(fā)有哪些需要特別注意到的地方嗎?
黃:這個(gè)問(wèn)題很大,首先需要符合編程規(guī)范,其次需要根據(jù)器件的特點(diǎn)做一些代碼結(jié)構(gòu)上的優(yōu)化。具體內(nèi)容可以閱讀《FPGA異構(gòu)計(jì)算》這本書(shū)以及OpenCL編程相關(guān)章節(jié)。
蒲:需要具備并行編程的思想,在系統(tǒng)設(shè)計(jì)時(shí)最需要考慮的是模塊劃分。
問(wèn)題:如果我必須處理大稀疏矩陣,最好是用循環(huán)雙向鏈表,否則內(nèi)存放不下,我已在CPU上實(shí)現(xiàn)算法了,有沒(méi)有可能實(shí)現(xiàn)異構(gòu)運(yùn)算?
黃:這種情況下需要你改變算法,在適合于矩陣運(yùn)算的編程方法(如向量運(yùn)算)來(lái)加以處理,才有可能實(shí)現(xiàn)算法的并行化。這方面的并行編程技巧和算法優(yōu)化需要學(xué)習(xí),當(dāng)然這比單純的寫(xiě)CPU上的串行處理程序還是要難很多。
問(wèn)題:GPU的OpenCL內(nèi)核可以直接移植到FPGA上嗎?
黃:很多時(shí)候需要修改,并不能保證能直接移植。但修改的部分并不一定太多,取決于具體的代碼。
蒲:GPU的內(nèi)核代碼經(jīng)過(guò)一定修改可以移植到FPGA上,這也是OpenCL強(qiáng)調(diào)通用性的表現(xiàn)。
問(wèn)題:老師好!我想問(wèn)的是,對(duì)于一個(gè)初學(xué)者。如果想進(jìn)行FPGA異構(gòu)計(jì)算的學(xué)習(xí)和開(kāi)發(fā),我所需要做的工作都應(yīng)該包括那幾個(gè)方面呢?
黃:建議首先把OpenCL的編程方法學(xué)會(huì)。由于FPGA綜合一次時(shí)間太長(zhǎng),所以調(diào)試代碼很困難。因此如果學(xué)習(xí)OpenCL更好的平臺(tái)是GPU,可以選擇AMD公司支持OpenCL的GPU。
蒲:1.有C\C++編程基礎(chǔ)2.熟悉GPU并行編程思想3.對(duì)FPGA硬件架構(gòu)有一定了解即可。
問(wèn)題:處理器之間的數(shù)據(jù)傳輸消耗的時(shí)間,是否會(huì)抵消耗費(fèi)心血優(yōu)化程序所帶來(lái)的性能提升呢?
黃:這確實(shí)是一個(gè)問(wèn)題。所以現(xiàn)在要靠幾個(gè)方面來(lái)解決這一問(wèn)題。首先就是單片化,把CPU和FPGA集成到一個(gè)芯片上,兩者之間的傳輸時(shí)間可以下降。第二就是采用“設(shè)備間流水”方法來(lái)適當(dāng)降低這方面的影響。第三就是異構(gòu)計(jì)算的適用范圍,目前更多的適用于高吞吐率的應(yīng)用而非低延遲的應(yīng)用。最新的研究還包括一些體系結(jié)構(gòu)級(jí)的研究。
蒲:目前的內(nèi)存訪問(wèn)機(jī)制限制了子系統(tǒng)之間的頻繁交互,所以設(shè)計(jì)時(shí)應(yīng)盡量將計(jì)算密度高的模塊放在一起,從而減少傳輸延遲。相信隨著硬件加速應(yīng)用需求的增多,業(yè)界能夠給出更可靠完善的解決方案。
問(wèn)題:從前面講的,異構(gòu)更多的工作是在優(yōu)化吧?
黃:一定程度上可以這么說(shuō),在AMD公司內(nèi)部從事異構(gòu)計(jì)算相關(guān)開(kāi)發(fā)工作的工程師也常常被稱為“算法優(yōu)化工程師”。但從廣義來(lái)講大部分做實(shí)現(xiàn)的工程師其實(shí)都是在做優(yōu)化,傳統(tǒng)的FPGA工程師在實(shí)現(xiàn)算法的過(guò)程也可以認(rèn)為是一個(gè)算法優(yōu)化的過(guò)程。
問(wèn)題:做異構(gòu)計(jì)算開(kāi)發(fā)與平常的FPGA開(kāi)發(fā)來(lái)說(shuō),從思維、觀念上需要哪些改變?
黃:需要從更高的層級(jí),也就是體系結(jié)構(gòu)的層級(jí)上面去理解整個(gè)系統(tǒng)的運(yùn)行過(guò)程。而不是傳統(tǒng)的RTL級(jí)關(guān)注的那些點(diǎn)。
問(wèn)題:我現(xiàn)在想的是先對(duì)OpenCL在GPU的開(kāi)發(fā)中具有一定的了解后,再進(jìn)行移植到FPGA上。這樣的思路對(duì)么?
黃:在初期學(xué)習(xí)OpenCL的時(shí)候這樣的思路是對(duì)的,但是后期要想發(fā)揮FPGA的最大能效還需要對(duì)FPGA內(nèi)部結(jié)構(gòu)和OpenCL到FPGA內(nèi)部資源的映射關(guān)系有全面的了解。
問(wèn)題:FPGA可以運(yùn)行多個(gè)內(nèi)核程序嗎?
黃:請(qǐng)蒲宇亮回答。
蒲:目前一個(gè)FPGA能串行運(yùn)行多個(gè)內(nèi)核程序,但無(wú)法同時(shí)并行執(zhí)行多個(gè)內(nèi)核程序。相信隨著硬件虛擬化需求的增加以及技術(shù)的跟進(jìn),以后的標(biāo)準(zhǔn)中會(huì)對(duì)這方面有所支持。