1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên

88 1K 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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ên cứ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 sinh viê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ên cứu 2 4. Phương pháp nghiên cứu 2 5. Bố cục đề tài .3 CHƢƠNG 1: TỔNG QUAN VỀ TÍNH TOÁN SONG SONG VÀ GPU 4 1.1. Tổng quan về tính toán song song 4 1.1.1. Tổng quan về tính toán song song .4 1.1.1.1. Lịch sử ra đời tính toán song song .4 1.1.1.2. Tại sao phải tính toán song song 5 1.1.1.3. Một số khái niệm xử lý song song .5 1.1.2. Mô hình máy tính song song 6 1.1.3. Mô hình lập trình song song 11 1.1.3.1. Mô hình truyền thông điệp .12 1.1.3.2. Mô hình song song dữ liệu .12 1.1.4. Nguyên lý thiết kế giải thuật song song .13 1.1.5. Nhận thức vấn đề và chương trình có thể song song hóa 13 -iii- 1.1.6. Phương pháp xây dựng thuật toán song song 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Ề CUDATHUẬT TOÁN TÌM ĐƢỜNG ĐI NGẮN NHẤ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ụng với CUDA 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án song song bằng CUDA .34 2.2. Thuật toán tìm đường đi ngắn nhất .40 2.2.1. Mở đầu .40 2.2.2. Các khái niệm mở đầu .40 2.2.3. Đường đi ngắn nhất xuất phát từ một đỉnh 41 2.2.3.1. Thuật toán Dijkstra 42 2.2.3.2. Thuật toán Ford Bellman 43 2.2.4. Đường đi ngắn giữa giữa tất cả các cặp đỉnh thuật toán Floyd .44 2.3. Tình hình nghiên cứu thuật toán song song tìm đường đi ngắn nhất .46 2.3.1. Tình hình nghiên cứu trên thế giới 46 2.3.2. Tình hình nghiên cứu trong nước 47 2.3.3. Một số công trình tiêu biểu 47 CHƢƠNG 3: XÂY DỰNG THUẬT TOÁN SONG SONG TÌM ĐƢỜNG ĐI NGẮN NHẤT VỚI CUDA 53 3.1. Song song hóa một số thuật toán tuần tự tìm đường đi ngắn nhất .53 3.1.1. Song song hóa thuật toán Dijkstra .53 3.1.2. Song song hóa thuật toán Ford Bellman 58 3.1.3. Song song hóa thuật toá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à song song .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 song song có bộ nhớ chia sẻ 8 Hình 1.3: Máy tính song song 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 song song 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ên cứ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ý song song 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ý song song 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án song song 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án song 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ụng song song 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ây dựng bằng ngôn ngữ lập trình C. Với CUDA các lập trình viên dùng để điều khiển GPU để xử lý, tính toán song song 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ựng thuật toán song song tìm đường đi ngắn nhất với CUDA”. 2. Mục tiêu Song song hóa một số thuật toán tìm đường đi ngắn nhất với CUDA, từ đó có được sự đánh giá và so sánh với các thuật toán tuần tự tìm đường đi ngắn nhất. 3. Đối tƣợng và phạm vi nghiên cứu Đối tƣợng nghiên cứu Để hoàn thành mục đích ý tưởng đề ra cần nghiên cứu các nội dung như sau:  Tìm hiểu về lý thuyết tính toán song song.  Lý thuyết CUDA.  Tìm hiểu một số thuật toán tìm đường đi ngắn nhất.  Từ đó xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA. Phạm vi nghiên cứu Nghiên cứu chuyển đổi một số thuật toán tuần tự tìm đường đi ngắn nhất sang song song sử dụng CUDA. 4. Phƣơng pháp nghiên cứu Đề tài này sẽ áp dụng hai phương pháp nghiên cứu, đó là: Phƣơng pháp nghiên cứu lý thuyết  Đọc một số tài liệu về lý thuyết tính toán song song, lý thuyết CUDA, một số thuật toán tuần tự tìm đường đi ngắ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 song song hóa một số thuật toán tuần tự tìm đường đi ngắn nhất.

Ngày đăng: 18/12/2013, 14:46

HÌNH ẢNH LIÊN QUAN

