Tải bản đầy đủ (.docx) (39 trang)

ĐÁNH GIÁ HIỆU NĂNG CAO THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT DIJKSTRA SỬ DỤNG MPI

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (852.93 KB, 39 trang )

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 TỐ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


Nội, năm
2023

Nguyễn Khắc Trường - 2021607054


LỜI CẢM ƠN
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à hồ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 q 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.

1


LỜI MỞ ĐẦU
1. Đặt vấn đề
Tìm kiếm đường đi ngắn nhất là một bài toán kinh điển đã được nghiên cứu
rất nhiều và ứng dụng trong những hệ thống chuyên biệt. Rất nhiều nghiên
cứu đã cải tiến những thuật toán và tối ưu thuật tốn về khơng gian tìm kiếm,
thời gian tìm kiếm.
Tuy nhiên, với sự bùng nổ thơng tin và sự phát triển của công nghệ thông
tin, những thuật tốn tìm kiếm đường đi ngắn nhất kinh điển khơng thể đáp
ứng được thời gian tìm kiếm tốt nhất trên lượng dữ liệu lớn. Bài toán đặt ra là
làm thế nào để giải quyết vấn đề tìm kiếm đường đi ngắn nhất với nguồn dữ
liệu lớn và phân tán, đáp ứng được mục tiêu rút ngắn thời gian tìm kiếm.
2. Mục đích
Đánh giá hiệu năng thuật tốn tìm đường đi ngắn nhất Dijkstra với MPI.
3. Nội dung
Có 3 nội dung:

- Nội dung 1: Nghiên cứu về bài tốn tìm kiếm đường đi ngắn nhất. Đánh giá
ưu điểm, nhược điểm của từng thuật toán.
- Nội dung 2: Cải tiến thuật toán Dijkstra cho bài tốn tìm kiếm đường đi
ngắn nhất bằng cách song song hóa thuật tốn để tối ưu về thời gian tìm
kiếm trên nguồn dữ 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.
4. Phương pháp nghiên cứu
Để thực hiện những nội dung đã nêu ở trên, nhóm chúng em đã sử dụng
2


một số phương pháp cho từng nội dung như sau:
- Nội dung 1: Sử dụng phương pháp phân tích, so sánh và đánh giá các
thuật tốn tìm kiếm đường đi ngắn nhất.
- Nội dung 2: Sử dụng phương pháp phân tích khả năng 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 quả thử
nghiệm của thuật toán đã cải tiến.

3


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 đi ngắn nhất
1.2 Thuật tốn Dijkstra

CHƯƠNG 2: LẬP TRÌNH SONG SONG VỚI MPI
2.1 Tổng quan về 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 của 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 đề về hiệu năng
2.2.2.1 Năng lực tính tốn
2.2.2.2 Cân bằng 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 u cầu đặt ra cho bài tốn tìm kiếm đường đi ngắn nhất theo giải thuật
Dijkstra
3.2 Xây dựng hàm tìm kiếm đường đi ngắn nhất
3.2.1 Xây dựng thuật toán Dijkstra tuần tự cho bài toán
3.2.2 Thực hiện song song hóa
3.2.3 Thuật tố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

4


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 đi ngắn nhất

Trong lý thuyết đồ thị, bài toán đường đi ngắn nhất nguồn đơn là bài tốn tìm
một đường đi giữa hai đỉnh sao cho tổng các trọng số của các cạnh tạo nên đường
đi đó là nhỏ nhất. Định nghĩa một cách hình thức, cho trước một đồ thị có trọng
số (nghĩa là một tập đỉnh V, một tập cạnh E, và một hàm trong số có giá trị thực f:
E → R), cho trước một đỉnh v thuộc V, tìm một đường đi P từ v tới mỗi đỉnh v'


thuộc V sao cho: ∑ f ( p) là nhỏ nhất trong tất cả các đường nối từ v tới v'.
pP

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 tốn này có thể tính tố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 tốn Bellman-Ford: giải bài tốn nguồn đơn trong trường
hợp trọng số có thể có giá trị âm.
- Thuật tốn 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 tốn Floyd-Warshall: giải bài tố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 tố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).
1.2 Thuật toán Dijkstra
Thuật tốn Dijkstra, mang tên của nhà khoa học máy tính người Hà Lan Edsger

