基于GPU的JPEG2000高速圖像解壓縮研究_第1頁
基于GPU的JPEG2000高速圖像解壓縮研究_第2頁
基于GPU的JPEG2000高速圖像解壓縮研究_第3頁
基于GPU的JPEG2000高速圖像解壓縮研究_第4頁
基于GPU的JPEG2000高速圖像解壓縮研究_第5頁
已閱讀5頁,還剩28頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 專業名稱:通信與信息系統姓 名:楊國鵬 學 號:1101120210指導教師:李云松 教授緒論JPEG2000靜止圖像壓縮系統介紹GPU硬件架構及CUDA編程介紹解碼軟件系統的設計與實現解碼軟件系統的測試與分析總結與展望選題背景近年來,圖像壓縮芯片發展迅速,目前應用于航天航空領域的圖像壓縮芯片每秒可以輸出數十兆的壓縮碼流。為了能實時恢復圖像,地面接收站通常是采用多臺服務器同時解碼來完成。但是,這種方式需要專門的機房,占用空間多且耗電量大。近年來,GPU在高性能并行計算領域發展迅速,因此考慮用GPU實現。GPU與CPU的計算能力比較GPU與CPU的存儲帶寬選題意義因此,采用GPU解碼,實現高速

2、解壓縮所需的硬件資源將大大減少,進而占用的空間也將大大減少,實現了輕便化。JPEG2000編解碼系統結構GPU硬件架構GPU的硬件架構是一種兩層結構,通常一塊顯卡由多個流處理器SM組成,各SM相互獨立。每個SM都由指令緩存、指令分發和調度單元、流處理器SP、特殊功能單元SFU、雙精度處理單元DFU和共享存儲器等組成。SM之間通過全局存儲器通信。一個SM中包含多個SP,每個SP都有一個32bit的算術邏輯單元和一個乘加器。SP是SM中的主要運算單元。Fermi架構SM結構圖CUDA編程CUDA編程也是兩層結構。運行在GPU上的函數稱為kernel。GPU以線程網格Grid的形式組織線程,Grid

3、由多個線程塊block組成,每個block由多個線程thread組成。每個線程都會執行kernel函數,并且每個線程都有自己的block和thread標示號。對于tid = (blockIdx.y * gridDim.x +blockIdx.x) * blockDim.x * blockDim.y + (threadIdx.y * blockDim.x + threadIdx.x)這個式子,每個線程會得到一個不同的tid值。對于Atid=Atid + 8,可實現單指令多線程的處理方式。Grid結構GPU軟硬件結合在執行時,block被平均分發到SM上。一個SM上可以執行多個block,各blo

4、ck是相互獨立;當SM在執行其中一個block時,其它block處于準備狀態,當正在執行的block執行高延遲的操作時,SM可以切換執行另外一個block,可以有效地隱藏流水線延遲。Block中的線程被分發給SM中的SP去執行。硬件結構和軟件編程的配合,實現了GPU較高的并行計算能力。解碼系統框架解碼服務器上有6塊高性能顯卡,每個顯卡都可以獨立地完成解碼,可以根據需要的解碼速度,啟動相應數量的顯卡。碼流發送客戶端可以通過網絡向解碼服務器提供JPEG2000壓縮碼流,因此解碼服務器可以解遠程碼流。圖像顯示客戶端的功能是顯示解碼服務器恢復后的圖像數據。JPEG2000壓縮碼流在單GPU上的實現反量

5、化和后處理對每個像素點都是做同樣的操作,只是操作數不同,可并行度特別高,所以grid結構設計為多個block,每個block處理一行,block里的各線程處理對應行中的像素點。在JPEG2000中,二維圖像的離散小波變換采用Mallat分解結構,先按行進行水平方向的一維小波變換,再按列進行垂直方向的一維小波變換。解碼是壓縮的逆過程。由于按行進行變換時,各行可以同時進行變換,按列進行變換時,各列也可以同時進行變換。所以grid結構設計為多個block,每個block處理一行,block里的各線程處理對應行中的像素點。在進行小波變換時,數據時按行存儲在全局存儲器中,因此在進行行處理時,block中

