a. Đánh giá kết quả song song các vòng lặp
Khi kích thƣớc vòng lặp lớn (N=DATA_SIZE), khả năng tính toán của GPU nhanh hơn CPU. Khi DATA_SIZE tăng từ 1 M đến 32 M (1 M = 1 * 1024 * 1024), kết quả thu đƣợc đƣợc minh họa bằng bảng sau:
Hình 16: So sánh thời gian thực hiên tính toán trên GPU-CPU
Trong đó:
- GPU Time: Thời gian thực hiện mã CUDA
- CPU Time: Thời gian thực hiện vòng lặp trên CPU - GPU thrust: Thời gian thực hiện mã CUDA với thrust - CPU thrust: Thời gian thực hiện mã CPU với thrust
- CPU '': Thời gian thực hiện vòng lặp dựa trên thrust::host_vector Minh họa bằng biểu đồ:
0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 1 2 4 8 16 32 GPU Time CPU Time GPU Thrust Data size (M) Code execution time
(s)
Hình 17: Biểu đồ thời gian thực hiên tính toán trên GPU-CPU
0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 1 2 4 8 16 32
GPU Time CPU Time
Code execution time (s)
Data size (M)
Hình 18: Biểu đồ hình cột so sánh thời gian thực hiên tính toán trên GPU-CPU
Việc tăng tốc của GPU với CPU là hiển nhiên khi DATA_SIZE lớn hơn 4M. Thực tế với kích thƣớc dữ liệu lớn hơn, có thể đạt đƣợc hiệu suất tăng tốc tốt hơn nhiều. Điều thú vị là, trong miền này, chi phí của việc sử dụng Thrust là khá nhỏ, thậm chí có thể bỏ qua. Tuy nhiên, không nên sử dụng Thrust trên CPU
(thrust:: transform_reduce hay thrust:: host_vector), thay vào đó nên dùng mảng, vòng lặp thông thƣờng.
Từ những con số so sánh, có thể thấy rằng rằng việc áp dụng Thrust không chỉ đơn giản hóa các mã của tính toán CUDA, mà còn đền bù sự mất hiệu quả khi DATA_SIZE tƣơng đối nhỏ. Do đó, việc dùng thƣ viên Thrust đƣợc khuyến khích mạnh mẽ.
b. Đánh giá tổng thể song song phần training
Luận văn tiến hành thực nghiệm công cụ CRF++ đã đƣợc song song hóa trên tập dữ liệu nhận dạng thực thể tên của CoNLL 2000-shared task [29, 30]. Trong tập dữ liệu này có 14 loại nhãn Y={ B-NP, B-PP, B-VP, B-SBAR, B- ADJP, B-ADVP, I-NP, I-VP, I-ADVP,…, O}; có 2437245 thuộc tính và có 8936 câu. Đây là tập dữ liệu lớn, phù hợp cho việc kiểm thử tốc độ song song và không song song.
Hình 19: Tập dữ liệu CoNLL 2000-shared task
Trong tập dữ liệu này, mỗi tocken có ba cột. Cột 1 là từ (Confidence), cột 2 là từ loại (NN), và cột 3 (B-NP) là tag trả lời thể hiện ở định dạng IOB2.
Kết quả đƣợc minh họa bằng bảng sau:
STT Dữ liệu Số lần lặp Thời gian thực hiện trên Thrust (giờ) Thời gian thực hiện trên GPU – Thrust (giờ) Thời gian thực hiện trên CPU (giờ) 1 CoNLL 2000- shared task 2 0.2325 0.1888 0.4722 Confidence NN B-NP in IN B-PP the DT B-NP pound NN I-NP is VBZ B-VP widely RB I-VP expected VBN I-VP to TO I-VP take VB I-VP another DT B-NP sharp JJ I-NP dive NN I-NP if IN B-SBAR trade NN B-NP figures NNS I-NP for IN B-PP September NNP B-NP
2 CoNLL 2000- shared task 5 0.2874 0.256 0.5689 3 CoNLL 2000- shared task 10 0.3508 0.3142 0.6547 4 CoNLL 2000- shared task 20 0.5284 0.4702 0.9405 5 CoNLL 2000- shared task 10.000 1.6358 1.4596 2.6539
Bảng 1: Bảng so sánh kết quả giữa CPU và GPU trong thực nghiệm
0 0.5 1 1.5 2 2.5 3 2 5 10 20 10000 Thrust GPU CPU Time (h) maxiter
Hình 20: So sánh thời gian thực hiện phần training
Kết quả thực nghiệm (với dữ liệu CoNLL 2000-shared task) cho thấy rằng, phần training sẽ dừng khi số vòng lặp là 1097 (iter=1097).
Với kết quả thực nghiệm trên, có thể kết luận rằng việc song song sử dụng GPU làm giảm thời gian thực hiện phần training khoảng gần 50%. Kết quả này chƣa cao lắm so với khả năng song song của GPU. Lý do, do đặc thù của công cụ CRF++ đƣợc viết hoàn toàn bằng C++, việc chuyển đổi sang C để tiến hành song song toàn phần là vô cùng khó khăn. Kết quả song song dùng Thrust và dùng CUDA kết hợp Thrust không khác biệt nhau nhiều, lý do khi dùng CUDA, cần tạo ra nhiều mảng trung gian trong quá trình tính toán. Quá trình tính toán các mảng trung gian này làm giảm hiệu quả của CUDA.
KẾT LUẬN
Luận văn bao gồm phần nghiên cứu tổng quan và phần thực hành công nghệ, cụ thể gồm 4 nội dung nhƣ sau:
1) Nghiên cứu tìm hiểu mục đích của lập trình song song, những khó khăn của lập trình song song truyền thống.
2) Nghiên cứu tìm hiểu mô hình lập trình song song trên nền đơn vị xử lý đồ họa.
3) Nghiên cứu tìm hiểu mô hình CRF lý thuyết, và phƣơng pháp ƣớc lƣợng tham số của mô hình này.
4) Nghiên cứu tìm hiểu công cụ CRF++, cách thức thực thi của công cụ này.
Các kết qủa quan trọng thực hiện đƣợc bao gồm:
Đề xuất giải pháp song song công cụ CRF++ sử dụng GPU
Đã thử nghiệm thành công song song hóa một số phần trong CRF++ phiên bản 0.54 bằng CUDA 3.1, Thrust 1.3.0 trên nVidia Gefore 210. Với khả năng hạn chế về trình độ chuyên môn cũng nhƣ thời gian ngắn để thực hiện Đề tài mang tính thời sự về ứng dụng GPU để song song một công cụ quan trọng CRF++, mới về công nghệ trên môi trƣờng GPU và hạn chế của CUDA với ngôn ngữ C++, kết quả trình bày trong luận văn này chỉ là bƣớc đầu, cần phải tiếp tục đƣợc hoàn thiện hơn nữa trong thời gian tới.
Định hƣớng ứng dụng thực tiễn của GPU vào công việc thực tế:
- Ứng dụng xây dựng phân hệ Xử lý tín hiệu (MitiTracking) của hệ thống Gám sát hành trình [31]. Mục đích của phân hệ này là đón nhận, xử lý tín hiệu từ các thiết bị giám sát đƣợc lắp đặt trong xe các ôtô. Thông thƣờng cứ 10 giây, thiết bị sẽ gửi thông tin (vị trí, vận tốc, nhiên liệu, v.v…) về bộ phận tiếp nhận. Khi số lƣợng thiết bị lớn (lên đến hàng ngàn), thì vấn đề xử lý song song tín hiệu là cần thiết, để đảm báo tính thời gian thực của toàn bộ hệ thống.
TÀI LIỆU THAM KHẢO
Tiếng Việt
1. Hà Quang Thụy, Phan Xuân Hiếu, Đoàn Sơn, Nguyễn Trí Thành, Nguyễn Thu Trang, Nguyễn Cẩm Tú (2009), Giáo trình khai phá dữ liệu web, Nhà xuất bản Giáo dục Việt Nam. tr. 260-267.
Tiếng Anh
2. NVIDIA Corporation (2010),NVIDIA CUDA C Programming Guide Version 3.1, NVIDIA Corporation 2701 San Tomas Expressway Santa Clara, CA 95050:
http://developer.download.nvidia.com/compute/cuda/3_1/toolkit/docs/NVID IA_CUDA_C_ProgrammingGuide_3.1.pdf
3. NVIDIA Corporation (2010),NVIDIA CUDA C Best Practices Guide Version 3.1, NVIDIA Corporation 2701 San Tomas Expressway Santa Clara, CA 95050:
http://developer.download.nvidia.com/compute/cuda/3_1/toolkit/docs/NVID IA_CUDA_C_BestPracticesGuide_3.1.pdf
4. NVIDIA Corporation (2010), NVIDIA CUDA Reference Manual Version 3.1, NVIDIA Corporation 2701 San Tomas Expressway Santa Clara, CA 95050:
http://developer.download.nvidia.com/compute/cuda/3_1/toolkit/docs/Cuda ReferenceManual.pdf
5. Jason Sanders, Edward Kandrot (2010), CUDA by example : an introduction to general-purpose GPU programming, Addision Wesley.
6. John Lafferty, Andrew McCallum, Fernando Pereira (2001), Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data, Proceedinhs of ICML-2001.
7. Graphics processing unit:
http://en.wikipedia.org/wiki/Graphics_processing_unit
8. 3dfx Interactive: http://en.wikipedia.org/wiki/3dfx_Interactive 9. CRF++: Yet Another CRF toolkit: http://crfpp.sourceforge.net/ 10. Thrust: http://code.google.com/p/thrust/
11. Jared Hoberock, Nathan Bell, An Introduction To Thrust, NVIDIA Research:
12. Neil Matthew, Richard Stones (2004), Beginning LinuxProgramming Third Edition, Wiley Publishing, Inc.
13. Mark Mitchell, Jeffrey Oldham, Alex Samuel (2001), Advanced Linux Programming, New Riders Publishing.
14. David B. Kirk and Wen-mei W. Hwu (2010), Programming Massively Parallel Processors: A Hands-on Approach, Elsevier Inc.
15. Hubert Nguyen (2007), GPU Gems 3, Addison Wesley Professional 16. Taku Kudo:http://chasen.org/~taku/index.html.en
17. Pinto, D., McCallum, A. Wei, X., and Croft, W. B. (2003). Table extraction using conditional random fields, Proceedings of the 26th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval (ACM SIGIR 2003)
18. Kristjansson, T., Culotta, A., Viola, P., and McCallum (2004). A. Interactive information extraction with constrained conditional random fields, Proceedings of the 19th National Conference on Artificial Intelligence
(AAAI-2004).
19.Taku Kudo, Kaoru Yamamoto, Yuji Matsumoto, Applying Conditional Random Fields to Japanese Morphological Analysis
20. Wayne Wood, (2010). A Brief Test on the Code Efficiency of CUDA and Thrust: http://www.codeproject.com/KB/Parallel_Programming/test-on- thrust-efficiency.aspx
21. Message Passing Interface: http://vi.wikipedia.org/wiki/MPI 22. Parallel Virtual Machine:
http://en.wikipedia.org/wiki/Parallel_Virtual_Machine
23. Open Multi-Processing:http://en.wikipedia.org/wiki/OpenMP
24. POSIX Threads Programming:https://computing.llnl.gov/tutorials/pthreads/ 25. McCallum, A. and Li, W. (2003). Early results for named entity recognition
with conditional random fields: feature induction and Web-enhanced lexicons, Proceedings of the 7th Conference of the Natural Language Learning (CoNLL 2003).
26. Fuchun Peng, Andrew McCallum (1998), Accurate information extraction from research papers using conditional random fields, Proceedings of Human Language Technology Conference and North American Chapter of the Association for Computational Linguistics (HLT-NAACL), 2004.
27. Yejin Choi, Claire Cardie, Ellen Riloff and Siddharth Patwardhan, Identifying Sources of Opinions with Conditional Random Fields and Extraction Patterns, Proceedings of HLT/EMNLP 2005.
28. Zhu, J., Nie, Z., Wen, J. R., Zhang, B., and Ma, W. Y. (2005). 2D
conditional random fields for Web information extraction, Proceeding of the 22nd International Conference on Machine Learning (ICML), 2005.
29. Erik F. Tjong Kim Sang and Sabine Buchholz. 2000. Intro-duction to the CoNLL-2000 shared task: Chunking. In Proceedings of CoNLL-2000 and LLL-2000, pages 127–132, Lisbon, Portugal.
30. Chunking: http://www.cnts.ua.ac.be/conll2000/chunking/ 31. Supervise itinerary: http://giamsathanhtrinh.vn/