Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 88 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
88
Dung lượng
1,75 MB
Nội dung
-i- LỜI CẢM ƠN Lời đầu tiên chúng tôi xin chân thành cảm ơn đến thầy Vũ Đình Trung đã tận tình giúp đỡ chúng tôi trong suốt thời gian nghiêncứu vừa qua, và hướng dẫn chúng tôi hoàn thành đề tài này. Chúng tôi chân thành cảm ơn quý thầy cô Khoa Công nghệ thông tin đã góp ý, và hỗ trợ chúng tôi trong suốt thời gian qua. Chúng tôi cũng xin chân thành cảm ơn người thân, bạn bè đã giúp đỡ và động viên chúng tôi trong suốt thời gian học tập cũng như trong thời gian thực hiện đề tài. Xin chân thành cảm ơn ! Biên Hòa, ngày 31 tháng 10 năm 2012 Nhóm sinhviên thực hiện Nguyễn Việt Đức - Nguyễn Nam Giang -ii- MỤC LỤC LỜI CẢM ƠN i MỤC LỤC . ii DANH MỤC CÁC TỪ VIẾT TẮT v DANH MỤC BẢNG vi DANH MỤC HÌNH vii MỞ ĐẦU .1 1. Lý do chọn đề tài 1 2. Mục tiêu 2 3. Đối tượng và phạm vi nghiêncứu 2 4. Phương pháp nghiêncứu 2 5. Bố cục đề tài .3 CHƢƠNG 1: TỔNG QUAN VỀ TÍNH TOÁNSONGSONG VÀ GPU 4 1.1. Tổng quan về tính toánsongsong 4 1.1.1. Tổng quan về tính toánsongsong .4 1.1.1.1. Lịch sử ra đời tính toánsongsong .4 1.1.1.2. Tại sao phải tính toánsongsong 5 1.1.1.3. Một số khái niệm xử lý songsong .5 1.1.2. Mô hình máy tính songsong 6 1.1.3. Mô hình lập trình songsong 11 1.1.3.1. Mô hình truyền thông điệp .12 1.1.3.2. Mô hình songsong dữ liệu .12 1.1.4. Nguyên lý thiết kế giải thuậtsongsong .13 1.1.5. Nhận thức vấn đề và chương trình có thể songsong hóa 13 -iii- 1.1.6. Phương pháp xâydựngthuậttoánsongsong 14 1.2. Tổng quan về GPU .15 1.2.1. Giới thiệu về GPU 15 1.2.2. Lịch sử phát triển của GPU 15 1.2.3. So sánh CPU và GPU 19 CHƢƠNG 2: TÌM HIỂU VỀ CUDA VÀ THUẬTTOÁNTÌM ĐƢỜNG ĐINGẮNNHẤT .21 2.1. Tìm hiểu về CUDA .21 2.1.1. Giới thiệu công nghệ CUDA .21 2.1.2. Ứng dụng của CUDA trong lĩnh vực công nghệ .23 2.1.2.1. CUDA cho ngành công nghiệp trò chơi 23 2.1.2.2. CUDA cho các ứng dụng video số 24 2.1.3. Môi trường lập trình và cơ chế hoạt động của chương trình CUDA .24 2.1.3.1. Môi trường lập trình 24 2.1.3.2. Cơ chế hoạt động một chương trình CUDA .25 2.1.4. Mô hình lập trình .26 2.1.4.1. Bộ đồng xử lý đa luồng mức cao 26 2.1.4.2. Gom lô các luồng 26 2.1.5. Mô hình bộ nhớ 28 2.1.6. Lập trình ứng dụngvớiCUDA 29 2.1.6.1. CUDA là mở rộng của ngôn ngữ lập trình C 29 2.1.6.2. Những mở rộng của CUDA so với ngôn ngữ lập trình C .30 2.1.6.3. Từ khóa phạm vi kiểu hàm .30 2.1.6.4. Từ khóa phạm vi kiểu biến .31 -iv- 2.1.6.5. Thực hiện cấu hình 32 2.1.6.6. Các biến Built-in .32 2.1.6.7. Biên dịch với NVCC .33 2.1.7. Ví dụ tính toánsongsong bằng CUDA .34 2.2. Thuậttoántìmđườngđingắnnhất .40 2.2.1. Mở đầu .40 2.2.2. Các khái niệm mở đầu .40 2.2.3. Đườngđingắnnhất xuất phát từ một đỉnh 41 2.2.3.1. Thuậttoán Dijkstra 42 2.2.3.2. Thuậttoán Ford Bellman 43 2.2.4. Đườngđingắn giữa giữa tất cả các cặp đỉnh thuậttoán Floyd .44 2.3. Tình hình nghiêncứuthuậttoánsongsongtìmđườngđingắnnhất .46 2.3.1. Tình hình nghiêncứu trên thế giới 46 2.3.2. Tình hình nghiêncứu trong nước 47 2.3.3. Một số công trình tiêu biểu 47 CHƢƠNG 3: XÂYDỰNGTHUẬTTOÁNSONGSONGTÌM ĐƢỜNG ĐINGẮNNHẤTVỚICUDA 53 3.1. Songsong hóa một số thuậttoán tuần tự tìmđườngđingắnnhất .53 3.1.1. Songsong hóa thuậttoán Dijkstra .53 3.1.2. Songsong hóa thuậttoán Ford Bellman 58 3.1.3. Songsong hóa thuậttoán Floyd .63 3.2. Kết quả chạy thử nghiệm 67 KẾT LUẬN 79 TÀI LIỆU THAM KHẢO .80 -v- DANH MỤC CÁC TỪ VIẾT TẮT API Application Programming Interface CPU Central Processing Unit CUDA Compute Unified Device Architecture DRAM Dynamic Random Access Memory GPGPU General Purpose Computing on Graphics Processing Units GPU Graphisc Processing Unit MIMD Multiple Instruction Multiple Data MISD Multiple Instruction Single Data NVCC NVIDIA C Compiler SDK Software Development Kit SIMD Single Instruction Multiple Data SISD Single Instruction Single Data -vi- DANH MỤC BẢNG Bảng 1.1: So sánh sự khác nhau giữa lập trình tuần tự và songsong .6 Bảng 1.2: Mô tả phân loại kiến trúc của Flynn .7 Bảng 3.1: Kết quả thực hiện Dijkstra 68 Bảng 3.2: Kết quả thực hiện Ford Bellman .71 Bảng 3.3: Kết quả thực hiện Floyd 75 -vii- DANH MỤC HÌNH Hình 1.1: Mô tả kiến trúc Von Neumann 4 Hình 1.2: Máy tính songsong có bộ nhớ chia sẻ 8 Hình 1.3: Máy tính songsong có bộ nhớ phân tán 8 Hình 1.4: Mô hình kiến trúc máy SISD .9 Hình 1.5: Mô hình kiến trúc máy SIMD .9 Hình 1.6: Mô hình kiến trúc máy MISD .10 Hình 1.7: Mô hình kiến trúc máy MIMD 10 Hình 1.8: Mô hình lập trình truyên thông giữa hai tác vụ trên hai máy tính .12 Hình 1.9: Mô hình lập trình songsong dữ liệu 13 Hình 1.10: So sánh kiến trúc CPU và GPU .19 Hình 1.11: So sánh floating-point của GPU và CPU 19 Hình 2.1: Kiến trúc bộ phần mềm CUDA .21 Hình 2.2: Các thao tác thu hồi và cấp phát bộ nhớ 22 Hình 2.3: Vùng nhớ dùng chung mang dữ liệu gần ALU .23 Hình 2.4: Sơ đồ hoạt động truyền dữ liệu giữa Host và Device 25 Hình 2.5: Khối luồng .27 Hình 2.6: Mô hình bộ nhớ trên GPU .28 Hình 2.7: Chiều của lưới và khối với chỉ số khối và luồng .33 Hình 2.8: Phương pháp đánh chỉ số luồng 36 Hình 2.9: Cộng hai ma trận .37 Hình 2.10: Cơ chế hai chiều của block và thread 38 Hình 2.11: Ánh xạ threads đến vertexs 51 Hình 3.1: Đồ thị biểu diễn thời gian chạy Dijkstra .69 Hình 3.2: Kết quả chạy thử nghiệm 15 nghìn đỉnh dùng Dijkstra tuần tự 69 Hình 3.3: Kết quả chạy thử nghiệm 15 nghìn đỉnh dùng Dijkstra CUDA 70 Hình 3.4: Đồ thị biểu diễn thời gian chạy Ford Bellman 72 Hình 3.5: Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman tuần tự .72 Hình 3.6: Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman CUDA 1D .73 -viii- Hình 3.7: Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman CUDA 2D .73 Hình 3.8: Đồ thị biểu diễn thời gian chạy Floyd .76 Hình 3.9: Kết quả chạy thử nghiệm 3 nghìn 5 trăm đỉnh dùng Floyd tuần tự 76 Hình 3.10: Kết quả chạy thử nghiệm 3 nghìn 5 trăm đỉnh dùng Floyd CUDA 1D 77 Hình 3.11: Kết quả chạy thử nghiệm 3 nghìn 5 trăm đỉnh dùng Floyd CUDA 2D 77 -1- MỞ ĐẦU Nhu cầu tính toán trong lĩnh vực khoa học, công nghệ ngày càng cao và trở thành một thách thức lớn. Từ đó các giải pháp nhằm tăng tốc độ tính toán đã được ra đời, từ năm 2001 đến năm 2003 tốc độ của Pentium 4 đă tăng gấp đôi từ 1.5GHz lên đến 3GHz. Tuy nhiên hiệu năng của CPU (Central Processing Unit) không tăng tương xứng như mức gia tăng xung của CPU và việc gia tăng tốc độ xung của CPU nhanh chóng chạm phải ngưỡng tối đa mà cụ thể trong khoảng thời gian 2 năm từ năm 2003 đến năm 2005 tốc độ của CPU chỉ tăng từ 3GHz lên 3.8GHz. Trong quá trình tăng tốc độ xung của CPU các nhà sản xuất đã gặp phải vấn đề về nhiệt độ của CPU sẽ quá cao và các giải pháp tản nhiệt khi đã đến mức tới hạn không thể đáp ứng được khả năng làm mát khi CPU hoạt động ở xung quá cao như vậy. Vì vậy việc gia tăng xung hoạt động của CPU không sớm thì muộn cũng sẽ đi vào bế tắc. Trước tình hình này, các nhà nghiêncứu vi xử lý đã chuyển hướng sang phát triển công nghệ đa lõi, nhiều lõi, với cơ chế xử lý songsong trong các máy tính nhằm tăng hiệu năng và tiết kiệm năng lượng. Một trong các công nghệ xử lý songsong ra đời đó là GPU (Graphics Processing Unit - bộ xử lý đồ họa). Ban đầu, việc chế tạo GPU chỉ với những mục đích công việc phù hợp với khả năng là tăng tốc độ xử lý đồ họa, cũng như trong ngành trò chơi là chủ yếu. Nhưng đến thời điểm GPU NV30 của NVIDIA ra đời, GPU bắt đầu tham gia vào những công việc khác ngoài đồ họa như: Hỗ trợ tính toán dấu chấm động đơn, hỗ trợ tính toán lên cả ngàn lệnh. Vì thế đã nảy sinh ra ý tưởng dùng GPU để xử lý, tính toánsongsong những chương trình không thuộc đồ họa. 1. Lý do chọn đề tài Câu hỏi được đặt ra là làm thế nào để ứng dụng GPU vào việc xử lý tính toánsong song? Câu hỏi này nhanh chóng được giải quyết bằng công nghệ CUDA (Compute Unified Device Architecture – kiến trúc thiết bị hợp nhất cho tính toán) của NVIDIA ra đời năm 2007. Với CUDA, các lập trình viên nhanh chóng phát triển các ứng dụngsongsong trong rất nhiều lĩnh vực khác nhau như: Điện toán hóa học, sắp xếp, tìm kiếm, mô phỏng các mô hình vật lý, chuẩn đoán y khoa, thăm dò dầu khí,… CUDA là bộ công cụ -2- phát triển phần mềm trên GPU được xâydựng bằng ngôn ngữ lập trình C. VớiCUDA các lập trình viêndùng để điều khiển GPU để xử lý, tính toánsongsong các dữ liệu lớn. Xuất phát từ nhu cầu trên nhóm tác giả chọn đề tài: ”Xây dựngthuậttoánsongsongtìmđườngđingắnnhấtvới CUDA”. 2. Mục tiêu Songsong hóa một số thuậttoántìmđườngđingắnnhấtvới CUDA, từ đó có được sự đánh giá và so sánh với các thuậttoán tuần tự tìmđườngđingắn nhất. 3. Đối tƣợng và phạm vi nghiêncứu Đối tƣợng nghiêncứu Để hoàn thành mục đích ý tưởng đề ra cần nghiêncứu các nội dung như sau: Tìm hiểu về lý thuyết tính toánsong song. Lý thuyết CUDA. Tìm hiểu một số thuậttoántìmđườngđingắn nhất. Từ đó xâydựngthuậttoánsongsongtìmđườngđingắnnhấtvới CUDA. Phạm vi nghiêncứuNghiêncứu chuyển đổi một số thuậttoán tuần tự tìmđườngđingắnnhất sang songsong sử dụng CUDA. 4. Phƣơng pháp nghiêncứu Đề tài này sẽ áp dụng hai phương pháp nghiên cứu, đó là: Phƣơng pháp nghiêncứu lý thuyết Đọc một số tài liệu về lý thuyết tính toánsong song, lý thuyết CUDA, một số thuậttoán tuần tự tìmđườngđingắn nhất. Trích lọc ra một số lý thuyết có liên quan đến đề tài đang thực hiện để áp dụng vào làm cơ sở nghiên cứu. Vận dụng những lý thuyết tìm hiểu được để phục vụ cho việc songsong hóa một số thuậttoán tuần tự tìmđườngđingắn nhất.