6、的各線程訪問的數據是連續的,通過合并訪問,通過一次讀取全局存儲器就可以得到所需要的數據。在進行列處理時,各線程訪問的數據不連續,無法使用合并訪問,訪問數據速度很慢。為了加快速度,可以借助共享存儲器使用矩陣轉置,把列轉為行,這樣就可以連續訪問。矩陣轉置JPEG2000解碼在單個GPU上的并行架構多GPU聯合解碼單個GPU的解碼方式,解碼速度已經提高了很多,但有時需要更高的解碼速度,這時就需要多個GPU聯合解碼。在CPU上分配多個線程:分配一個CPU線程專門負責將n幅圖像的壓縮碼流組織在一起,把該線程稱為寫碼流線程;分配一個CPU線程專門負責將恢復后的圖像數據存盤,把該線程稱為寫文件線程;為每個G

7、PU分配一個CPU線程,該CPU線程使用cudaSetDevice( )函數啟動自己負責的顯卡,把該線程稱為解碼線程。定義了幾塊內存空間,每塊內存空間用于一組n幅圖像的解碼,并且定義三個隊列等待寫碼流隊列、等待解碼隊列以及等待寫文件隊列。內存塊地址的流轉碼流發送模塊碼流發送端通過網絡給解碼服務器發送碼流,因此解碼服務器可以解遠程碼流。給碼流發送端做了一個簡單的界面,界面采用wxWidgets語言開發。圖像顯示模塊顯示模塊提供顯示功能,顯示恢復后的圖像數據。服務器跟顯示客戶端的通信通過網絡實現。在菜單欄包含“文件”、“工具”和“幫助”三個菜單命令?!拔募卑按蜷_”和“退出”,“打開”可以靜態

8、地顯示本地的圖像,“退出”用于退出界面?!皫椭憋@示幫助信息。“工具”包含“參數設置”、“開始”、“暫停”和“停止”。解碼服務器硬件平臺:CPU: 兩個6核cpu,軟硬件配置:型號主頻緩存內存硬盤操作系統Inter Xeon E56452400.144GHz12288KB40GB1.8TBCentOS 64bitGPU: 6塊C2075顯卡,軟硬件配置:顯卡名稱C2075CUDA驅動版本/運行版本4.0/4.0計算能力2全局存儲器5GB多處理器 x CUDA Cores/多處理器14*32 CUDA CoresGPU時鐘頻率1.15GHz共享內存/多處理器49152Bytes單GPU解碼速度測

9、試:28幅2048*1024圖像,8bit、12bit、16bit,LeGall(5,3)無損壓縮,Dauhechies(9,7)2倍和4倍壓縮。碼流大小(MB)t2(ms)t1(ms)反量化+小波+電平位移(ms)Total(ms)解碼速度 (M像素點/s)解碼速度(MB/s)8bit_53無損27.246.02773.3873.45974.5457.4627.918bit_97二倍28.346.28844.18113.071070.1952.3326.448bit_97四倍14.243.88588.18113.40823.4568.0117.2412bit_53無損53.949.20113

10、8.1973.331323.6142.3140.7212bit_97二倍41.647.761032.35113.691260.2644.4433.0112bit_97四倍21.245.68769.86113.701001.7655.9021.1616bit_53無損59.651.161310.8573.191501.5537.2939.6916bit_97二倍41.147.841044.41113.291272.2844.0232.3016bit_97四倍28.246.39891.36113.601127.8549.6525.00單GPU解碼速度測試結果分析:解碼速度(M像素點/s)指的是用2

