Áp dụng tính toán song song vào giải quyết bài toán tìm đi ngắn nhất xuất phát từ một đỉnh sử dụng giải thuật dijkstra

13 665 7
Áp dụng tính toán song song vào giải quyết bài toán tìm đi ngắn nhất xuất phát từ một đỉnh sử dụng giải thuật dijkstra

Đ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

Áp dụng tính toán song song vào giải quyết bài toán tìm đi ngắn nhất xuất phát từ một đỉnh sử dụng giải thuật dijkstra

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG    Bài tập lớn Lập trình song song Đề tài : Áp dụng tính toán song song vào giải toán tìm ngắn xuất phát từ đỉnh sử dụng giải thuật Dijkstra Giảng viên hướng dẫn : Ths Nguyễn Tiến Dũng Nhóm Lớp : Hệ Thống Thông Tin K53 Hà Nội tháng 11/2011 Mục lục Tổng quan mô hình lập trình song song OpenMP 1- Giới thiệu mô hình OpenMP 2- Mô hình lập trình song song OpenMP 3- Một số thị OpenMP 4- Một số mệnh đề thường gặp OpenMP 5- Thư viện biến môi trường Bài toán tìm đường ngắn 1- Các khái niệm mở đầu 2- Bài toán đường ngắn xuất phát từ đỉnh Giải thuật Dijkstra 1- Thuật toán Dijkstra 2- Tính đắn thuật toán Dijkstra 3- Độ phức tạp thuật toán Dijkstra I- II- III- Kết thực nghiệm 1- Cài đặt lập trình 2- Cài đặt lập trình song song 3- Kết luận IV- I- Tổng quan mô hình lập trình song song OpenMP 1- Giới thiệu mô hình OpenMP a- OpenMP gì? Theo Wikipedia: OpenMP- Open Multi-Processing giao diện lập trình ứng dụng API (Application programming interface) hỗ trợ đa tảng dựa cấu trúc chia sẻ nhớ chung, đa ngôn ngữ lập trình C, C++, Fortran hầu hết kiến trúc vi xử lý hệ điều hành Linux, Unix, Mac OS X, tảng Microsoft Windows Nó bao gồm : • Các thị biên dịch (Compiler directives) • Các thư viện Runtime (Library rountines) • Các biến môi trường (Environment variables) b- Lịch sử OpenMP OpenMP Architecture Review Board(ARB) công bố giao diện lập trình ứng dụng đầu tiên, phiên 1.0 đời vào tháng 10 năm 1997 cho Fortran Tháng 10 năm sau phiên cho C/C++ Năm 2000 phiên 2.0 cho Fortran năm 2002 phiên 2.0 cho C/C++ Năm 2005 phiên 2.5 cho C/C++/Fortran đời Tháng 5-2008 phiên 3.0 đời bao gồm thêm nhiều tính khái niệm task nhiện vụ task 2- Mô hình lập trình song song OpenMP OpenMP sử dụng mô hình Fork-Join để thực thi song song Trong mô hình tất chương trình song song bắt đầu với việc xử lý đơn luồng chủ (master thread) Luồng chủ thực thi cách bắt gặp vùng song song (parallel region) FORK: Có nghĩa luồng chủ sau tạo tập luồng song song Và sau đoạn mã vùng song song thực thi song song tập luồng song song vừa tạo JOIN: Khi mà tập luồng song song hoàn thành đoạn mã vùng song song chúng đồng kết thúc sau công việc lại thực luồngchủ 3- Một số thị OpenMP 3.1 Khuôn dạng thị Chỉ thị OpenMP cho dạng sau # pragma omp directive-name [clause ] newline • # pragma omp: Yêu cầu bắt buộc thị OpenMP C/C++ • directive-name: Là tên thị phải xuất sau #pragma omp đứng trước mệnh đề • [clause ]: Các mệnh đề không bắt buộc thị • newline : Yêu cầu bắt buộc với thị tập mã lệnh nằm khối cấu trúc bao bọc thị Ví dụ: #pragma omp parallel default ( shared ) private (beta,pi) 3.2 Phạm vi thị: • Phạm vi tĩnh ( Static Extent ) Đó đoạn mã nguyên phạm vi từ đầu đến cuối khối cấu trúc cho sau thị Phạm vi tĩnh thị không mở rộng đến thủ tục tệp chứa mã • Chỉ thị đơn độc (Orphaned Directive) Chỉ thị đơn độc thị xuất độc lập với thị khác Nó tồn phạm vi tĩnh thị khác Chỉ thị đơn độc mở rộng với thử tục tệp mã nguồn • Phạm vi động (Dynamic Extent) Phạm vi động thị bao gồm phạm vi tĩnh của thị phạm vi thị mồ côi OpenMP có nhiều thị như: atomic, barrier, critical, flush, for, master, ordered, parallel, section, single, threadprivate Các cấu trúc thường gặp : • Cấu trúc chia sẻ • Cấu trúc đồng Trong phạm vi tập lớn em xin trình bày thị dùng: 3.3 Cấu trúc chia sẻ 3.3.1 Chỉ thị do/for • Mệnh đề schedule #pragma omp for schedule(static,t) T= so dinh cua thi / so luong For(i=1;i=0 u,v thuộc V Đầu : Khoảng cách từ s đến đỉnh lại d[v], v thuộc V Truoc[v] ghi nhận đỉnh trước v đường ngắn từ s đến v *) Begin (* khởi tạo *) For v Begin D[v]= c[s,v]; Truoc[v]=s; End D[s]=0 ; T= V\{s} (* T tập đỉnh có nhãn tạm thời *) (* bước lặp *) While (T Begin Tìm đỉnh u T thỏa mãn d[u]= min{ d[z]: z T}; T= T\{u}; (* cố định nhãn u *) For v (* Gán lại nhãn cho đỉnh T*) If( d[v]>d[u]+a[u,v] ) Begin d[v]=d[u]+a[u,v]; truoc[v]=u; 10 end; end; end; Ví dụ : Ma trận trọng số 1 ∞ ∞ ∞ ∞ A= ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ Bảng kết tính toán theo thuật toán Dijkstra : Quy ước viết hai thành phần nhãn theo thứ tự d[v] truoc[v] Bước lặp Khởi tạo 2- Đỉnh 0.1 - Đỉnh 1,1* - Đỉnh ∞,1 6,2 4,4* - Đỉnh ∞,1 3.2* - Đỉnh ∞,1 ∞,1 7,4 7,4 6,6* - Đỉnh ∞,1 8,2 8.2 5,3* - Tính đắn giải thuật Dijkstra Trước hết ta chứng minh thuật toán tìm đường ngắn từ đỉnh s đến đỉnh lại đồ thị Giả sử bước lặp nhãn cố định cho ta độ dài đường ngắn từ s đến đỉnh có nhãn cố định, ta chứng minh lần lặp đỉnh u * thu nhãn cố định d[u*] độ dài đường ngắn từ s đến u* Thật ta có Kí hiệu S1 tập đỉnh có nhãn cố đinh S tập đỉnh có nhãn tạm thời bước lặp xét Kết thúc bước lặp nhãn tạm thời d[v] cho ta độ dài đường từ s đến v qua tập nằm hoàn toàn S Giả sử đường ngắn từ s 11 đến u* không nằm S 1, tức qua đỉnh tập S Gọi z thuộc S2 đỉnh đường Do trọng số cung không âm, nên đoạn đường từ z đến u* có độ dài L>0 d[z]< d[u*] –L[...]... kết quả tính toán theo thuật toán Dijkstra : Quy ước viết hai thành phần của nhãn theo thứ tự là d[v] và truoc[v] Bước lặp Khởi tạo 1 2 3 4 5 2- Đỉnh 1 0.1 - Đỉnh 2 1,1* - Đỉnh 3 ∞,1 6,2 4,4* - Đỉnh 4 ∞,1 3.2* - Đỉnh 5 ∞,1 ∞,1 7,4 7,4 6,6* - Đỉnh 6 ∞,1 8,2 8.2 5,3* - Tính đúng đắn của giải thuật Dijkstra Trước hết ta đi chứng minh là thuật toán tìm được đường đi ngắn nhất từ đỉnh s đến các đỉnh còn... toán của thuật toán Dijkstra Định lý : Thuật toán Dijkstra tìm được đường đi ngắn nhất trên đồ thị sau thời gian cỡ O(n2) Bây giờ ta sẽ đánh giá số phép toán cần thực hiện theo thuật toán Ở mỗi bước lặp để tìm ra đỉnh u cần phải thực hiện O(n) phép toán và để gán nhãn lại cũng cần phải thực hiện một số lượng phép toán cũng là O(n) Thuật toán phải thực hiện n-1 bước lặp vậy thời gian tính toán của thuật. .. nhất vậy đường đi ngắn nhất từ s đến u* phải nằm trọn trong S1 và vì thế d[u*] là độ dài của nó Do ở lần lặp đầu tiên S 1={s} và sau mỗi lần lặp ta chỉ thêm vào S 1 một đỉnh u* nên giả thiết d[v] cho độ dài đường đi ngắn nhất từ s đến v với mọi v thuộc S 1 là đúng với bước lặp đầu tiên Theo quy nạp toán học suy ra thuật toán cho ta đường đi ngắn nhất từ đỉnh s đến mọi đỉnh của đồ thị 3- Thời gian tính. .. đầu vào càng lớn thì thời gian tính toán của lập trình song song càng nhanh hơn so với lập trình tuần tự Thời gian tính toán của lập trình song song sẽ tăng nếu ta tăng số luồng thực hiện, tăng số bộ sử lý Định luật Amdahl: Gọi f là phần nhỏ của thao tác tính toán trong quá trình tính toán phải thực hiện một cách tuần tự, 0 ≤ f ≤ 1 Tốc độ tối đa S có thể đạt được bằng cách sử dụng máy tính song song... đường đi từ s đến v chỉ qua những tập nằm hoàn toàn trong S 1 Giả sử rằng đường đi ngắn nhất từ s 11 đến u* không nằm ngọn trong S 1, tức là nó đi qua ít nhất một đỉnh của tập S 2 Gọi z thuộc S2 là đỉnh đầu tiên như vậy trên đường đi này Do trọng số trên các cung là không âm, nên đoạn đường từ z đến u* có độ dài là L>0 và d[z]< d[u*] –L ... 1- Các khái niệm mở đầu 2- Bài toán đường ngắn xuất phát từ đỉnh Giải thuật Dijkstra 1- Thuật toán Dijkstra 2- Tính đắn thuật toán Dijkstra 3- Độ phức tạp thuật toán Dijkstra I- II- III- Kết thực... tập đỉnh B Các thuật toán quan trọng giải toán là: • Thuật toán Dijkstra — giải toán nguồn đơn tất trọng số không âm Thuật toán tính toán tất đường ngắn từ đỉnh xuất phát cho trước s tới đỉnh. .. bước lặp Theo quy nạp toán học suy thuật toán cho ta đường ngắn từ đỉnh s đến đỉnh đồ thị 3- Thời gian tính toán thuật toán Dijkstra Định lý : Thuật toán Dijkstra tìm đường ngắn đồ thị sau thời

Ngày đăng: 28/02/2016, 00:20

Từ khóa liên quan

Mục lục

  •   

Tài liệu cùng người dùng

Tài liệu liên quan