Tải bản đầy đủ (.pdf) (9 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (697.33 KB, 9 trang )

Điều khiển – Cơ điện tử - Truyền thông

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

80

Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”


Nghiên cứu khoa học công nghệ

ả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ộ 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.

84

Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”


Nghiên cứu khoa học công nghệ

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

Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san ACMEC, 07 - 2017

85


Điều khiển – Cơ điện tử - Truyền thông

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
Intel(R)Xeon(R)CPUE3NVIDIA Quadro 600, 96 Cores,
Phần cứng
@3.3Ghz
GPU Memory Specs: 1 GB DDR3,
4 Core, 7GB Ram
MaxThreadsPerBlock: 1024
Windows
10,
64-bit Windows 10, 64-bit Operating System
Phần mềm
Operating System. Matlab Matlab R2014c
R2014a
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 4. VietNamFlag.

Hình 3. Flowers.
Cơ sở dữ liệu ảnh như sau:

Bảng 1. Các thông số dữ liệu ảnh.
Tên ảnh
VietNamFlag
Flowers

Dung lượng
5,8MB
24,7MB

Kích thước
3000x4496
3920x2205

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 CPU 1,5027
27,337
mã hóa(s) GPU 2,170
4,614

86

Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”


Nghiên cứu khoa học công nghệ

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. 3342, 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. 411418, 1995.
[8]. J.S. Patrick, J.L. Sanders, L.S. DeBrunner and and V.E DeBrunner, "JPEG

Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san ACMEC, 07 - 2017

87


Điều khiển – Cơ điện tử - Truyền thông

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, [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ỉ:

88

Khoa Điện Tử - Trường Đại Học Kỹ Thuật Công Nghiệp Thái Nguyên.
* Email:

Đào Huy Du, “Tăng tốc độ giải thuật mã hóa Huffman cho nén ảnh số bằng GPU.”



×