Bảng 1.1: So sánh sự khác nhau giữa lập trình tuần tự và song song - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Bảng 1.1 So sánh sự khác nhau giữa lập trình tuần tự và song song (Trang 14)
Bảng 1.2: Mô tả phân loại kiến trúc của Flynn - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Bảng 1.2 Mô tả phân loại kiến trúc của Flynn (Trang 15)
Hình 1.2: Máy tính song song có bộ nhớ chia sẻ - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 1.2 Máy tính song song có bộ nhớ chia sẻ (Trang 16)
Hình 1.3: Máy tính song song có bộ nhớ phân tán - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 1.3 Máy tính song song có bộ nhớ phân tán (Trang 16)
Hình 1.5: Mô hình kiến trúc máy SIMD - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 1.5 Mô hình kiến trúc máy SIMD (Trang 17)
Hình 1.4: Mô hình kiến trúc máy SISD - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 1.4 Mô hình kiến trúc máy SISD (Trang 17)
Hình 1.7: Mô hình kiến trúc máy MIMD - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 1.7 Mô hình kiến trúc máy MIMD (Trang 18)
Hình 1.6: Mô hình kiến trúc máy MISD - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 1.6 Mô hình kiến trúc máy MISD (Trang 18)
Hình 1.9: Mô hình lập trình song song dữ liệu - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 1.9 Mô hình lập trình song song dữ liệu (Trang 21)
Bộ phần mềm CUDA có các lớp mô tả trong Hình 2.1, gồm: Bộ điều khiển (dirver) cho phần cứng, API lập trình, môi trường thực thi và hai thư viện toán học mức cao hơn  của các hàm thường dùng: CUFFT  và CUBLAS - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
ph ần mềm CUDA có các lớp mô tả trong Hình 2.1, gồm: Bộ điều khiển (dirver) cho phần cứng, API lập trình, môi trường thực thi và hai thư viện toán học mức cao hơn của các hàm thường dùng: CUFFT và CUBLAS (Trang 29)
Hình 2.2: Các thao tác thu hồi và cấp phát bộ nhớ - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 2.2 Các thao tác thu hồi và cấp phát bộ nhớ (Trang 30)
Hình 2.3: Vùng nhớ dùng chung mang dữ liệu gần ALU - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 2.3 Vùng nhớ dùng chung mang dữ liệu gần ALU (Trang 31)
Để hiểu cách hoạt động một chương trình CUDA (xem Hình 2.4), cần thống nhất một số các khái niệm sau:  - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
hi ểu cách hoạt động một chương trình CUDA (xem Hình 2.4), cần thống nhất một số các khái niệm sau: (Trang 33)
Hình 2.5: Khối luồng - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 2.5 Khối luồng (Trang 35)
2.1.5. Mô hình bộ nhớ - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
2.1.5. Mô hình bộ nhớ (Trang 36)
Hình 2.7: Chiều của lưới và khối với chỉ số khối và luồng - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 2.7 Chiều của lưới và khối với chỉ số khối và luồng (Trang 41)
Hình 2.9: Cộng hai ma trận - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 2.9 Cộng hai ma trận (Trang 45)
Hình 2.10: Cơ chế hai chiều của block và thread -Code song song sẽ như sau:  - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 2.10 Cơ chế hai chiều của block và thread -Code song song sẽ như sau: (Trang 46)
Hình 3.1: Đồ thị biểu diễn thời gian chạy Dijkstra - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.1 Đồ thị biểu diễn thời gian chạy Dijkstra (Trang 77)
Hình 3.2: Kết quả chạy thử nghiệm 15 nghìn đỉnh dùng Dijkstra tuần tự0 - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.2 Kết quả chạy thử nghiệm 15 nghìn đỉnh dùng Dijkstra tuần tự0 (Trang 77)
Hình 3.3: Kết quả chạy thử nghiệm 15 nghìn đỉnh dùng Dijkstra CUDA - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.3 Kết quả chạy thử nghiệm 15 nghìn đỉnh dùng Dijkstra CUDA (Trang 78)
Bảng 3.2: Kết quả thực hiện Ford Bellman - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Bảng 3.2 Kết quả thực hiện Ford Bellman (Trang 79)
Hình 3.5: Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman tuần tự0 - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.5 Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman tuần tự0 (Trang 80)
Hình 3.4: Đồ thị biểu diễn thời gian chạy Ford Bellman - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.4 Đồ thị biểu diễn thời gian chạy Ford Bellman (Trang 80)
Hình 3.6: Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman CUDA 1D - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.6 Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman CUDA 1D (Trang 81)
Hình 3.7: Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman CUDA 2D - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.7 Kết quả chạy thử nghiệm 11 nghìn đỉnh dùng Ford Bellman CUDA 2D (Trang 81)
Hình 3.8: Đồ thị biểu diễn thời gian chạy Floyd - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.8 Đồ thị biểu diễn thời gian chạy Floyd (Trang 84)
Hình 3.9: Kết quả chạy thử nghiệ m3 nghìn 5 trăm đỉnh dùng Floyd tuần tự - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.9 Kết quả chạy thử nghiệ m3 nghìn 5 trăm đỉnh dùng Floyd tuần tự (Trang 84)
Hình 3.11: Kết quả chạy thử nghiệ m3 nghìn 5 trăm đỉnh dùng Floyd CUDA 2D - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.11 Kết quả chạy thử nghiệ m3 nghìn 5 trăm đỉnh dùng Floyd CUDA 2D (Trang 85)
Hình 3.10: Kết quả chạy thử nghiệ m3 nghìn 5 trăm đỉnh dùng Floyd CUDA 1D - Xây dựng thuật toán song song tìm đường đi ngắn nhất với CUDA báo cáo nghiên cứu khoa học sinh viên
Hình 3.10 Kết quả chạy thử nghiệ m3 nghìn 5 trăm đỉnh dùng Floyd CUDA 1D (Trang 85)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN