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

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

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ẽ

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

đượ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

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

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

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. Việc thực thi

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

hỗ trợ xử lý song song của MatLab, đồng thời, đưa ra kết quả để so sánh hiệu suất

giữa việc mã hóa có sử dụng và không sử dụng GPU.

pdf 9 trang phuongnguyen 8480
Bạn đang xem tài liệu "Tăng tốc độ giải thuật mã hóa huffman cho nén ảnh số bằng GPU", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Tăng tốc độ giải thuật mã hóa huffman cho nén ảnh số bằng GPU

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

File đính kèm:

  • pdftang_toc_do_giai_thuat_ma_hoa_huffman_cho_nen_anh_so_bang_gp.pdf