5



Dijkstra vào năm 1956 và ấn bản năm 1959[1], là một thuật toán giải quyết bài
toán đường đi ngắn nhất từ một đỉnh đến các đỉnh còn lại của đồ thị có
hướng khơng có cạnh mang trọng số khơng âm. Thuật toán thường được sử dụng
trong định tuyến với một chương trình con trong các thuật tốn đồ thị hay trong
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ừ một đỉnh u0 cho trước đến một đỉnh v bất kỳ của G và tìm đường đi ngắn

nhất từ u0đến v.
Phương pháp của thuật toán Dijkstra là: xác định tuần tự đỉ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ỏ nhất chính là a, với d ( u0, u0 ) = 0. Trong
các đỉnh v ≠ u0, tìm đỉnh có khoảng cách k1 đến u0là nhỏ nhất. Đỉnh này phải là
một trong các đỉnh kề với u0 . Giả sử đó là u1:
d (u0, u1) = k 1 .
Trong các đỉnh v ≠ u0 và v ≠ u1, tìm đỉnh có khoảng cách k 2 đến u0 là nhỏ nhất.
Đỉnh này phải là một trong các đỉnh kề với u0. hoặc với u1. Giả sử đó là u2:
d (u0, u2) = k 2.
Tiếp tục như trên, cho đến bao giờ tìm được khoảng cách từ u0 đến mọi đỉnh v của
G. Nếu V = {u0, u1, ..., un} thì:
0 = d (u0, u0) < d (u0 , u1) < d (u0 , u2) < ... < d (u0, un).
Thuật toán Dijkstra:
Procedure Dijkstra (G = (V, E) là đơn đồ thị liên thơng, có trọng số với trọng số
dương)
{G có các đỉnh a = u0, u1, ..., un= z và trọng số m (ui, u j), với m (ui, u j) = ∞ nếu (
ui , u j) không là một cạnh trong G}……..

6



Độ phức tạp của thuật toán Dijkstra: Thuật toán dùng không quá n−1 bước
lặp. Trong mỗi bước lặp, dùng không hơn 2(n−1) phép cộng và phép so
sánh để sửa đổi nhãn của các đỉnh. Ngoài ra, một đỉnh thuộc Sk có nhãn
nhỏ nhất nhờ khơng q n−1 phép so sánh. Do đó thuật tốn có độ phức
tạp O (n2).

7


CHƯƠNG 2: LẬP TRÌNH SONG SONG VỚI MPI
2.1 Tổng quan về lập trình song song với MPI
2.1.1 Giới thiệu
Thơng thường hiện nay, hầu hết các chương trình tính tốn đều
được thiết kế để chạy trên một lõi(single core), đó là cách tính tốn tuần tự(serial
computation). Để có thể chạy được chương trình một cách hiệu quả trên hệ
thống máy tính hoặc các CPU đa lõi, chúng ta phải tiến hành song song hóa
chương trình đó. Ưu điểm của việc tính tốn song song (parallel computation)
chính là khả năng xử lý nhiều tác vụ cùng một lúc. Việc lập trình song song có thể
thực hiện thơng qua các hàm thư viện (ví dụ: mpi.h) hoặc các đặc tính đã được
tích hợp trong các chương trình biên dịch song song dữ liệu.
Cơng việc lập trình song song bao gồm việc thiết kế, lập trình các
chương trình máy tính song song sao cho nó chạy được trên các hệ thống máy
tính song song hay có nghĩa là song song hóa các chương trình tuần tự nhằm giải
quyết một vấn đề lớn hoặc làm giảm thời gian thực thi hoặc cả hai. Lập trình song
song tập trung vào việc phân chia bài toán tổng thể ra thành các công việc nhỏ
hơn để nhận được kết quả cuối cùng nguyên tắc quan trọng nhất ở đây chính là
tính đồng thời hoặc xử lý nhiều tác vụ hay tiến trình. Do đó, trước khi lập trình
song song, ta cần phải biết được rằng bài tốn có thể song song hóa hay khơng.
Message Passing Interface – MPI là một chuẩn mới được sử dụng rộng rãi

