楊朋霖 周志陽
西北師范大學計算機科學與工程學院
基于OpenCL的雙調排序算法的優(yōu)化
楊朋霖 周志陽
西北師范大學計算機科學與工程學院
雙調排序算法是一種排序網(wǎng)絡算法。隨著數(shù)據(jù)量的增大,雙調排序執(zhí)行時間急劇上升。為了提高雙調排序執(zhí)行效率降低計算時間,本文提出了一種改進的并行雙調排序算法,對算法進行并行化改進,使用本地內存以及優(yōu)化線程模型。分別使用E8400和GTS450運行雙調排序算法進行測試,改進的雙調排序算法的計算速度比原版提高了5.24倍。
OpenCL GPU 雙調排序 KNN
近年來,異構計算系統(tǒng)表現(xiàn)出了良好的并行計算性能,成為國內外高性能計算領域的熱點研究方向。OpenCL(Open Computing Language,開放計算語言)作為一種開放計算標準,為很多并行應用提供了支持。
排序是科學計算或者工程應用中經(jīng)常使用,Garcia提出并行插入排序算法,文獻[1]提出了一種并行基數(shù)排序的算法,Garcia提出了基于CUDA并行排序算法,Nolan使用了基于CUDA的冒泡排序,Thanakulwarapas等人提出了一種改進通信時間的雙調排序,Thouti提出一種基于OpenCL版雙調排序算法,雙調排序有很好的表現(xiàn)。
2.1 OpenCL
OpenCL是為異構平臺編寫程序的開放式、免費標準,也是一個通用的編程框架?,F(xiàn)在由Khronos Group管理,異構平臺可由CPU、GPU、DSP、FPGA或者其他類型的處理器與硬件加速器組成。OpenCL是第一個以通用為目的的異構計算平臺,支持市面上絕大多數(shù)的處理器,可以在Windows、Linux、Mac OS大多數(shù)的操作系統(tǒng)上運行。OpenCL的核函數(shù)基于C99,相對編程難度較低。
2.2 雙調排序
雙調排序是一種排序網(wǎng)絡算法,由Batcher提出,Batcher定理是指將任意長為2n的雙調序列B劃分為相等的兩半,ai與an+i比較,較小者放入Min集合,較大者放入Max集合。得到的Min和Max仍然是雙調序列。Min集合中的元素都不大于Max集合中的元素。可以將輸入的2n元素雙調序列首先通過洗牌比較操作得到一個MAX序列和一個MIN序列,然后通過兩個n階雙調歸并器處理就可以得到一個有序序列。
3.1 概述
3.1.1 線程模型
OpenCL將GPU的多個PE(Processing Element)封裝為一個CU(Compute Unit),多個workgroup可以并發(fā)運行在一個CU上,不同CU可以并行運行。每個workgroup中包含許多workitem,同一個workgroup中的workitem可以通信??梢栽诔绦蛑性O置workgroup的數(shù)量以及每個workgroup包含的workitem的數(shù)量,不同設置對程序效率有很大的影響。
3.1.2 內存模型
在Thouti的論文中雙調排序算法只使用了全局內存。在OpenCL程序中訪問全局內存的延時很長,可以使用本地內存提高效率。
3.2 實驗結果分析
本文使用英特爾E8400+英偉達GTS450為OpenCL計算設備,使用隨機生成數(shù)據(jù)為測試數(shù)據(jù)。本次實驗通過統(tǒng)一的timer.h記錄實驗的運行時間。
優(yōu)化后雙調排序算法運行100次,計算平均運行時間,然后用數(shù)據(jù)數(shù)量除以平均時間算出每秒可以處理的任務量,經(jīng)過試驗可以看出使用本地內存后處理速度有了很大提升,速度提升到4.29倍,經(jīng)當每個workgroup包含256個workitem時,速度提升到5.24倍。
本文對并行雙調排序優(yōu)化。首先介紹了OpenCL現(xiàn)狀以及排序算法發(fā)展過程,闡述了雙調排序的原理以及瓶頸,進而提出優(yōu)化的雙調排序算法,通過在線程模型、內存模型兩個方面對KNN算法優(yōu)化。經(jīng)過實驗驗證對比,比原版本提高了5.24倍。
[1]Raymond T. OpenCL異構并行編程實戰(zhàn)[M],第1版, 張立浩,譯. 北京:機械工業(yè)出版社,2015
楊朋霖 ,1990—,男,山西翼城縣人,漢族,西北師范大學計算機科學與工程學院在讀碩士研究生,研究方向:GPU高性能計算。