CAPI SNAP開發(fā)及應(yīng)用教程
在之前的OpenPOWER歐洲峰會(huì)上,我們推出了全新的框架,旨在便于開發(fā)者開始采用CAPI加速其應(yīng)用開發(fā)。CAPI存儲(chǔ)、網(wǎng)絡(luò)和分析編程框架,或者簡(jiǎn)稱為CAPI SNAP,通過(guò)OpenPOWER成員的多家公司共同協(xié)作努力開發(fā)而成,如今將與多家前期應(yīng)用合作伙伴展開內(nèi)部測(cè)試。
但是CAPI SNAP到底是什么呢?為了回答這個(gè)問(wèn)題,我希望為各位深入介紹一下CAPI SNAP的運(yùn)行原理。該框架通過(guò)簡(jiǎn)化API(對(duì)加速功能的調(diào)用)和加速功能的編碼,從而可以擴(kuò)展CAPI技術(shù)。利用CAPI SNAP,通過(guò)FPGA加速可以提高您的應(yīng)用性能,因?yàn)橛?jì)算資源與海量數(shù)據(jù)的關(guān)系更加密切。
簡(jiǎn)潔的API
ISV尤其關(guān)注這個(gè)框架的編程支持功能。該框架API可以支持應(yīng)用調(diào)用加速功能。創(chuàng)新的FPGA框架邏輯可以實(shí)施所有計(jì)算工程接口邏輯、數(shù)據(jù)移動(dòng)、高速緩存和預(yù)取工作——讓程序員只專注于加速器功能的開發(fā)。
沒(méi)有框架,應(yīng)用程序員必須創(chuàng)建運(yùn)行時(shí)加速庫(kù),執(zhí)行如圖1所示的任務(wù)。
但現(xiàn)在借助CAPI SNAP,應(yīng)用僅僅需要如圖2所示的那樣的調(diào)用功能。這種簡(jiǎn)潔的API擁有源數(shù)據(jù)(地址/位置),可以執(zhí)行的特定加速操作,以及發(fā)送結(jié)果數(shù)據(jù)的目標(biāo)(地址/位置)。
圖2:使用CAPI SNAP調(diào)用加速功能該框架能夠?qū)?shù)據(jù)移動(dòng)到加速器,并儲(chǔ)存結(jié)果。
拉近計(jì)算與數(shù)據(jù)的距離
API參數(shù)的簡(jiǎn)潔性兼具出色和強(qiáng)大的特點(diǎn)。源地址和目標(biāo)地址不僅是凝聚系統(tǒng)內(nèi)存單元,他們也是附加存儲(chǔ)、網(wǎng)絡(luò)或內(nèi)存地址。例如,如果框架卡具有附加存儲(chǔ),應(yīng)用可能會(huì)通過(guò)存儲(chǔ)獲得一個(gè)大型模塊(或多個(gè)模塊)的數(shù)據(jù),對(duì)FPGA中的數(shù)據(jù)執(zhí)行搜索、交叉或合并這樣的操作,并將搜索結(jié)果發(fā)送給主系統(tǒng)內(nèi)存的指定目標(biāo)地址。與圖3所示的標(biāo)準(zhǔn)軟件方法相比,這種方法具有更大的性能優(yōu)勢(shì)。
圖3:軟件中的應(yīng)用搜索功能(無(wú)加速框架)
圖4所示為源數(shù)據(jù)通過(guò)QSFP+端口流入加速器的方式,其中FPGA執(zhí)行搜索功能。該框架然后會(huì)將搜索結(jié)果轉(zhuǎn)發(fā)給系統(tǒng)內(nèi)存。
圖4:采用加速框架搜索引擎的應(yīng)用
該框架的性能優(yōu)勢(shì)提高了兩倍:
1. 通過(guò)拉近計(jì)算與數(shù)據(jù)之間的距離(在這種情況下,即指搜索),F(xiàn)PGA可以提高訪問(wèn)存儲(chǔ)的帶寬。
2. FPGA的加速搜索比軟件搜索速度更快。
表1的數(shù)據(jù)對(duì)比了兩種方法,表明性能提高了3倍。通過(guò)拉近計(jì)算與數(shù)據(jù)之間的距離,與將整體數(shù)據(jù)移動(dòng)到系統(tǒng)內(nèi)存這種方法相比,F(xiàn)PGA提高了輸入(或輸出)速度。
POWER+CAPI SNAP框架
只有軟件
輸入100GB的數(shù)據(jù)
兩個(gè)100Gb/s端口:4秒
一個(gè)PCI-E Gen3&TImes;8 NIC:12.5秒
執(zhí)行搜索
<1微秒
<100微秒
發(fā)送結(jié)果到系統(tǒng)內(nèi)存
<400納秒
0
總時(shí)間
4.0000014秒
12.50001秒
簡(jiǎn)化加速操作的編程
編程API不僅是CAPI SNAP的唯一簡(jiǎn)化功能。該框架還簡(jiǎn)化了FPGA中“操作碼”的編程。該框架能夠檢索源數(shù)據(jù)(無(wú)論是在系統(tǒng)內(nèi)存、存儲(chǔ)、網(wǎng)絡(luò)等),并將結(jié)果發(fā)送到指定目標(biāo)。使用高級(jí)語(yǔ)言(如C/C++或Go)編程的程序員只需要專注其數(shù)據(jù)轉(zhuǎn)換或“操作”即可。與框架兼容的編譯器可將高級(jí)語(yǔ)言轉(zhuǎn)化為Verilog,然后利用Xilinx的Vivado工具集加以合成。
開源版本將會(huì)包括多種全功能實(shí)例加速器,為用戶提供所需的起點(diǎn)和全端口聲明,以便接收源數(shù)據(jù)并返回目標(biāo)數(shù)據(jù)。