nhất. Nó khơng phải là một ngơn ngữ lập trình mới, thay vào đó nó là một thư
viện của chương trình con mà có thể được gọi từ chương trình C và Fortran 77.
MPI được phát triển bởi một diễn đàn mở quốc tế, bao gồm các đại diện từ
ngành công nghiệp, các học viện và phịng thí nghiệm của chính phủ. Nó đã nhanh
8


chóng được chấp nhận rộng rãi bởi được thiết kế cẩn thận cho phép hiệu suất tối
đa trên một loạt các hệ thống, và nó dựa trên truyền thơng điệp, một trong
những mơ hình mạnh mẽ nhất và được sử dụng rộng rãi cho lập trình các hệ
thống song song.
Những nỗ lực cho MPI bắt đầu vào mùa hè năm 1991, khi một nhóm nhỏ các nhà
nghiên cứu bắt đầu thảo luận tại một nơi hẻo lánh trên núi ở Úc.
Nội dung đó lại được thảo luận tại hội thảo “tiêu chuẩn cho truyền thông
điệp trong một môi trường bộ 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 4 năm 1992 tại
Williamsburg, Virginia. Tại hội thảo này, các tính năng cơ bản cần thiết cho một
MPI chuẩn đã được thảo luận, mà một nhóm cộng tác đã được thành lập để tiếp
tục q trình tiêu chuẩn hố. Jack Dongarra, Rolf Hempel Hempel, Tony Hey và
David W.Walker đưa ra một bản dự thảo sơ bộ được biết đến như MPI-1 trong
tháng 11 năm 1992.
Trong tháng 11 năm 1992, một cuộc họp của nhóm cộng tác MPI đã được
tổ chức tại Minneapolis, mà tại đó hội thảo quyết định đặt các q trình tiêu
chuẩn hố trên một cơ sở chính thức hơn. Nhóm cộng tác MPI đã gặp nhau 6
tuần một lần trong suốt 9 tháng đầu của năm 1993. Bản dự thảo chuẩn MPI đã
được trình bày tại hội nghị Siêu máy tính năm 93 trong tháng 11 năm 1993.
Sau một thời gian nhận những ý kiến đóng góp từ cộng đồng, một số kết
quả được thay đổi trong MPI, phiên bản 1.0 của MPI được phát hành vào tháng 6
năm 1994. Thông qua những cuộc gặp gỡ và thư điện tử, các nhà nghiên cứu đã
thảo luận với nhau thành lập diễn đàn MPI, trong đó tất cả các thành viên của

cộng đồng điện toán hiệu suất cao đều có thể đăng ký làm thành viên của diễn
đàn.

9


MPI đã thu hút sự tham gia khoảng 80 người từ 40 tổ chức, chủ yếu là ở Mỹ
và Châu Âu. Hầu hết các nhà cung cấp chính của máy tính đều được tham gia vào
MPI cùng với các nhà nghiên cứu từ các trường đại học, phịng thí nghiệm của
chính phủ và ngành cơng nghiệp.
2.1.2 Một số đặc biệt của lập trình MPI
MPI là một giao thức truyền thơng độc lập với ngơn ngữ dùng để lập trình
máy tính song song. MPI hỗ trợ cả giao tiếp điểm – điểm và giao tiếp tập thể. Mục
tiêu của MPI là hiệu suất, khả năng mở rộng và khả năng di dộng cao.
MPI thường xuyên chạy trên các máy tính chia sẻ bộ nhớ.
Mặc dù MPI thuộc về lớp thứ 5 và lớp cao hơn của mơ hình OSI, nhưng
những triển khai có thể bao gồm hầu hết các lớp, với socket và TCP (Transmission
Control Protocol) được dùng trong tần vận chuyển.
Hầu hết các triển khai MPI bao gồm một thiết lập định tuyến riêng có thể
được gọi trực tiếp từ C, C++, Fortran hay bất kỳ ngơn ngữ nào có giao diện với các
thư viện, bao gồm C#, Java hoặc Python. Những ưu điểm ucar MPI vượt qua
những thư viện truyền thơng điệp cũ là tính di động (MPI có thể được triển khai
cho hầu hết các kiến trúc bộ nhớ phân tán) và tốc độ (MPI thực hiện nguyên tắc
tối ưu hố cho phần cứ mà nó chạy).
2.2 Lập trình song song với MPI
2.2.1 Giới thiệu
Giao thức truyền thơng điệp MPI là một thư viện các hàm và macro có thể
được gọi từ các chương trình sử dụng ngơn ngữ C, Fortran, và C++. Như tên gọi
của nó MPI được xây dựng nhằm sử dụng trong các chương trình để khai thác hệ
thống các bộ xử lý bằng cách truyền thông điệp.


