intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU

Chia sẻ: ViEngland2711 ViEngland2711 | Ngày: | Loại File: PDF | Số trang:9

116
lượt xem
3
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong bài viết này, tác giả đưa ra phương pháp cải tiến giải thuật Huffman áp dụng trong nén ảnh có độ phân giải cao bằng cách chia ảnh thành các khối con để có thể thực hiện mã hóa song song trên các lõi của GPU.

Chủ đề:
Lưu

Nội dung Text: Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU

Điều khiển – Cơ điện tử - Truyền thông<br /> <br /> TĂNG TỐC ĐỘ GIẢI THUẬT MÃ HÓA HUFFMAN<br /> CHO NÉN ẢNH SỐ BẰNG GPU<br /> Đào Huy Du*<br /> Tóm tắt: Trong các phương pháp nén đặc biệt là các phương pháp nén không<br /> tổn hao nếu muốn kết quả nén đạt tỷ lệ nén cao đồng nghĩa với việc thời gian nén sẽ<br /> cao. Giải thuật mã hóa Huffman là một giải thuật mã hóa không mất mát thông tin<br /> được áp dụng vào việc nén các đối tượng (văn bản, hình ảnh,…) cần độ chính xác<br /> cao, tuy nhiên giải thuật này cần một khoảng thời gian khá lớn để thực thi các thao<br /> tác mã hóa. Trong bài báo này, tác giả đưa ra phương pháp cải tiến giải thuật<br /> Huffman áp dụng trong nén ảnh có độ phân giải cao bằng cách chia ảnh thành các<br /> khối con để có thể thực hiện mã hóa song song trên các lõi của GPU. Việc thực thi<br /> giải thuật đề xuất này được thực thi trên GPU của NVIDIA kết hợp với các thư viện<br /> hỗ trợ xử lý song song của MatLab, đồng thời, đưa ra kết quả để so sánh hiệu suất<br /> giữa việc mã hóa có sử dụng và không sử dụng GPU.<br /> Từ khóa: Paralell Computing, GPU, Huffman, Paralell Coding.<br /> <br /> 1. ĐẶT VẤN ĐỀ<br /> Với mục đích cắt giảm chi phí trong việc lưu trữ ảnh và thời gian để truyền ảnh đi xa<br /> nhưng vẫn đảm bảo chất lượng của ảnh, nén ảnh là một trong những bước quan trọng nhất<br /> trong quá trình truyền thông và lưu trữ.<br /> Nén ảnh được áp dụng rất rộng rãi trong thực tế như: truyền các văn bản dưới dạng đồ<br /> họa, nén ảnh trong y tế, các ảnh dữ liệu chụp từ vệ tinh v.v... Nén ảnh là kỹ thuật được sử<br /> dụng để làm giảm kích thước của ảnh bằng cách loại bỏ một số thành phần dư thừa trong<br /> ảnh hay thay thế các thành phần trong ảnh bằng một thành phần khác nhằm làm giảm kích<br /> thước ảnh. Phương pháp cắt giảm các thông tin dư thừa trong dữ liệu gốc và làm cho dữ<br /> liệu sau nén nhỏ hơn rất nhiều so với dữ liệu gốc được gọi là phương pháp nén mất mát<br /> thông tin. Ngược lại, phương pháp nén mà sau khi giải nén thu được chính xác dữ liệu gốc<br /> gọi là phương pháp nén không mất mát thông tin [1].<br /> Một số ảnh cần độ chính xác cao thường phải áp dụng kỹ thuật mã hóa không mất mát<br /> thông tin để truyền thông hoặc lưu trữ. Ví dụ trong lĩnh vực y tế, đối với kỹ thuật chụp<br /> CT-Scanner thì mỗi lát cắt của hình ảnh có thế lên đến 150MB hoặc cao hơn, vì vậy, một<br /> tập dữ liệu đầy đủ cho một chẩn đoán trung bình có thể từ 200MB đến 400MB [2]. Với<br /> những dữ liệu ảnh như vậy, độ phân giải sẽ rất lớn và cần nhiều dung lượng lưu trữ và đặc<br /> biệt chi phí cho thời gian nén và giải nén sẽ cao.<br /> Giải thuật mã hóa Huffman được sử dụng rộng rãi trong các ứng dụng liên quan đến<br /> truyền thông, các ứng dụng nén dữ liệu ảnh và video [3] [4], giải thuật này đặc biệt phù<br /> hợp với những tập dữ liệu lớn nhưng có số lượng các đối tượng xuất hiện trong đó là ít.<br /> Giải thuật mã hóa Huffman gồm có 2 bước chính: Bước thứ nhất, dữ liệu ảnh đầu vào<br /> được xử lý để tạo ra cây nhị phân và bảng từ mã; Bước thứ 2, mỗi mức xám trong dữ liệu<br /> đầu vào được so sánh với bảng từ mã để tạo ra luồng bit nhị phân. Trong bước thứ 2, đây<br /> là giai đoạn chiếm nhiều thời gian nhất trong các giai đoạn nén Huffman do việc phải đi so<br /> sánh từng phần tử trong tập dữ liệu với bảng từ mã để tạo ra chuỗi dữ liệu mã hóa.<br /> Cho dù việc mã hóa Huffman song song là một vấn đề khá phức tạp, song đã có nhiều<br /> công trình tập trung nghiên cứu như: tác giả P. Berman, M. Karpinski và Y. Nekrich [5] đã<br /> nghiên cứu việc sử dụng n bộ xử lý để tạo ra bảng từ mã song song, nhưng chưa đề cập<br /> đến vấn đề mã hóa song song. Trong [6], tác giả trình bày phương pháp giải mã song song<br /> mà có một bị lỗi trong quá trình truyền từ tập dữ liệu mã hóa. Trong [7], tác giả đề cập đến<br /> <br /> <br /> 80 Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”<br /> Nghiên cứu khoa học công nghệ<br /> ảnh hưởng của các kiến trúc phần cứng khác nhau đến việc mã hóa Huffman theo phương<br /> pháp động. Các kỹ thuật nén JPEG và MPEG cũng áp dụng phương pháp mã hóa Huffman<br /> để làm tăng tốc độ nén [8] [9] [10] [11].<br /> Với sự ra đời và phát triển nhanh chóng của bộ xử lý đồ họa GPU (Graphics Processing<br /> Unit) cùng với Kiến trúc thiết bị tính toán hợp nhất CUDA (Compute Unified Device<br /> Architecture ) của NVIDIA với mô hình xử lý SIMD (Single Instruction Multi Data),<br /> nhiều nhà nghiên cứu cũng đã tập trung giải quyết các bài toán xử lý dữ liệu trên GPU.<br /> Trong [12], tác giả đã sử dụng GPU để song song hóa giải thuật mã hóa theo độ dài và đã<br /> đạt được tốc độ xử lý cao bằng cách giới hạn cho độ dài từ mã; Trong [13], tác giả đã thay<br /> đổi giải thuật Huffman để tạo ra khối dữ liệu nén và giải nén hoàn toàn độc lập với nhau<br /> và làm tăng tốc độ lên gấp 3 lần so với mã hóa Huffman tuần tự.<br /> Trong nghiên cứu này, chúng tôi thực hiện việc mã hóa ảnh mầu có độ phân giải cao<br /> sử dụng giải thuật Huffman bằng cách tạo ra các ma trận mầu sau đó chia các ma trận<br /> này thành các khối con để đưa vào thực hiện trên từng lõi của GPU. Kết quả kiểm<br /> nghiệm cho thấy tốc độ mã hóa và giải mã tăng khoảng 5 lần so với thực hiện giải thuật<br /> Huffman tuần tự.<br /> Bài báo được trình bày trong 04 mục: Mục 2 trình bày về kiến trúc CPU-GPU và<br /> phương thức xử lý của GPU[3]; Mục 3: Mã hóa Huffman song song; Mục 4: Kiểm thử<br /> Phương pháp mã hóa Huffman song song để thực thi trên GPU và kết quả so sánh việc<br /> thực hiện giải thuật này trên CPU và GPU; Mục 5: Kết luận.<br /> 2. KIẾN TRÚC BỘ XỬ LÝ ĐỒ HỌA - GPU<br /> CPU được xem như là bộ não của hệ thống máy tính, các hệ thống máy tính hiện nay<br /> thường được tích hợp hệ thống card đồ họa; hệ thống này không chỉ phục vụ cho các ứng<br /> dụng về xử lý đồ họa mà đã được phát triển để có thể thực hiện một số chức năng tính<br /> toán theo mô hình SIMD. Hệ thống Card đồ họa này được gọi là GPU (Graphics<br /> Processing Unit). Để thực hiện được các thao tác tính toán một cách hiệu quả, GPU cần<br /> được hỗ trợ kiến trúc tính toán song song do Nvidia phát triển gọi là CUDA (Compute<br /> Unified Device Architecture - Kiến trúc thiết bị tính toán hợp nhất) [14].<br /> Như được chỉ ra trên hình 1, CPU<br /> thường chỉ được thiết kế với một vài lõi tuy<br /> nhiên bộ nhớ Cache có kích thước khá lớn<br /> nên việc truy cập bộ nhớ không bị giới hạn.<br /> Trong khi đó, GPU bao gồm hàng trăm lõi<br /> và có thể xử lý đồng thời hàng nghìn luồng<br /> lệnh, vì vậy GPU có thể hỗ trợ trong việc<br /> tăng tốc độ thực hiện công việc đồng thời<br /> tiết kiệm được chi phí đầu tư<br /> Qui trình tính toán trên GPU được thực<br /> thi như sau [14]:<br /> 1. Dữ liệu được chuyển từ bộ nhớ chính<br /> (trên CPU) đến bộ nhớ của GPU.<br /> 2. Chuyển lệnh cần thao tác từ CPU sang<br /> GPU. Hình 1. Luồng xử lý dữ liệu<br /> 3. Mỗi lõi (Core) của GPUsẽ thực thi trên CUDA [15].<br /> lệnh một cách song song trên tập dữ liệu<br /> riêng biệt.<br /> <br /> <br /> <br /> Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san ACMEC, 07 - 2017 81<br /> Điều khiển – Cơ điện tử - Truyền thông<br /> 4. Xong khi kết thúc công việc, các Core chuyển kết quả từ bộ nhớ trên GPU về bộ nhớ<br /> chính của CPU.<br /> Với sự phát triển nhanh chóng của GPU không chỉ trong lĩnh vực đồ họa mà còn thành<br /> công trong các kỹ thuật tính toán truyền thống hay song song [16]. Trước đây, mọi thao<br /> tác tính toán được thực hiện trên CPU, tuy nhiên khi hệ thống máy tính được tích hợp<br /> GPU thì các thao tác tính toán được đưa vào xử lý trên GPU bằng cách di chuyển dữ liệu<br /> từ CPU sang GPU và công việc được thực thi nhanh hơn nhờ kỹ thuật xử lý song song<br /> nhiều luồng dữ liệu trên các lõi của GPU.<br /> 3. MÃ HÓA HUFFMAN SONG SONG<br /> Mã hóa Hufman được giới thiệu năm 1952 bởi D. A. Huffman [17], giải thuật này là<br /> một giải thuật mã hóa không mất mát thông tin sử dụng trong nén dữ liệu. Tư tưởng của<br /> giải thuật sẽ thay thế mỗi đối tượng đầu vào bằng mã bit có độ dài thay đổi, trong đó độ<br /> dài của mã bit được xác định dựa vào tần suất xuất hiện của đối tượng đó khi một đối<br /> tượng đầu vào có tần suất xuất hiện càng nhiều sẽ được thay thế bởi mã bit càng ngắn. Để<br /> thực hiện được, giải thuật Huffman cần thực hiện 2 giai đoạn: (1) Xác định tần suất xuất<br /> hiện các đối tượng và xây dựng cây nhị phân và bảng mã hoá, (2) Mã hóa dữ liệu.<br /> Khi kích thước ảnh càng lớn, khoảng thời gian để mã hóa càng kéo dài. Do tính chất xử<br /> lý của GPU là hoạt động theo mô hình SIMD, nên mỗi lõi trong GPU sẽ đảm nhiệm việc<br /> thực hiện các thao tác mã hóa các phần tử ảnh tương ứng với mỗi luồng dữ liệu đưa vào đó.<br /> Để thực hiện được việc mã hóa<br /> các điểm ảnh song song trên GPU,<br /> ảnh phải được tách ra thành 3 ma<br /> trận tương ứng với 3 mầu Red,<br /> Green, Blue. Gọi ba ma trận đó là<br /> Rc, Gc và Bc với kích thước của<br /> mỗi ma trận là mxn;<br /> Tư tưởng chính trong giải thuật<br /> được thực hiện thành 04 bước:<br /> Bước thứ nhất: Tách ảnh mầu<br /> ban đầu thành 03 ma trận ảnh tương<br /> đương với 3 mầu cơ bản là Red,<br /> Green và Blue, bước này được thực<br /> hiện tuần tự trên CPU.<br /> Bước thứ 2: Sau khi ảnh chính<br /> được tách ra thành 3 ma trận tương<br /> ứng với 3 mầu Red, Green và Blue<br /> mỗi ma trận sẽ được xây dựng một<br /> cây nhị phân và bảng từ mã tương<br /> ứng với các mức xám trong từng ma<br /> trận đó. Các bước từ tách ma trận,<br /> xây dựng cây nhị phân, tạo bảng từ<br /> mã cho mỗi ma trận thành phần đều<br /> được thực hiện song song trên CPU<br /> và kết quả của bước này sẽ được lưu tại bộ nhớ của mỗi CPU.<br /> Bước thứ 3: Sau khi hoàn thành việc xây dựng cây nhị phân và bảng từ mã, mỗi ma<br /> trận thành phần sẽ được tách ra thành các khối (mỗi khối sẽ tương ứng với một hàng của<br /> <br /> <br /> <br /> 82 Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”<br /> Nghiên cứu khoa học công nghệ<br /> ma trận) và kích thước của mỗi khối sẽ là (m-1)x1, số lượng các Block chính bằng số hàng<br /> của ma trận, nếu ma trận có n-1 hàng tương ứng sẽ có n-1 Block.<br /> Bước thứ 4: CPU sẽ chuyển các Block vào GPU để thực hiện việc mã hóa. Mỗi Block<br /> sẽ được thực hiện mã hóa đồng thời trên mỗi Thread của GPU. Nếu GPU càng có nhiều<br /> Thread thì càng có nhiều Block được mã hóa trong cùng một thời điểm, vì vậy tốc độ mã<br /> hóa của giải thuật này phụ thuộc vào số lượng Thread của GPU. Mỗi phần tử của ma trận<br /> sẽ được so sánh với bảng từ mã và tạo ra các mã tương ứng. Mỗi một Block sau khi đã mã<br /> hóa, giải thuật đề xuất sẽ đi ghép giá trị của các phần tử trong các Block này thành 1 file<br /> nhị phân. Sau khi thực hiện xong việc tạo ra các File nhị phân kết quả đưa trả về cho CPU,<br /> CPU tiếp tục ghép các File nhị phân thành một File tổ hợp.<br /> Trong bước thứ 4, mỗi khi tạo ra được một luồng bit nhị phân mã hóa cho các mức xám<br /> trong 1 Block, theo nguyên tắc bộ xử lý luôn lưu nội dung của File nhị phân có số bit là<br /> bội của 8, nếu file nhị phân chưa đạt được kích thước bằng bội của 8, bộ xử lý sẽ tự động<br /> bổ sung số các bit ‘0’ để độ dài File đạt được độ dài theo đúng quy định. Chính nguyên tắc<br /> này, gây ra sự nhầm lẫn cho bộ giải mã khi nhận được 1 luồng dữ liệu bit không chính xác<br /> theo đúng nội dung mã hóa.<br /> Giải pháp để khắc phục trong giải thuật chúng tôi đã gán thêm vào đầu mỗi File nhị<br /> phân đã mã hóa kích thước thực của luồng bit mã hóa để khi bộ giải mã nhận và đọc đúng<br /> nội dung của luồng bit mà không bị nhầm lẫn bởi các bit ‘0’ được bổ sung. Giả sử File<br /> được mã hóa có nội dung:1010010111101100111001111011110110110<br /> Độ dài của file là 37, bộ xử lý sẽ bổ sung thêm 3 bit ‘0’, và File mã hóa sẽ là cuối cùng<br /> sẽ là: 1010010111101100111001111011110110110000.<br /> Để có thể đọc được đúng độ dài file mã hóa và loại trừ lưu được số bit ‘0’ bổ sung, giải<br /> thuật này chèn 2byte vào đầu mỗi file để lưu độ dài byte mã hóa. File ví dụ trên sẽ thành :<br /> 00000000001001011010010111101100111001111011110110110000.<br /> <br /> <br /> <br /> <br /> Hình 2. Minh họa giải thuật để xuất.<br /> <br /> <br /> Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san ACMEC, 07 - 2017 83<br /> Điều khiển – Cơ điện tử - Truyền thông<br /> Trong giải thuật 1, 2, 3, 4, 5 trình bày các bước thực hiện thao tác mã hóa song song áp<br /> dụng cho ảnh mầu<br /> Giải thuật 1. Tách ma trận mầu thành 3 ma trận thành phần là Red, Green và Blue<br /> (tuần tự trên CPU).<br /> Đưa ảnh màu Image(RGB )vào xử lý để tách thành 3 ma trận mầu thành phần là<br /> Red_Matrix, Green_Matrix và Blue_Matrix<br /> Algorithm1 ImgMatComp(file_name)<br /> Input: image(RGB)<br /> Divide image into Red_Matrix (mxn)<br /> Divide image into Green_Matrix (mxn)<br /> Divide image into Blue_Matrix (mxn)<br /> Output:Red_Matrix, Green_Matrix, Blue_Matrix<br /> <br /> <br /> <br /> Giải thuật 2. Xác định tần suất xuất hiện các các mức xám trên ba ma trận thành phần<br /> (song song trên CPU).<br /> Đối với mỗi ma trận mầu thành phần Red_Matrix, Green_Matrix và Blue_Matrix sẽ<br /> được chuyển vào 1CPU để thực hiện thao tác tính tần suất xuất hiện của các mức xám<br /> GreyLevel và kết quả được đưa vào 3 bảng Pro_Table tương đương.<br /> Algorithm2 Greylevel_Prob<br /> Input:Matrix(Red_Matrix,Green_Matrix,Blue_Matrix)<br /> Parfor iii=1:3 // each CPU<br /> Each (matrix())// each matrix that has size of(m x<br /> n) as: Red_Matrix, Green_Matrix, Blue_Matrix<br /> {<br /> For I: (0-m) do<br /> For j: (0-n) do<br /> {<br /> For index:(0-255) do<br /> Compare GreyLevel[i,j]=index<br /> Add GreyLevel [i,j]->Pro_table<br /> quanlity= quanlity +1<br /> }<br /> }<br /> Output: Prob_table_Red[GreyLevel,quanlity],<br /> Prob_table_Green[GreyLevel,quanlity],<br /> Prob_table_Blue[GreyLevel,quanlity]<br /> <br /> <br /> Giải thuật 3. Xây dựng 03 cây nhị phân tương ứng với ba ma trận thành phần (song<br /> song trên CPU).<br /> Mỗi bảng tần xuất Pro_Table sẽ đi xây dựng cây nhị phân Huf_Tree tương ứng bằng<br /> cách sắp xếp giá trị trong bảng theo giá trị tăng dần và các nút của cây nhị phân được gán<br /> là các trọng số W của mức xám GreyLevel trong bảng Pro_Table.<br /> <br /> <br /> <br /> 84 Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”<br /> Nghiên cứu khoa học công nghệ<br /> Algorithm3 BinaryTree<br /> Parfor iii=1:3 // each CPU<br /> Sort Pro_table_(Red, Green, Blue) ascending<br /> i=n<br /> while i>=1 do<br /> if(Huf_tree[i]≠null)<br /> T=merge(Huf_Tree[i], Wi[1])<br /> Remove Wi[1] from Wi<br /> if (weight(Greylevel) ≠ 1/2i-1)or (Wi≠ )<br /> if(Next_greylevel[i] ≠i-1 )<br /> Next_greylevel[i-1]=<br /> next_greylevel[i]<br /> Next_greylevel[i]=i-1<br /> if(weight(greylevel) > 1/2i-1)<br /> Wi-1=merger(Wi-1,Greylevel)<br /> if(Huf_Tree(i)is odd)<br /> Huf_Tree(Next_greylevel[i]=last(Wi))<br /> i= Next_greylevel[i]<br /> <br /> <br /> Giải thuật 4. Chia mỗi ma trận thành phần thành các khối (Block) và mã hóa mỗi<br /> block trong ma trận thành phần thành các file nhị phân tương ứng (song song trên CPU).<br /> Chia các ma trận thành phần các khối và các khối con sẽ được mã hóa đồng thời chính<br /> bằng số lõi NumberGPUCore của GPU, kết quả mã hóa được lưu trong các file nhị phân<br /> binarry_file.<br /> Algorithm4 BinaryBlocks<br /> thread=NumberGpuCore<br /> Parfor n=(1÷thread)<br /> for i= (1:lenght(Huff_Tree))<br /> codeword[i]=’’<br /> parfor xx=gpuarray(1:length(index) )<br /> for ind=1:length(symb)<br /> if index(xx)==symb(ind)<br /> np_data_t{xx}=np(ind);<br /> end<br /> end<br /> end<br /> convert block into binary_file<br /> add2bytes(binary_file);<br /> end<br /> <br /> Giải thuật 5. Ghép các File nhị phân thành File tổ hợp hoàn chỉnh.<br /> Algorithm5 Mergefile(n);<br /> for x=1:n(Binary_File)<br /> Final_File(Merge Binary_File);<br /> end<br /> <br /> <br /> <br /> Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san ACMEC, 07 - 2017 85<br /> Điều khiển – Cơ điện tử - Truyền thông<br /> 4. KIỂM THỬ<br /> Trong phần thử nghiệm cho giải thuật nén Huffman song đề xuất, chúng tôi đã cài đặt<br /> giải thuật này trên cả CPU và GPU hỗ trợ kiến trúc CUDA của Nvidia có cụ thể như sau:<br /> Cấu hình CPU GPU<br /> Intel(R)Xeon(R)CPUE3- NVIDIA Quadro 600, 96 Cores,<br /> Phần cứng 1225V2@3.3Ghz@3.3Ghz GPU Memory Specs: 1 GB DDR3,<br /> 4 Core, 7GB Ram MaxThreadsPerBlock: 1024<br /> Windows 10, 64-bit Windows 10, 64-bit Operating System<br /> Phần mềm Operating System. Matlab Matlab R2014c<br /> R2014a<br /> Hai ảnh mầu được chụp với độ phân giải cao và được đưa vào mã hóa là VietnamFlag<br /> và Flowers:<br /> <br /> <br /> <br /> <br /> Hình 3. Flowers. Hình 4. VietNamFlag.<br /> Cơ sở dữ liệu ảnh như sau:<br /> Bảng 1. Các thông số dữ liệu ảnh.<br /> <br /> Tên ảnh Dung lượng Kích thước<br /> VietNamFlag 5,8MB 3000x4496<br /> Flowers 24,7MB 3920x2205<br /> Thử nghiệm thứ nhất: thực hiện nén các ảnh trong cơ sở dữ liệu bằng giải thuật<br /> Huffman tuần tự trên CPU.<br /> Thử nghiệm thứ hai: thực hiện giải thuật nén Huffman đề xuất trên GPU. Hai ảnh mầu<br /> được đưa vào để thực hiện mã hóa sẽ được chia thành các Block con và được đưa đến các<br /> Core của GPU để xử lý. Cụ thể, với ảnh VietNamFlag sẽ được chia thành 3000 Blocks;<br /> ảnh Flowers chia thành 3920 Blocks. Hai ảnh này sẽ được xử lý trên 1024 Thread của 96<br /> Core của GPU.<br /> Kết quả thu được như sau:<br /> Bảng 2. So sánh kết quả của giải thuật được cài đặt trên CPU và GPU.<br /> Tên ảnh VietNamFlag Flowers<br /> Dung lượng 5,8MB 24,7MB<br /> Kích thước 3000 x 4496 3920 x 2205<br /> Số Block 3000 3920<br /> Thời gian CPU 1,5027 27,337<br /> mã hóa(s) GPU 2,170 4,614<br /> <br /> <br /> <br /> 86 Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”<br /> Nghiên cứu khoa học công nghệ<br /> <br /> <br /> <br /> <br /> Hình 5. Kết quả mô phỏng giải thuật trên CPU và GPU.<br /> 5. KẾT LUẬN<br /> Trong bài báo, tác giả đã xây dựng giải thuật Huffman song song để cho phép thực<br /> hiện song song trên bộ xử lý đồ họa GPU. Trong giải thuật này, các ảnh mầu có kích thước<br /> lớn được phân chia ra thành các Block, số Block chính bằng số hàng của ma trận, và giá trị<br /> của mỗi phần tử trong Block tương ứng với một mức xám sẽ được mã hóa dựa trên bảng<br /> từ mã được xây dựng. Kết quả mã hóa cuối cùng thu được sẽ được lưu thành một file nhị<br /> phân. Do giải thuật được thiết kế cho phép tách và chuyển các Block vào từng Core của<br /> GPU để có thể thực hiện các thao tác mã hóa một cách đồng thời cho nhiều Block nên đã<br /> rút ngắn được khoảng thời gian mã hóa ảnh. Dựa trên kết quả thực thi cho thấy, khoảng<br /> thời gian rút ngắn được từ 4 đến 5 lần so với khi thực hiện giải thuật này trên CPU. Ngoài<br /> ra, tốc độ mã hóa cũng phụ thuộc vào số Core của GPU, nếu giải thuật được cài đặt trên<br /> GPU có càng nhiều Core thì tốc độ tính toán sẽ càng nhanh.<br /> TÀI LIỆU THAM KHẢO<br /> [1]. M. Rabbani and P. W. Jones, "Digital Image Compression," vol. Spie, 1991.<br /> [2]. Anders Eklund, Paul Dufort, Daniel Forsberg and and Stephen LaConte, "Medical<br /> Image Processing on the GP: Past, Present and," Medical Image Processing, vol.<br /> 17, no. 8, pp. 1073-1094, 2013.<br /> [3]. M. Adler, "Deflate algorithm," [Online]. Available: http://www.gzip.org.<br /> [4]. ISO/IEC JTC 1/SC 29/WG1 – Coding of Still. [Performance]. ISO/IEC JTC 1/SC<br /> 29/WG1 N6922, 2015.<br /> [5]. P. Berman,M. Karpinsk and Y. Nekrich, "Approximating Huffman Codes in<br /> Parallel," Journal of Discrete Algorithms, Vols. Vol. 5, no. 3, pp. 479-490, 2007.<br /> [6]. M. B. a. W. Plandowski, "Guaranteed Synchronization of Huffman Codes with<br /> Known Position of Decoder," Proceedings of Data Compression Conference, pp. 33-<br /> 42, 2009.<br /> [7]. L.Y. Liu, J.F. Wang, R.J. Wang and J.Y. Lee, "Design and hardware architectures<br /> for dynamic Huffman coding," Proc. Computers and Digital Techniques, pp. 411-<br /> 418, 1995.<br /> [8]. J.S. Patrick, J.L. Sanders, L.S. DeBrunner and and V.E DeBrunner, "JPEG<br /> <br /> <br /> Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san ACMEC, 07 - 2017 87<br /> Điều khiển – Cơ điện tử - Truyền thông<br /> compression/decopmression via parallel processing," Proc. Signals,Systems and<br /> Computers, pp. 596-600, 1996..<br /> [9]. Y. Nishikawa and S. Kawahito and T. Inoue, "A Parallel Image Compression System<br /> for High-Speed Cameras," Proc. International Workshop on Imaging Systems and<br /> Techniques, pp. 53-57, 2005..<br /> [10]. S.T. Klein and Y. Wiseman, "Parallel huffman decoding with applications to jpeg<br /> files," The Computer Journal, vol. 46, p. 487–497, 2003.<br /> [11]. S. Wahl, H.A. Tantawy, Z. Wang and P. Wener and S. Si, "Exploitation of Context<br /> Classification for Parallel Pixel Coding in Jpeg-LS," Proc. IEEE International<br /> Conference on Image Processing, pp. 2001-2004, 2011.<br /> [12]. A. Balevic, "Parallel Variable-Length Encoding on GPGPUs," Proc. Parallel<br /> Processing Workshops, pp. 26-35, 2010..<br /> [13]. R.L. Cloud, M.L. Curry, H.L. Ward and A. Skjellum and P. Bangalore,<br /> "Accelerating Lossless Data Compression with GPUs," Journal of Undergraduate<br /> Research, vol. 3, pp. 26-29, 2009.<br /> [14]. I. Buck and and J. Nickolls , “NVIDIA CUDA software and GPU parallel computing<br /> architecture”, In Microprocessor Forum, 2007.<br /> [15]. Cuda, https://en.wikipedia.org/wiki/CUDA, [Online].<br /> [16]. J. D. Owens, M. Houston, D. Luebke, S. Green, J. E. Stone and a. J. C. Phillips,<br /> "GPU Computing," IEEE Proceedings, Vols. Vol. 96, No. 5, p. DOI:<br /> 10.1109/JPROC.2008.917757, May 2008.<br /> [17]. D. A. Huffman, "A Method for the Construction of Minimum Redundancy Codes,"<br /> Proceedings of the Institute of Radio Engineers, vol. 40, pp. 1098-1101, 1952.<br /> ABSTRACT<br /> ACCELERATING HUFFMAN CODING FOR IMAGE COMPRESSION ON GPU<br /> Dijkstra's algorithm executed parallel on multi-core processor is the best option,<br /> but the cost of multi-core processors is extremely expensive. GPU launch to be a<br /> new choice for the field of parallel computing. There are many research methods to<br /> build algorithm Dijkstra that allows to run on the graphics processor and give<br /> positive results in terms of time than the execution on multiple processors. In<br /> parallel the implementation phase of the algorithm on GPUs requires data copy<br /> operations from the CPU to the GPU to calculate and vice versa when returning<br /> results. It is the speed limit of the algorithm calculations. In this paper, the author<br /> would like to present parallelization method Dijkstra algorithm to execute on the<br /> GPU with the method that does not copy the data to maximize the speed calculation<br /> algorithm.<br /> Keywords: Paralell Computing, GPU, Huffman, Paralell Coding.<br /> <br /> Nhận bài ngày 12 tháng 05 năm 2017<br /> Hoàn thiện ngày 10 tháng 6 năm 2017<br /> Chấp nhận đăng ngày 20 tháng 7 năm 2017<br /> <br /> Địa chỉ: Khoa Điện Tử - Trường Đại Học Kỹ Thuật Công Nghiệp Thái Nguyên.<br /> * Email: daohuydu@tnut.edu.vn<br /> <br /> <br /> <br /> <br /> 88 Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”<br />
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2