本申請涉及可重構(gòu)計算技術(shù)領(lǐng)域,特別涉及一種雙調(diào)合并排序方法及系統(tǒng)。
背景技術(shù):
由于信息技術(shù)快速發(fā)展,信息化改造的進(jìn)程也逐步加快,同時用戶使用各項服務(wù)發(fā)送的請求以及服務(wù)提供商采集的數(shù)據(jù)也越來越多,導(dǎo)致數(shù)據(jù)量的暴增。在面對海量數(shù)據(jù)涌入的情況下,對數(shù)據(jù)的處理速度決定了用戶請求的響應(yīng)時間,影響了用戶使用時的體驗。尤其在云計算中的應(yīng)用,云計算需要為不同的服務(wù)提供商提供不同的服務(wù),面對海量數(shù)據(jù)下,同時需要快速響應(yīng)海量的數(shù)據(jù),占用了大量的計算資源。會嚴(yán)重影響云計算數(shù)據(jù)處理中心的性能和功耗。
目前,在數(shù)據(jù)搜索領(lǐng)域需要大量應(yīng)用到排序處理,其中常用的是雙調(diào)合并排序方法。在應(yīng)用此方法時,已有很多研究和技術(shù)對此算法進(jìn)行了改進(jìn),以使該方法進(jìn)一步提高性能。常用的是在cpu和gpu的環(huán)境中改進(jìn)該算法,但是該改進(jìn)方法無法實現(xiàn)數(shù)據(jù)的并行處理,因此在現(xiàn)有硬件條件環(huán)境下,性能提升的空間有限。
因此,如何提高雙調(diào)合并算法的性能和運行效率,是本領(lǐng)域技術(shù)人員需要改進(jìn)的重點問題。
技術(shù)實現(xiàn)要素:
本申請的目的是提供一種雙調(diào)合并排序方法及系統(tǒng),通過處理器和fpga組成異構(gòu)加速平臺,可以使雙調(diào)合并排序算法提高性能,增加運行效率。
為解決上述技術(shù)問題,本申請?zhí)峁┮环N雙調(diào)合并排序方法,所述方法包括:
處理器調(diào)用第一程序文件,將原始數(shù)據(jù)傳輸至第一緩存中;其中所述第一程序文件是gcc編譯器編譯生成;
fpga調(diào)用第二程序文件,讀取所述第一緩存中的所述原始數(shù)據(jù),對所述原始數(shù)據(jù)進(jìn)行雙調(diào)合并排序處理得到單調(diào)序列,并將所述單調(diào)序列寫入所述第一緩存;其中所述第二程序文件是采用opencl對kernel程序文件編譯生成;
所述處理器從所述第一緩存讀取所述單調(diào)序列。
可選的,在所述處理器調(diào)用第一程序文件,將原始數(shù)據(jù)傳輸至第一緩存中之前,還包括:
創(chuàng)建所述處理器與所述fpga進(jìn)行數(shù)據(jù)通訊的所述第一緩存。
可選的,所述fpga讀取所述緩存中的所述原始數(shù)據(jù),對所述原始數(shù)據(jù)進(jìn)行雙調(diào)合并排序處理,得到單調(diào)序列,包括:
所述fpga讀取所述第一緩存中的所述原始數(shù)據(jù),通過雙調(diào)序列的生成方法,形成雙調(diào)序列;
所述fpga通過雙調(diào)序列的排序方法處理所述雙調(diào)序列,形成單調(diào)序列;
所述fpga將所述單調(diào)序列寫入所述第一緩存。
可選的,所述處理器調(diào)用第一程序文件,將原始數(shù)據(jù)傳輸至第一緩存中,還包括:
所述處理器調(diào)用所述第一程序文件,設(shè)置所述fpga運行時所需要的參數(shù)信息。
本申請還提供一種雙調(diào)合并排序系統(tǒng),所述系統(tǒng)包括:
處理器,用于調(diào)用第一程序文件,將原始數(shù)據(jù)傳輸至第一緩存中;其中所述第一程序文件是gcc編譯器編譯生成;從所述第一緩存讀取所述單調(diào)序列;
fpga,用于調(diào)用第二程序文件,讀取所述第一緩存中的所述原始數(shù)據(jù),對所述原始數(shù)據(jù)進(jìn)行雙調(diào)合并排序處理得到單調(diào)序列,并將所述單調(diào)序列寫入所述第一緩存;其中所述第二程序文件是采用opencl對kernel程序文件編譯生成。
可選的,所述處理器還用于創(chuàng)建所述處理器與所述fpga進(jìn)行數(shù)據(jù)通訊的所述第一緩存。
可選的,所述fpga具體用于讀取所述第一緩存中的所述原始數(shù)據(jù),通過雙調(diào)序列的生成方法,形成雙調(diào)序列;通過雙調(diào)序列的排序方法處理所述雙調(diào)序列,形成單調(diào)序列;將所述單調(diào)序列寫入所述第一緩存。
可選的,所述處理器還用于調(diào)用所述第一程序文件,設(shè)置所述fpga運行時所需要的參數(shù)信息。
本申請所提供的一種雙調(diào)合并排序方法,包括:處理器調(diào)用第一程序文件,將原始數(shù)據(jù)傳輸至第一緩存中;其中所述第一程序文件是gcc編譯器編譯生成;fpga調(diào)用第二程序文件,讀取所述第一緩存中的所述原始數(shù)據(jù),對所述原始數(shù)據(jù)進(jìn)行雙調(diào)合并排序處理得到單調(diào)序列,并將所述單調(diào)序列寫入所述第一緩存;其中所述第二程序文件是采用opencl對kernel程序文件編譯生成;所述處理器從所述第一緩存讀取所述單調(diào)序列。
通過處理器和fpga運行不同的程序文件,相互配合,組成異構(gòu)加速平臺。可以在不占用處理器的資源的情況下,使用fpga處理待排序的數(shù)據(jù),可以節(jié)約處理器資源。同時,fpga模塊執(zhí)行雙調(diào)合并算法,可以通過并行化的方式提高算法的并行度,使其滿足fpga運行時的特性,同時并行化處理速度可以大大加快數(shù)據(jù)處理時的效率。在設(shè)計雙調(diào)合并算法時,使用opencl描述雙調(diào)合并算法,可以映射生成更高效的fpga硬件電路結(jié)構(gòu),進(jìn)而可以提升fpga對雙調(diào)合并排序算法的硬件加速效果,同時可以提高產(chǎn)品的研發(fā)周期。
本申請還提供一種雙調(diào)合并排序系統(tǒng),具有以上有益效果,在此不作贅述。
附圖說明
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本申請實施例所提供的雙調(diào)合并排序的流程圖;
圖2為本申請實施例所提供的雙調(diào)排序并行化處理的流程圖;
圖3為本申請實施例所提供的雙調(diào)合并排序系統(tǒng)的框圖;
圖4為本申請實施例所提供的雙調(diào)合并排序的程序流程圖;
圖5為本申請實施例所提供的雙調(diào)排序處理的數(shù)據(jù)流程圖。
具體實施方式
本申請的核心是提供一種雙調(diào)合并排序方法,通過處理器和fpga組成異構(gòu)加速平臺,有效提高異構(gòu)平臺在處理數(shù)據(jù)時的性能,提高運行效率。還提供一種雙調(diào)合并排序系統(tǒng)。
為使本申請實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├绢I(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護(hù)的范圍。
請參考圖1,圖1為本申請實施例所提供的雙調(diào)合并排序的流程圖。
本實施例提供一種雙調(diào)合并排序方法,可以包括步驟:
s100,處理器調(diào)用第一程序文件,將原始數(shù)據(jù)傳輸至第一緩存中;其中所述第一程序文件是gcc編譯器編譯生成;
s200,fpga調(diào)用第二程序文件,讀取所述第一緩存中的所述原始數(shù)據(jù),對所述原始數(shù)據(jù)進(jìn)行雙調(diào)合并排序處理得到單調(diào)序列,并將所述單調(diào)序列寫入所述第一緩存;其中所述第二程序文件是采用opencl對kernel程序文件編譯生成;
s300,所述處理器從所述第一緩存讀取所述單調(diào)序列。
對應(yīng)的請參考圖4,圖4為本申請實施例所提供的雙調(diào)合并排序的程序流程圖。
其中,一般需要硬件執(zhí)行程序時都需要將編程代碼文件編譯為硬件可以理解的機器碼,也就是機器可讀的程序文件。因此,在此實施例中有兩個硬件去執(zhí)行相應(yīng)的代碼,需要不同的編譯器去編譯代碼。處理器在本實施例中指的是cpu,因此選用gcc編譯器對主機端程序進(jìn)行編譯,生成可以在通用處理器上執(zhí)行的可執(zhí)行程序文件。
對于fpga,即現(xiàn)場可編輯門陣列,一般選用rtl硬件描述語言實現(xiàn)算法。與rtl語言實現(xiàn)相比,在本實施例中選用opencl語言描述程序,可以有效改善算法實現(xiàn)的效率,減少算法實現(xiàn)的開發(fā)周期。使用opencl開發(fā)出的算法程序,更加符合fpga的硬件邏輯,并行化程度更高,運行時的效率也更高。因此選用opencl描述fpga的程序文件。
fpga具有并行化處理數(shù)據(jù)的特點,而由于雙調(diào)合并排序算法的設(shè)計并非適合并行化處理。因此,選用opencl語言描述算法,可以獲得并行化程度較高的程序文件,對于fpga的數(shù)據(jù)處理特征來說也更為合理。將描述后的kernel文件通過aoc編譯為aocx文件。
通過opencl描述的算法文件,處理數(shù)據(jù),可以并行化處理數(shù)據(jù),具有較高的性能,同時通過處理器和fpga組成的異構(gòu)平臺在fpga處理數(shù)據(jù)時不影響處理器的使用,提高系統(tǒng)整體的使用效率。
在此,需要說明的是在處理器調(diào)用程序文件之前,創(chuàng)建處理器與fpga進(jìn)行數(shù)據(jù)通訊的第一緩存。該緩存是存放在fpga開發(fā)板的內(nèi)存上,也就是在fpga的buffer中申請一塊專用內(nèi)存。
處理器通過pci-e總線將需要排序的數(shù)據(jù)發(fā)送至第一緩存后,處理器還需要設(shè)置所述fpga運行時的參數(shù)信息,以配置fpga正常運行。
請參考圖2,圖2為本申請實施例所提供的雙調(diào)排序并行化處理的流程圖。
基于上述實施例,本實施例可以包括:
s210,所述fpga讀取所述第一緩存中的所述原始數(shù)據(jù),通過雙調(diào)序列的生成方法,形成雙調(diào)序列;
s220,所述fpga通過雙調(diào)序列的排序方法處理所述雙調(diào)序列,形成單調(diào)序列;
s230,所述fpga將所述單調(diào)序列寫入所述第一緩存。
對應(yīng)的請參考圖5,圖5為本申請實施例所提供的雙調(diào)排序處理的數(shù)據(jù)流程圖。
其中,在并行化處理開始前會申請與第一緩存大小相同的第二緩存,用于存放并行化處理中的數(shù)據(jù),也就是該圖中的片上緩存。
在處理過程中,步驟s210與步驟s220會交替讀寫第二緩存,當(dāng)算法完成后會將最終的結(jié)果寫入第一緩存也就是圖中的ddr,等待被讀取。
本申請實施例提供了一種雙調(diào)合并排序方法,可以通過處理器和fpga組成的異構(gòu)加速平臺,同時通過fpga的并行化處理數(shù)據(jù)的特征,提高雙調(diào)合并排序算法的性能,加快數(shù)據(jù)處理的速度,提高整體系統(tǒng)的運行效率。
下面對本申請實施例提供的一種雙調(diào)合并排序系統(tǒng)進(jìn)行介紹,下文描述的雙調(diào)合并排序系統(tǒng)與上文描述的雙調(diào)合并排序方法可相互對應(yīng)參照。
請參考圖3,圖3為本申請實施例所提供的雙調(diào)合并排序系統(tǒng)的框圖。
本實施例可以包括:
處理器100,用于調(diào)用第一程序文件,將原始數(shù)據(jù)傳輸至第一緩存中;其中所述第一程序文件是gcc編譯器編譯生成;從所述第一緩存讀取所述單調(diào)序列;
fpga200,用于調(diào)用第二程序文件,讀取所述第一緩存中的所述原始數(shù)據(jù),對所述原始數(shù)據(jù)進(jìn)行雙調(diào)合并排序處理得到單調(diào)序列,并將所述單調(diào)序列寫入所述第一緩存;其中所述第二程序文件是采用opencl對kernel程序文件編譯生成;
基于上述實施例,本實施例中的處理器100,還可以用于:
創(chuàng)建所述處理器與所述fpga進(jìn)行數(shù)據(jù)通訊的所述第一緩存;
調(diào)用所述第一程序文件,設(shè)置所述fpga運行時所需要的參數(shù)信息。
基于上述實施例,本實施例中的fpga200,具體用于:
讀取所述第一緩存中的所述原始數(shù)據(jù),通過雙調(diào)序列的生成方法,形成雙調(diào)序列;通過雙調(diào)序列的排序方法處理所述雙調(diào)序列,形成單調(diào)序列;將所述單調(diào)序列寫入所述第一緩存。
說明書中各個實施例采用遞進(jìn)的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本申請的范圍。
結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(ram)、內(nèi)存、只讀存儲器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤、可移動磁盤、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
以上對本申請所提供的雙調(diào)合并排序方法及系統(tǒng)進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個例對本申請的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本申請原理的前提下,還可以對本申請進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本申請權(quán)利要求的保護(hù)范圍內(nèi)。