10


● Mục tiêu thiết kế của MPI bao gồm:
- Thiết kế một giao diện lập trình ứng dụng. Mặc dù MPI gần đây được sử
dụng như một chương trình dịch và một thư viện ở thời gian chạy, nhưng
thiết kế của MPI chủ yếu phản ánh nhu cầu nhận thức của những người lập
trình ứng dụng.
- Cho phép truyền thơng một cách hiệu quả: tránh việc sao chép dữ liệu từ
bộ nhớ sang bộ nhớ và cho phép gối chồng (overlap) giữa các tính tốn và
truyền thơng và offload để truyền thơng đồng xử lý khi có thể.
- Cho phép thực thi trên một mơi trường khơng đồng nhất.
- Có thể được gắn kết dễ dàng vào trong các chương trình ngơn ngữ C và
Fortran.
- Cung cấp một giao thức truyền thông tin cậy: người dùng không cần phải lo
lắng tới thất bại trong truyền thông. Các thất bại này được xử lý bởi các hệ
thống truyền thông cơ sở phía sau.
● Các tính năng chủ yếu của MPI
- Một lượng lớn các hàm truyền thông điểm – điểm (phong phú hơn rất
nhiều so với các mơi trường lập trình song song khác).
- Một lượng lớn các thủ tục truyền thông chọn lọc, được sử dụng để giao
tiếp giữa một nhóm các bộ xử lý trong hệ thống.
- Một ngữ cảnh truyền thông hỗ trợ cho việc thiết kế các thư viện phần mềm
song song.
- Có khả năng xác định các topology truyền thơng.
- Có khả năng định nghĩa các kiểu dữ liệu mới để mô tả các thông báo dựa
trên các dữ liệu không liên tục.
11



● Các tiến trình
Một chương trình MPI bao gồm các bộ xử lý độc lập, thực thi các mã lệnh
riêng của chúng trong một mơ hình MIMD (Multiple Instruction Multiple Data).
Các tập lệnh được thực thi bởi các bộ xử lý không nhất thiết phải giống nhau,
việc truyền thông giữa các bộ xử lý được thực hiện thông qua việc gọi các hàm
truyền thông của MPI.
● Ứng dụng MPI
Một ứng dụng MPI có thể được thực thi như là một tập các nhiệm vụ truyền
thơng đồng thời. Một chương trình bao gồm các đoạn mã của người lập trình
được liên kết với các hàm thư viện được cung cấp bởi phần mềm MPI. Mỗi nhiệm
vụ được chỉ định một thứ hạng (rank) duy nhất trong khoảng 1-> n-1 với các ứng
dụng có n nhiệm vụ. Các hạng này được sử dụng để xác định các nhiệm vụ MPI
khác nhau trong việc gửi và nhận tin cũng như thực hiện các thao tác truyền
thơng nói chung. Nhiệm vụ MPI có thể chạy trên cùng bộ xử lý hoặc các bộ xử lý
khác nhau một cách đồng thời. Lợi ích của các rank là làm cho thao tác phối hợp
độc lập với vị trí vật lý của các thành phần.
2.2.2 Một số vấn đề về hiệu năng
2.2.2.1 Năng lực tính tốn
Việc song song hóa một chương trình nhằm làm cho chương trình đó chạy
nhanh hơn, tuy nhiên chương trình đó sẽ chạy nhanh hơn bao nhiêu lần? Định
luật Amdahl’s cho phép ta xác định điều này. Giả sử xét về khía cạnh thời gian 22
chạy chương trình, một phần p của chương trình có thể song song hóa và phần 1p cịn lại buộc phải chạy tuần tự. Trong trường hợp lý tưởng, nếu thực thi chương
trình sử dụng n bộ xử lý, thời gian chạy chương trình sẽ là 1-p + p/n của thời gian
12


chạy chương trình một cách tuần tự. Đây là hệ quả trực tiếp của định luật Amdahl
áp dụng cho trường hợp thực thi lý tưởng.
Ví dụ: nếu 80% chương trình có thể được song song hóa, và ta có 4 bộ xử