11、8圖像總的像素點除以Total的時間,反映的是像素點的吞吐率;解碼速度(MB/s)指的是用28幅圖像碼流的大小除以Total的時間,反映的是壓縮碼流的吞吐率。從每秒解多少像素點來反映解碼速度,可以看出壓縮倍數高,解碼速度快;比特精度越小,解碼速度越高。從每秒解多少字節的壓縮碼流來反映解碼速度,可以看出對于同樣寬度和高度的圖像,壓縮倍數小和比特精度高,碼流吞吐率高。多GPU解碼速度測試:多幅28幅2048*1024圖像,8bit、12bit、16bit,LeGall(5,3)無損壓縮,Dauhechies(9,7)2倍和4倍壓縮。不存儲恢復圖像數據。不同GPU的解碼速度:1個GPU2個GPU3個

12、GPU4個GPU5個GPU6個GPU8bit_53無損58.17112.07166.79217.13275.64309.508bit_97二倍52.6599.54153.75197.43246.16281.348bit_97四倍69.27128.46191.69258.18316.40333.7912bit_53無損41.7483.08123.33162.83191.61228.2912bit_97二倍44.2586.44127.36168.19207.01241.6112bit_97四倍56.95107.23163.54209.98258.20296.0016bit_53無損36.8472.

13、27104.75138.14170.88196.6416bit_97二倍43.9686.39126.92169.24204.01239.6216bit_97四倍49.6995.98142.34185.01231.31262.43不同GPU相比于單GPU的解碼倍數1個GPU2個GPU3個GPU4個GPU5個GPU6個GPU8bit_53無損1.001.932.873.734.745.328bit_97二倍1.001.892.923.754.685.348bit_97四倍1.001.852.773.734.574.8212bit_53無損1.001.992.953.904.595.4712bit_

14、97二倍1.001.952.883.804.685.4612bit_97四倍1.001.882.873.694.535.2016bit_53無損1.001.962.843.754.645.3416bit_97二倍1.001.972.893.854.645.4516bit_97四倍1.001.932.863.724.665.28在GPU數量為2、3、4時,解碼倍數是2、3、4倍;在GPU數量為5時,對比1個GPU,解碼倍數在4.5到4.7倍之間;在GPU數量為6時,對比1個GPU,解碼倍數在5.5倍之下。由于內存塊的數目都是10,當GPU數目較多,對于內存塊的競爭比較激烈,所以在4個GPU的基礎

15、上,再往上增加1個GPU,解碼速度增加的幅度有所減少。6個GPU,不存儲恢復圖像與存儲恢復圖像的速度比較不存儲恢復圖像數據存儲恢復圖像數據8bit_53無損309.50273.028bit_97二倍281.34252.418bit_97四倍333.79285.2316bit_53無損196.64145.2516bit_97二倍239.62135.8916bit_97四倍262.43148.93測試固態硬盤的寫文件速度,得出結果:寫文件速度在300MB/s到350MB/s之間,這個速度限制了6個GPU的解碼速度。CPU與GPU解碼速度的比較CPU:Inter Core2 Duo CPU E750

16、0 2.93GHz,內存2.00GBGPU:C2075測試碼流:2048*1024圖像,8bit、16bit,LeGall(5,3)無損壓縮,Dauhechies(9,7)2倍和4倍壓縮。CPU單幅圖像解碼時間(ms)CPU解碼速度1個GPU解碼速度GPU/CPU8bit_53無損858.82.3357.4624.678bit_97二倍1927.21.0452.3350.428bit_97四倍1678.21.1968.0157.0612bit_53無損1054.81.9042.3122.3112bit_97二倍1938.21.0344.4443.0612bit_97四倍1778.61.1255.9049.7116bit_53無損12301.6337.2922.8816bit_97二倍2120.40.9444.0246.8316bit_97四倍1860.81.0749.6546.40CPU與GPU解碼速度的比較分析:對于無損壓縮,單GPU的解碼速度是CPU解碼速度的22倍左右,對于有損壓縮,單GPU的解碼速度是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論