Lập trình song song giải thuật dijkstra

13 559 0
Lập trình song song 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

Lập trình song song giải thuật dijkstra Á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. I Tổng quan về mô hình lập trình song song OpenMP 1 Giới thiệu về mô hình OpenMP 2 Mô hình lập trình song song OpenMP 3 Một số chỉ thị trong OpenMP 4 Một số mệnh đề thường gặp trong OpenMP 5 Thư viện và các biến môi trường II Bài toán tìm đường đi ngắn nhất 1 Các khái niệm mở đầu 2 Bài toán đường đi ngắn nhất xuất phát từ một đỉnh III Giải thuật Dijkstra 1 Thuật toán Dijkstra 2 Tính đúng đắn của thuật toán Dijkstra 3 Độ phức tạp của thuật toán Dijkstra IV Kết quả thực nghiệm 1 Cài đặt bằng lập trình tuần tự 2 Cài đặt bằng lập trình song song 3 Kết luận.

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG     Đề tài !" #"$% &'()*+, -./01,231(4 5.678 1- 23191:5;5<=>>?=@AA 2- 23B;/C5;5<=>>?DEE? ;81F1G1H@E ;2%DDI=>DD J77 I- 1K+LGMNJO 1- -8LGMNJO 2- JGMNJO 3- J%F7&9MNJO 4- J%F8 L/PQMNJO 5- 1/877G/P II-  /P !" 1- R7*8C S 2-  /P !"#"$% & III- -()*+ 1- 1()*+ 2- 1 : !7T+()*+ 3- B%U7V7T+()*+ IV- H678 1- R QWS6 2- R QW 3- H, I- 1K+LGMNJO 1- -8LGMNJO a- MNJOX 1NY*N+ MNJOZMNJZO7N%+8U[O\][7+ +N^+7N_`a +L6+.7":77+b%7c + GdRcReecf+S77%*:7#'g8 L #ch#cJ+7M5icLJ7^Yj, 2k+l • R77&9.97]RNN7N_ • R7/8mN]+N_ • R7G/P]nN++N_ b- 97'MNJO MNJO[7N7NmNNj+][m_ /a77GF/%+8 U S.c.D,>+ PD>oDAAp7f+,1D> o+ k.7RIRee, 2o=>>>.=,>7f+o=>>=.=,>7RIRee, 2o=>>@.=,@7RIReeIf++ P, 1@Z=>>?.E,>+ P+l.Lo77*8L +*87T++*, 2- JGMNJO MNJO'Gf*Zq r67 1G"7777/s L! S87#'g s C%l7T]+NN+_,l7Tt67%77S67 *!Qu]++NN_ S., fMmHRkv+l7T+ ktV+%77l,<+ k Vwu /a767Cl$+ V+ qM\2Hl w Vw u 7:t /a7 l%*:7l+ k7G87V /a7678C l7T, 3- J%F7&9MNJO 3.1 HGV7&9 R&9MNJO /a77/V+ x++N7NZ+Ny7+N,,,zNjN {x++|.7S!%7 F}7&9MNJORIRee {N7NZ+N.7T+7&9#"8+x++ U /7"*8 L {y7+N,,,zR78 L*G!%77&9 {NjN|.7S!%7`7&9kw8W*F 7":7 /a7+}7C7&9 < x++++NN^+]+N_+N]N+c_ 3.2 OV7T+7&9 • OVv]5+7n#N_ Bkd Vw.V$ S 7F*F7":7 7+`7&9,OVv7T+7&9*GC% 77T7778 7U+w, • R&9 s %7]M+N(N7N_ R&9 s %77&9#"8 %77&9*7,2klVC Vv7T+7&9*7,R&9 s %7C%77'7778w l • OV %](+7n#N_ OV %7T+7&9+lVv7T+7T+7&9V7T+777& 9l7G MNJO7k"L7&9/+7c+Nc77+c~c^c+NcNNc ++NcN7cNcN++N, R77":7/PQ • R":77+b • R":7 l% 1VN#777&9 wu 3.3 R":77+b E,E,DR&9I^ { J8 L7NN x++^7NN]+7c_ 1•7+I, f]•D€•€ee_ ‚ O^]ƒ„+N…_ Ryzy)z•+]_€ † x++^7NN]+7c_ 17*‡ˆN, { J8 LMNN { J8 L2j+ <8 L77l*G7S l%V r7F7u7T+‰Q ,R7lt#'g67 Vw87+‰Q, E,E,=R&9N7 { R&9u r7&+77Swu7+777 l678,V7T+7&9N77k777&79N7,`% N7t /a767 8  C77l*7 +,  HG V7T+ 7&9 N7, E,E,ER&95N R&9N7&+W Vw++7&97& /a7678C% l77l,2*G7k8 L2j+ /a7*+77 l*7]77l*G67 Vw5N_t a7 * l67 Vw7&9*:7 /a7678777G87 *77&9 17&95N7&7k+8 LO+N~+N  HGV7&95N  x++Ny7+Nz  ‚  7NZ7* † R&95N7ŠV7& 9%S7T+ Vw /a7678.% l"c*G"l+N, R77+N7kr%F+ • Private • Firstprivate • Copyprivate • Nowait Các luồng khác mà không thực thi đoạn mã trong chỉ thị SINGLE sẽ phải đợi đến khi luồng thực thi đoạn mã trong chỉ thị kết thúc mới được thực hiện các công việc ngoài chỉ thị SINGLE nếu không có mệnh đề NOWAIT được đưa ra. Lưu ý trong chỉ thị SINGLE chỉ có hai mệnh đề là private và firstprivate . . E,‹R":7 l%d8 E,‹,DR&9+N 17&9+N Vw++7&97& /a7678Cl7T 77l, 17&9*G7k"7U8 L77l*7*G7S7P *l7T678#7G877C7&9+N /a767 87G877T+, E,‹,=R&977+ 7&9R7+uw /a77C7&9V%P r7& /a767 8V%l, 2%l k +6787G877C7&97k%l *77F! ‰6787G87 kkt9*k+7 *l*+67 8#7G87 k, 7krlVL7&977+77.*7+7u%u ,  E,‹,ER&9+N R&9u r l%"777G77l,*!Q7& 9+N`lt7PVP r k]P r!Q7&9+N_ 7 *"777l7‰V!Q7&9+N,5+ k77lt 7u677&9+N, HGV7&9+N  x+++NNjZN  E,‹,‹R&9[7 17&9[777 9+7&u /a77%77.Fs 87uLl7F!.k, x+++7NjN +NN‡N#N R&97&67%778+ #•N# #ee ee# #ZZ ZZ# #C% N#%rU7C%*G+7 # %ecŒcZcIc•cŽc•c•‘ R:gW7&7kŠV/d#.F, 4- J%F8 LMNJO 1MNJO'778 L+ ZJ8 LO+N ZJ8 Lf+N ZJ8 L++N ZJ8 L5+N ZJ8 L(N^+ ZJ. LmN7 ZJ8 LR  @Z1/877G/P @,D1/8mN MNJO77"%/8"L777U7o+l77 ".+ F/a7&F77lcF/a77l'c N+Nc77G/P67,1RIRee r7kr' 77. ~N/8,, • MJO‡5n1‡2hJ‡1;mn[(5 • MJO‡-n1‡2hJ‡1;mn[(5 • MJO‡-n1‡J[i‡1;mn[(5 • MJO‡-n1‡1;mn[(‡2hJ • MJO‡-n1‡2hJ‡OmMR5 • MJO‡\2‡O[m[n • MJO‡5n1‡(|2[J\R • MJO‡-n1‡(|2[J\R • MJO‡5n1‡2n51n( • MJO‡-n1‡2n51n( • MJO‡\2\1‡MRH • MJO‡5n1‡MRH • MJO‡h25n1‡MRH • MJO‡1n51‡MRH @,=G/P R7G/P /a7u r L*r6678 Vw ,+l77G/P+ • MJO‡5R;n(hn • MJO‡2hJ‡1;mn[(5 • MJO‡(|2[J\R • MJO‡2n51n(  II-  /P !" 1- R7*8C S • Bl97k/Bl97k/-%7Q7kU6-•]<cn_c k - <c77 &Q7:c - nc777Q7kU67U+77 &c /a7}777V7k/Q77, J%7VN•]#c_ /a777k/$#€# /a7} r SIF7  /a7} r7FI}7T+7V, • 2`7VN•]#c_%7n+ Q%F67/sU7]#c_}}F 7T+k,7]#c_•’N•]#c_*G%7n, • 2w > c D c = “““  % /P .- %7T+k /a7 9v+ /+  ”7] ZD c  _ \•D 1U7 %7T+ /P 7K77}F.777V k, 2-  /P !" Bài toán tìm đường đi ngắn nhất là bài toán quan trọng trong Lý thuyết đồ thị, nó được áp dụng để giải quyết rất nhiều bài toán trong thực tế như điều khiển tối ưu, giao thông vận tải, mạng viễn thông Bài toán này có thể chia làm 2 loại: Tìm đường đi ngắn nhất giữa một cặp đỉnh: Cho đồ thị G(V,E) có trọng số cạnh và hai đỉnh u, v thuộc V tìm đường đi ngắn nhất từ đỉnh u đến đỉnh v trên đồ thị G. Các giải thuật được phát triển để giải bài toán dạng này tiêu biểu là các giải thuật: Dijkstra, Bellman-Ford, Tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh: Cho đồ thị G(V,E) có trọng số cạnh tìm đường đi từ đỉnh u đến đỉnh v, với mọi cặp đỉnh u, v thuộc V. Các giải thuật đã được phát triển để giải bài toán này là: Floyd-Warshall, Johnson, Trong thực tế nhiều khi ta không chỉ cần tìm đường đi ngắn nhất giữa hai đỉnh mà còn cần xác định đường đi ngắn nhất giữa một tập đỉnh này đến một tập đỉnh khác. Bài toán đó được phát biểu như sau: Cho đồ thị G(V,E) có trọng số cạnh và hai tập đỉnh A,B ⊂ V tìm đường đi ngắn nhất từ tập đỉnh A đến tập đỉnh B. Các thuật toán quan trọng nhất giải quyết bài toán này là: • Thuật toán Dijkstra — giải bài toán nguồn đơn nếu tất cả các trọng số đều không âm. Thuật toán này có thể tính toán tất cả các đường đi ngắn nhất từ một đỉnh xuất phát cho trước s tới mọi đỉnh khác mà không làm tăng thời gian chạy. • Thuật toán Bellman-Ford — giải bài toán nguồn đơn trong trường hợp trọng số có thể có giá trị âm. • Giải thuật tìm kiếm A* giải bài toán nguồn đơn sử dụng heuristics để tăng tốc độ tìm kiếm • Thuật toán Floyd-Warshall — giải bài toán đường đi ngắn nhất cho mọi cặp đỉnh. • Thuật toán Johnson — giải bài toán đường đi ngắn nhất cho mọi cặp đỉnh, có thể nhanh hơn thuật toán Floyd-Warshall trên các đồ thị thưa. • Lý thuyết nhiễu (Perturbation theory); tìm đường đi ngắn nhất địa phương (trong trường hợp xấu nhất) Ứng dụng thực tế của bài toán tìm đường đi ngắn nhất: 1VN7&rL /P !"d+%7Q & k, III- -()*+ 1- -()*+ 1/Pa}F.777V*G•()*+ L #" r /P !"$ & 77 &7‰V7T+ l 987d8s"L77 wC7/7, 16+.7sC777 &77wVP,2w7T+` & 77.7T+ % /P !"$ k,R7w K N%T7QcC k`/7Q7s%wVPCw 7F 9,2w7T+% & kC7F 9–t7+*G 7.7T+ % %7T+ /P !"$ & k, 1 /a7G7r/+ Procedure Dijkstra ]Œ Đầu vàoBl97k/-•]<cn_ & 5%7< &#"c7yzyzcc%7<+}F Giả thiết+ycz—•>c%7< Đầu raH77$ 77 &7‰Vyzc%7< 17yz & /7 /P !"$  Œ_ N ]Œ*CVŒ_ f N (yz•7ycz€ 17yz•€ n (yz•>€ 1•<„‚†]Œ177 &7kwVPŒ_ ]Œ/7QŒ_ YN]1 N 1 &1˜+wyz•‚yˆzˆ1†€ 1•1„‚†€]Œ7F 9wŒ_ f]Œ-Vw777 &1Œ_ \^]yz—yze+ycz_ N yz•yze+ycz€ 7yz•€ N€ [...]... Thời gian tính toán của lập trình song song là nhanh hơn so với lập trình tuần tự Khi kích thước bộ dữ liệu đầ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... 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 toán là O(n2) IV- Kết quả thực nghiệm 1- So sánh giữa lập trình tuần tự và lập trình song song Nếu ta tăng dần dữ liệu đầu vào (tăng kích thước ma trận trọng số) Thì thời gian tính toán của thuật toán Dijkstra cài đặt bằng lập trình tuần tự sẽ tăng dần theo đồ thị sau : 2- Kết... 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 với p BXL được cho bởi công thức S ≤ Thời gian cho phần việc xử lý song song của ứng dụng sẽ dảm dần đến 0 khi ta tăng số lượng BXL Thời gian cho việc xử lý tuần tự luôn là hằng số Lập trình song song cũng như tính toán hiệu năng cao đang là xu hƣớng hiện nay trên thế giới Xu hướng này có thể... lượng bộ xử lý vật lý tích hợp trên một chip trong những năm gần đây Thêm vào đó rất nhiều trợ những hệ thống giúp tính toán song song đã được phát triển như Window HPC Server, Rock Cluster… tạo đà cho sự phát triển của lập trình song song Tài liệu tham khảo 1- Internet 2- Giáo trình toán rời rạc – Nguyễn Đức Nghĩa , Nguyễn Tô Thành ... 1 6 ∞ 7 1 ∞ ∞ ∞ Bảng 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... 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 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 . đường đi ngắn nhất từ đỉnh u đến đỉnh v trên đồ thị G. Các giải thuật được phát triển để giải bài toán dạng này tiêu biểu là các giải thuật: Dijkstra, Bellman-Ford, Tìm đường đi ngắn nhất giữa tất. đỉnh A đến tập đỉnh B. Các thuật toán quan trọng nhất giải quyết bài toán này là: • Thuật toán Dijkstra — giải bài toán nguồn đơn nếu tất cả các trọng số đều không âm. Thuật toán này có thể tính. không làm tăng thời gian chạy. • Thuật toán Bellman-Ford — giải bài toán nguồn đơn trong trường hợp trọng số có thể có giá trị âm. • Giải thuật tìm kiếm A* giải bài toán nguồn đơn sử dụng heuristics

Ngày đăng: 16/05/2015, 01:48

Từ khóa liên quan

Mục lục

  •   

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

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

Tài liệu liên quan