lý, thời gian chạy song song sẽ là: 1 - 0.8 + 0.8/4 = 0.4 tức là bằng 40% thời gian
chạy tuần tự.

Hình 2.1: Khả năng tăng tốc độ tính tốn, trường hợp lý tưởng.
Đối với chương trình trên, thời gian chạy song song sẽ không thể nào nhỏ
hơn 20% thời gian chạy tuần tự cho dù ta sử dụng số lượng vô cùng lớn các bộ xử
lý. Trên thực tế, khi chạy một chương trình song song, thường xuất hiện các chi
phí truyền thơng và việc phân cơng công việc không cân bằng giữa các bộ xử lý.
Do đó thời gian chạy chương trình sẽ là:

13


Hình 2.2: Khả năng tăng tốc độ tính tốn, trường hợp thực tế.

Do vậy để tăng tốc độ của chương trình ta cần:
- Tăng tỉ lệ (thành phần) được song song hóa của chương trình.
- Phân cơng cơng việc một cách công bằng cho các bộ xử lý.
- Giảm tới mức tối thiểu thời gian truyền thông.
2.2.2.2 Cân bằng tải
Giả sử rằng nếu dữ liệu được phân tán trên các bộ nhớ địa phương của các
bộ xử lý trong hệ thống nhiều máy tính, khi đó khối lượng cơng việc của các bộ xử
lý cần phải được phân phối hợp lý trong suốt q trình tính tốn. Trong nhiều
trường hợp, giả sử này là đúng, tuy nhiên trong thực tế điều này không phải lúc
nào cũng thực hiện được. Giải pháp được đưa ra ở đây là cân bằng tải động nhằm
mục đích làm thay đổi sự phân phối khối lượng cơng viêc giữa các bộ xử lý trong
q trình thực hiện tính tốn.
Thơng thường sau khi phân phối khối lượng cơng việc cho các bộ xử lý, q
trình cân bằng tải động thực hiện bốn bước cơ bản sau:
14



- Giám sát hiệu năng của các bộ xử lý.
- Trao đổi thông tin trạng thái giữa các bộ xử lý.
- Tính tốn và ra quyết định phân phối lại khối lượng công việc.
- Thực hiện việc chuyển đổi dữ liệu thực sự.
Để thực hiện được điều này, rất nhiều thuật toán đã được đề xuất. Người ta
phân lớp các thuật toán này theo các chiến lược: tập trung, phân tán hoàn toàn
(fully distributed) và phân tán một nửa (semi distributed).
a. Các thuật toán cân bằng tải tập trung
Các thuật tốn này thường đưa ra quyết định có tính chất tổng thể trong việc
phân phối lại khối lượng công việc cho các bộ xử lý. Một vài thuật toán trong lớp
này sử dụng thơng tin hệ thống có tính tồn cục để lưu trạng thái các máy tính
riêng lẻ. Thơng tin này sẽ giúp thuật tốn phân phối cơng việc một cách dễ dàng.
Tuy nhiên, khối lượng thông tin tăng theo tỉ lệ thuận với số lượng các bộ xử lý, do
đó nó địi hỏi khối lượng lớn bộ nhớ trên một bộ xử lý để lưu thông tin trạng thái.
Vì vậy thuật tốn thuộc lớp này khơng được tiếp cận một cách rộng rãi.
b. Các thuật toán cân bằng tải phân tốn hồn tồn
Trong các thuật tốn dạng này, mỗi bộ xử lý có một bản sao về thơng tin trạng
thái của hệ thống. Các bộ xử lý trao đổi thông tin trạng thái với nhau và sử dụng
các thông tin này để làm thay đổi một cách cục bộ việc phân chia công việc. Tuy
25 nhiên các bộ xử lý chỉ có thơng tin trạng thái cục bộ nên việc cân bằng tải
khơng tốt bằng các thuật tốn cân bằng tải tập trung.
c. Các thuật toán cân bằng tải phân tán một nửa
Các thuật toán thuộc lớp này chia các bộ xử lý thành từng miền. Trong mỗi
miền sử dụng thuật toán cân bằng tải tập trung để phân phối công việc cho các bộ
xử lý thuộc miền đó.
15



