Qua bài báo cáo này, nhóm em muốn bày tỏ lòng biết ơn chân thành đến Thầy giáo Hà Mạnh Đào, người đã hướng dẫn chúng tôi một cách tận tâm trong quá trình thực hiện bài tập lớn. Sự quan tâm chỉ bảo và những ý kiến đóng góp quý báu của Thầy đã giúp nhóm em phát triển và hoàn thiện công việc của mình. Nhóm em cũng cảm ơn đến các bạn sinh viên trong lớp, người đã không ngừng hăng say nghiên cứu và cùng nhau nâng cao chất lượng bài học trên lớp. Sự đoàn kết và nỗ lực của mọi người đã tạo nên một môi trường học tập tích cực và phát triển. Nhóm em cũng muốn gửi lời cảm ơn đặc biệt đến các Thầy cô trong khoa Công Nghệ Thông Tin, người đã đóng góp ý kiến quý báu và chia sẻ những lời khuyên bổ ích. Sự hỗ trợ của các Thầy cô đã giúp chúng em hiểu sâu hơn về lĩnh vực chuyên ngành và chuẩn bị tốt cho công việc sự nghiệp sắp tới. Chúng em xin chân thành cảm ơn tất cả những người đã đồng hành và hỗ trợ nhóm em trong học phần này.
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA: CÔNG NGHỆ THÔNG TIN - BÁO CÁO BTL THUỘC HỌC PHẦN: TÍNH TỐN HIỆU NĂNG CAO CHỦ ĐỀ: ĐÁNH GIÁ HIỆU NĂNG CAO THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT DIJKSTRA SỬ DỤNG MPI GVHD: Nhóm - Lớp: Ts Hà Mạnh Đào 17 - 20231IT60669001 Trần Việt Trường - 2021600591 Thành viên: Phạm Minh Quân - 2021600198 Hà Nội, năm 2023 Nguyễn Khắc Trường - 2021607054 LỜI CẢM ƠN Qua báo cáo này, nhóm em muốn bày tỏ lòng biết ơn chân thành đến Thầy giáo Hà Mạnh Đào, người hướng dẫn chúng tơi cách tận tâm q trình thực tập lớn Sự quan tâm bảo ý kiến đóng góp quý báu Thầy giúp nhóm em phát triển hồn thiện cơng việc Nhóm em cảm ơn đến bạn sinh viên lớp, người không ngừng hăng say nghiên cứu nâng cao chất lượng học lớp Sự đoàn kết nỗ lực người tạo nên mơi trường học tập tích cực phát triển Nhóm em muốn gửi lời cảm ơn đặc biệt đến Thầy cô khoa Cơng Nghệ Thơng Tin, người đóng góp ý kiến quý báu chia sẻ lời khuyên bổ ích Sự hỗ trợ Thầy cô giúp chúng em hiểu sâu lĩnh vực chuyên ngành chuẩn bị tốt cho công việc nghiệp tới Chúng em xin chân thành cảm ơn tất người đồng hành hỗ trợ nhóm em học phần LỜI MỞ ĐẦU Đặt vấn đề Tìm kiếm đường ngắn toán kinh điển nghiên cứu nhiều ứng dụng hệ thống chuyên biệt Rất nhiều nghiên cứu cải tiến thuật toán tối ưu thuật tốn khơng gian tìm kiếm, thời gian tìm kiếm Tuy nhiên, với bùng nổ thơng tin phát triển công nghệ thông tin, thuật tốn tìm kiếm đường ngắn kinh điển khơng thể đáp ứng thời gian tìm kiếm tốt lượng liệu lớn Bài toán đặt làm để giải vấn đề tìm kiếm đường ngắn với nguồn liệu lớn phân tán, đáp ứng mục tiêu rút ngắn thời gian tìm kiếm Mục đích Đánh giá hiệu thuật tốn tìm đường ngắn Dijkstra với MPI Nội dung Có nội dung: - Nội dung 1: Nghiên cứu tốn tìm kiếm đường ngắn Đánh giá ưu điểm, nhược điểm thuật toán - Nội dung 2: Cải tiến thuật tốn Dijkstra cho tốn tìm kiếm đường ngắn cách song song hóa thuật tốn để tối ưu thời gian tìm kiếm nguồn liệu lớn - Nội dung 3: Tiến hành thử nghiệm, đánh giá thuật toán cải tiến Phương pháp nghiên cứu Để thực nội dung nêu trên, nhóm chúng em sử dụng số phương pháp cho nội dung sau: - Nội dung 1: Sử dụng phương pháp phân tích, so sánh đánh giá thuật tốn tìm kiếm đường ngắn - Nội dung 2: Sử dụng phương pháp phân tích khả song song hóa thuật tốn Dijkstra - Nội dung 3: Sử dụng phương pháp đối sánh để đánh giá kết thử nghiệm thuật toán cải tiến MỤC LỤC LỜI CẢM ƠN LỜI MỞ ĐẦU MỤC LỤC CHƯƠNG 1: KỸ THUẬT TÌM KIẾM ĐƯỜNG ĐI NGẮN NHẤT 1.1 Bài tốn tìm kiếm đường ngắn 1.2 Thuật tốn Dijkstra CHƯƠNG 2: LẬP TRÌNH SONG SONG VỚI MPI 2.1 Tổng quan lập trình song song với MPI 2.1.1 Giới thiệu 2.1.2 Một số đặc biệt lập trình MPI 2.2 Lập trình song song với MPI 2.2.1 Giới thiệu 2.2.2 Một số vấn đề hiệu 2.2.2.1 Năng lực tính tốn 2.2.2.2 Cân tải 2.2.2.3 Sự bế tắc CHƯƠNG 3: MPI TRONG THUẬT TỐN DIJKSTRA CHO BÀI TỐN TÌM KIẾM ĐƯỜNG ĐI NGẮN NHẤT 3.1 Yêu cầu đặt cho tốn tìm kiếm đường ngắn theo giải thuật Dijkstra 3.2 Xây dựng hàm tìm kiếm đường ngắn 3.2.1 Xây dựng thuật toán Dijkstra cho tốn 3.2.2 Thực song song hóa 3.2.3 Thuật toán song song 3.2.4 Lựa chọn hàm MPI cho thuật tốn song song 3.2.5 Cơng thức song song 3.3 Chi phí thời gian CHƯƠNG 4: KẾT QUẢ THỬ NGHIỆM PHỤ LỤC TÀI LIỆU THAM KHẢO CHƯƠNG 1: KỸ THUẬT TÌM KIẾM ĐƯỜNG ĐI NGẮN NHẤT 1.1 Bài tốn tìm kiếm đường ngắn Trong lý thuyết đồ thị, toán đường ngắn nguồn đơn tốn tìm đường hai đỉnh cho tổng trọng số cạnh tạo nên đường nhỏ Định nghĩa cách hình thức, cho trước đồ thị có trọng số (nghĩa tập đỉnh V, tập cạnh E, hàm số có giá trị thực f: E → R), cho trước đỉnh v thuộc V, tìm đường P từ v tới đỉnh v' ❑ thuộc V cho: ∑ f ( p) nhỏ tất đường nối từ v tới v' pP 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 tốn tính tốn tất đường ngắn từ đỉnh xuất phát cho trước s tới đỉnh khác mà khơng làm tăng thời gian chạy - Thuật tốn Bellman-Ford: giải toán nguồn đơn trường hợp trọng số có giá trị âm - Thuật tốn tìm kiếm A*: giải toán nguồn đơn sử dụng heuristics để tăng tốc độ tìm kiếm - Thuật tốn Floyd-Warshall: giải toán đường ngắn cho cặp đỉnh - Thuật toán Johnson: giải toán đường ngắn cho cặp đỉnh, nhanh thuật toán Floyd-Warshall đồ thị thưa - Lý thuyết nhiễu (Perturbation theory): tìm đường ngắn địa phương (trong trường hợp xấu nhất) 1.2 Thuật toán Dijkstra Thuật toán Dijkstra, mang tên nhà khoa học máy tính người Hà Lan Edsger Dijkstra vào năm 1956 ấn năm 1959[1], thuật toán giải toán đường ngắn từ đỉnh đến đỉnh cịn lại đồ thị có hướng khơng có cạnh mang trọng số khơng âm Thuật tốn thường sử dụng định tuyến với chương trình thuật tốn đồ thị hay cơng nghệ Hệ thống định vị tồn cầu (GPS) Bài tốn: Cho đơn đồ thị liên thơng, có trọng số G = (V, E) Tìm khoảng cách d( u0 ,v) từ đỉnh u0 cho trước đến đỉnh v G tìm đường ngắn từ u0đến v Phương pháp thuật toán Dijkstra là: xác định đỉnh có khoảng cách đến u0 từ nhỏ đến lớn Trước tiên, đỉnh có khoảng cách đến a nhỏ a, với d ( u0, u0 ) = Trong đỉnh v ≠ u0, tìm đỉnh có khoảng cách k1 đến u0là nhỏ Đỉnh phải đỉnh kề với u0 Giả sử u1: d (u0, u1) = k Trong đỉnh v ≠ u0 v ≠ u1, tìm đỉnh có khoảng cách k đến u0 nhỏ Đỉnh phải đỉnh kề với u0 với u1 Giả sử u2: d (u0, u2) = k Tiếp tục trên, tìm khoảng cách từ u0 đến đỉnh v G Nếu V = {u0, u1, , un} thì: = d (u0, u0) < d (u0 , u1) < d (u0 , u2) < < d (u0, un) Thuật toán Dijkstra: Procedure Dijkstra (G = (V, E) đơn đồ thị liên thơng, có trọng số với trọng số dương) {G có đỉnh a = u0, u1, , un= z trọng số m (ui, u j), với m (ui, u j) = ∞ ( ui , u j) không cạnh G}…… Độ phức tạp thuật toán Dijkstra: Thuật toán dùng không n−1 bước lặp Trong bước lặp, dùng không 2(n−1) phép cộng phép so sánh để sửa đổi nhãn đỉnh Ngoài ra, đỉnh thuộc Sk có nhãn nhỏ nhờ khơng q n−1 phép so sánh Do thuật tốn có độ phức tạp O (n2) CHƯƠNG 2: LẬP TRÌNH SONG SONG VỚI MPI 2.1 Tổng quan lập trình song song với MPI 2.1.1 Giới thiệu Thông thường nay, hầu hết chương trình tính tốn thiết kế để chạy lõi(single core), cách tính tốn tuần tự(serial computation) Để chạy chương trình cách hiệu hệ thống máy tính CPU đa lõi, phải tiến hành song song hóa chương trình Ưu điểm việc tính tốn song song (parallel computation) khả xử lý nhiều tác vụ lúc Việc lập trình song song thực thơng qua hàm thư viện (ví dụ: mpi.h) đặc tính tích hợp chương trình biên dịch song song liệu Cơng việc lập trình song song bao gồm việc thiết kế, lập trình chương trình máy tính song song cho chạy hệ thống máy tính song song hay có nghĩa song song hóa chương trình nhằm giải vấn đề lớn làm giảm thời gian thực thi hai Lập trình song song tập trung vào việc phân chia toán tổng thể thành công việc nhỏ để nhận kết cuối nguyên tắc quan trọng tính đồng thời xử lý nhiều tác vụ hay tiến trình Do đó, trước lập trình song song, ta cần phải biết tốn song song hóa hay khơng Message Passing Interface – MPI chuẩn sử dụng rộng rãi Nó khơng phải ngơn ngữ lập trình mới, thay vào thư viện chương trình mà gọi từ chương trình C Fortran 77 MPI phát triển diễn đàn mở quốc tế, bao gồm đại diện từ ngành công nghiệp, học viện phịng thí nghiệm phủ Nó nhanh chóng chấp nhận rộng rãi thiết kế cẩn thận cho phép hiệu suất tối đa loạt hệ thống, dựa truyền thơng điệp, mơ hình mạnh mẽ sử dụng rộng rãi cho lập trình hệ thống song song Những nỗ lực cho MPI bắt đầu vào mùa hè năm 1991, nhóm nhỏ nhà nghiên cứu bắt đầu thảo luận nơi hẻo lánh núi Úc Nội dung lại thảo luận hội thảo “tiêu chuẩn cho truyền thông điệp môi trường nhớ phân tán” (Standards for Message Passing in a Distributed Memory environment) tổ chức vào ngày 29 – 30 tháng năm 1992 Williamsburg, Virginia Tại hội thảo này, tính cần thiết cho MPI chuẩn thảo luận, mà nhóm cộng tác thành lập để tiếp tục trình tiêu chuẩn hoá Jack Dongarra, Rolf Hempel Hempel, Tony Hey David W.Walker đưa dự thảo sơ biết đến MPI-1 tháng 11 năm 1992 Trong tháng 11 năm 1992, họp nhóm cộng tác MPI tổ chức Minneapolis, mà hội thảo định đặt q trình tiêu chuẩn hố sở thức Nhóm cộng tác MPI gặp tuần lần suốt tháng đầu năm 1993 Bản dự thảo chuẩn MPI trình bày hội nghị Siêu máy tính năm 93 tháng 11 năm 1993 Sau thời gian nhận ý kiến đóng góp từ cộng đồng, số kết thay đổi MPI, phiên 1.0 MPI phát hành vào tháng năm 1994 Thông qua gặp gỡ thư điện tử, nhà nghiên cứu thảo luận với thành lập diễn đàn MPI, tất thành viên cộng đồng điện tốn hiệu suất cao đăng ký làm thành viên diễn đàn