2.2.2.3 Sự bế tắc
Các tiến trình xử lý bị rơi vào tình trạng bế tắc nếu mỗi tiến trình đó nắm
giữ tài nguyên mà một vài tiến trình khác đang yêu cầu để xử lý. Lý do tiềm ẩn của
sự bế tắc là do nhiều tiến trình cùng sử dụng nguồn tài ngun chung mà khơng
có sự kiểm sốt tốt.
Đối với các hệ thống đa máy tính, một trong những sự bế tắc phổ biến nhất
là bế tắc vùng đệm (buffer deadlock) xảy ra khi một tiến trình đợi một thơng điệp
mà thơng điệp này có thể khơng bao giờ nhận được do vùng đệm đã đầy.
Bốn điều kiện sau là nguyên nhân gây ra bế tắc:
o Sự loại trừ lẫn nhau: mỗi tiến trình có sự độc quyền trong việc sử
dụng tài ngun của nó.
o Khơng có sự ưu tiên: Mỗi tiến trình khơng bao giờ giải phóng tài
ngun mà nó đang chiếm giữ cho tới tận khi khơng còn sử dụng
chúng nữa.
o Sự chờ đợi tài nguyên: mỗi tiến trình đang chiếm giữ tài nguyên
trong khi lại chờ đợi các tiến trình khác giải phóng chúng.
o Sự chờ đợi giữa các tiến trình: tiến trình chờ đợi tài nguyên mà tiến
trình kế tiếp đang chiếm giữ mà tài ngun đó khơng được giải
phóng.
● Một số giải pháp khắc phục sự bế tắc
o Dị tìm sự bế tắc khi chúng xảy ra và cố gắng khôi phục lại.
o Sử dụng các thông tin yêu cầu tài nguyên của các tiến trình để điều
khiển sự phân phối để khi tiếp tục phân phối các tài nguyên không là
nguyên nhân để các tiến trình rơi vào bế tắc.

16


o Ngăn cấm không để xảy ra điều kiện thứ 4 trong các điều kiện trên.


17


CHƯƠNG 3: MPI TRONG THUẬT TOÁN DIJKSTRA CHO BÀI TOÁN TÌM
KIẾM ĐƯỜNG ĐI NGẮN NHẤT
3.1 Yêu cầu đặt ra cho bài tốn tìm kiếm đường đi ngắn nhất theo giải thuật
Dijkstra
Thuật tốn Dijkstra có thể tính tố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.
Độ phức tạp của thuật toán này là O (n2).
Yêu cầu đặt ra ở đây là với số đỉnh lớn, mỗi đỉnh có số cạnh kề lớn, chi phí
để tìm đường đi ngắn nhất tương ứng với thuật tốn này là không nhỏ.
Để đáp ứng yêu cầu trên với chi phí thấp nhất, cần cải tiến thuật tốn
Dijkstra cổ điển để đáp ứng yêu cầu về thời gian.
3.2 Xây dựng hàm tìm kiếm đường đi ngắn nhất
Phương pháp song song hoá được đề xuất là phương pháp chia tập
đỉnh nguồn. Với phương pháp này, mỗi bộ xử lý sẽ chạy thuật toán Dijkstra tuần
tự cho tập con các đỉnh nguồn.
Để xây dựng thuật toán Dijkstra song song, trước hết cần xây dựng thuật
toán Dijkstra tuần tự phù hợp với yêu cầu đặt ra.
3.2.1 Xây dựng thuật toán Dijkstra tuần tự cho bài tốn
Thuật tốn tìm đường đi ngắn nhất từ đỉnh s đến các đỉnh còn lại
được Dijkstra đề nghị áp dụng cho trường hợp đồ thị có hướng với trọng số
khơng âm. Thuật tốn được thực hiện trên cơ sở gán tạm thời cho các đỉnh. Nhãn
của mỗi đỉnh cho biết cận trên của độ dài đường đi ngắn nhất tới đỉnh đó. Các
nhãn này sẽ được biến đổi (tính lại) nhờ một thủ tục lặp, mà ở mỗi bước lặp một
số đỉnh sẽ có nhãn khơng thay đổi, nhãn đó chính là độ dài đường đi ngắn nhất từ
đỉnh s.
Chương trình thực hiện bài tốn tuần tự
18



19



×