6. Ý nghĩa khoa học và thực ti ễn ca đề tài
1.3.6. Các lệnh truyền thông tập thể
Một số lệnh thông dụng cho cơ chế truyền thông tập thể gồm có:
- MPI Barrier lệnh đồng bộ hóa (rào chắn), tác vụ tại rào chắn (ba r r ier) phải ch cho đến khi tất cả các tác vụ kháctrên cùng một communicator đều hoàn thành.
MPI_Barrier (comm) Intracomm::Barrier()
- MPI Bcast gửi bản sao c a bộ đệm có kích thước count từ tác vụ root đến tất cả các tiến trình khác trong cùng một communicator.
MPI_Bcast (&buffer,count,datatype,root,comm) Intracomm::Bcast(&buffer,count,datatype,root)
- MPI Scatter phân phát giá trị bộ đệm lên tất cả các tác vụ khác, bộ đệm được chia thành sendcnt phần.
MPI_Scatter(&sendbuf,sendcnt,sendtype,&recvbuf,recvcnt,recvtype,root, comm)
Intracomm::Scatter(&sendbuf,sendcnt,sendtype,&recvbuf,recvcnt,recvtype, root)
- MPI Gather tạo mới một giá trị bộ đệm riêng cho mình từ các mảnh dữ liệu gộp lại. MPI_Gather(&sendbuf,sendcnt,sendtype,&recvbuf,recvcnt,recvtype,root, comm)
Intracomm::Gather(&sendbuf,sendcnt,sendtype,&recvbuf,recvcnt,recvtype, root)
- MPI Allgather tương tự như MPI_GATHER nhưng sao chép bộ đệm mới cho tất cả các tác vụ.
MPI_Allgather(&sendbuf,sendcnt,sendtype,&recvbuf,recvcount,recvtype, comm)
Intracomm::Allgather(&sendbuf,sendcnt,sendtype,&recvbuf,recvcnt,recvtype) - MPI _ Reduce áp dụng các toán tử rút gọn (tham số op) cho tất cả các tác vụ và lưu kết quả vào một tác vụ duy nhất.
MPI_Reduce (&sendbuf,&recvbuf,count,datatype,op,root,comm) Intracomm::Reduce(&sendbuf,&recvbuf,count,datatype,op,root)
- Các toán tử rút gọn gồm có: MPI_MAX (cực đại), MPI_MIN (cực tiểu), MPI_SUM (tổng), MPI_PROD (tích), MPI_LAND (toán tử AND logic), MPI_BAND (toán tử AND bitwise), MPI_LOR (toán tử OR logic), MPI_BOR (toán tử OR bitwise), MPI_LXOR (toán tử XOR logic), MPI_BXOR (toán tử XOR bitwise), MPI_MAXLOC (giá tri cực đại và vi trí), MPI_MINLOC (giá tri cực tiểu và vi trí). - MPI Allreduce tương tự như MPI_Reduce nhưng lưu kết quả vào tất cả các tác vụ.
MPI_Allreduce(&sendbuf,&recvbuf,count, datatype,op,comm) Intracomm::Allreduce(&sendbuf,&recvbuf,count, datatype,op)
- MPI Reduce scatter tương đương với việc áp dụng lệnh MPI_Reduce rồi tới lệnh MPI_Scatter.
MPI_Reduce_scatter(&sendbuf,&recvbuf,recvcount,datatype,op,comm) Intracomm::Reduce_scatter(&sendbuf,&recvbuf,recvcount[], datatype,op)
- MPI Alltoall tương đương với việc áp dụng lệnh MPI_Scatter rồi tới lệnh MPI_Gather.
MPI_Alltoall(&sendbuf,sendcount,sendtype,&recvbuf,recvcnt,recvtype, comm)
Intracomm::Alltoall(&sendbuf,sendcount,sendtype,&recvbuf,recvcnt, recvtype)
- MPI Scan kiểm tra việc thực hiện toán tử rút gọn c a các tác vụ. MPI_Scan(&sendbuf,&recvbuf,count,datatype,op,comm) Intracomm::Scan(&sendbuf,&recvbuf,count, datatype,op) Víăd : #include "mpi.h" #include "stdio.h" #define SIZE 4
int main (int argc, char* argv[] )
{
int numtasks, rank, sendcount, recvcount, source; float sendbuf [SIZE][SIZE] = {
{1.0, 2.0, 3.0, 4.0}, {5.0, 6.0, 7.0, 8.0}, {9.0, 10.0, 11.0, 12.0}, {13.0, 14.0, 15.0, 16.0} }; float recvbuf [SIZE]; //Khoi tao moi truong MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &numtasks); if (numtasks == SIZE)
{
source = 1;
sendcount = SIZE; recvcount = SIZE;
//Gui du lieu tu tac vu co id = 1 toi cac tac vu khac
MPI_Scatter(sendbuf,sendcount,MPI_FLOAT,recvbuf,recvcount, MPI_FLOAT,source,MPI_COMM_WORLD);
//In ra du lieu trong cac tac vu
printf("Id task= %d ket qua: %f %f %f %f\n",
rank, recvbuf[0], recvbuf[1],recvbuf[2],recvbuf[3]); }
else printf("So tac su dung nen bang: %d. Ket thuc.\n",SIZE); MPI_Finalize();
} Kết quả
1.4. K t lu năch ng
Để giải những bài toán đặt ra một cách hiệu quả trên những máy tính mà chúng ta có, vấn đề chính là làm thếnào để xây dựng được những thuật toán song song. Cách làm khá thông dụng là biến đổi các thuật toán tuần tự về song song, hay chuyển từ một dạng song song về dạng song song phù hợp hơn nhưng vẫn bảo toàn được tính tương đương trong tính toán.
Dựa vào bốn công đoạn và những nguyên lý thiết kế chính: nguyên lý lập lịch, nguyên lý hình ống, nguyên lý chia để trị, nguyên lý đồ thị phụ thuộc dữ liệu, nguyên lý điều kiện tranh đua để xây dựng một số thuật toán song song.
Đểđánh giá được tính hiệu quả c a thuật toán song song thư ng phải dựa vào độ ph c tạp th i gian c a thuật toán. Độ ph c tạp th i gian c a thuật toán song song không chỉ phụ thuộc vào kích cỡ c a dữ liệu đầu vào mà còn phụ thuộc vào kiến trúc máy tính song song và sốlượng các bộ xửlý được phép sử dụng trong hệ thống.
CH NGă2ă
CÁC THU TăTOỄNăTRểNăĐ TH
2.1.Thu t toán Dijkstra tìmăđ ngăđiăng n nh t 2.1.1.Mô tả thuật toán
Thuật toán Dijkstra [3], mang tên c a nhà khoa học máy tính ngư i Hà Lan Edsger Dijkstra, là một thuật toán giải quyết bài toán tìm đư ng đi ngắn nhất nguồn đơn trong một đồ thịcó hướng không có cạnh mang trọng số âm.
Phát biểu bài toá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 u0 là 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) = k1
Trong các đỉnh v # u0 và v # u1, tìm đỉnh có khoảng cách k2 đế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) = k2
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 :
+ Đầu vào: Đồ thị liên thông G(V,E,w), w(i,j) > 0 (i,j) E, đỉnh nguồn a.
+ Đầu ra : Chiều dài đư ng đi ngắn nhất và đư ng đi ngắn nhất từ đỉnh a đến các đỉnh c a đồ thị.
+ Phương pháp :
B c 1: Gán L(a):= 0. Với mọi đỉnh x a gán L(x) = . Đặt T:=V.
B c 2: Chọn v T, v chưa xét sao cho L(v) có giá trị nhỏ nhất. Đặt T := T - {v}, đánh dấu đỉnh v đã xét.
B c 3: Nếu T= , kết thúc. L(z), z V, z a là chiều dài đư ng đi ngắn nhất từa đến z. Từ z lần ngược theo đỉnh được ghi nhớta có đư ng đi ngắn nhất. (L(z) không thay đổi, nếu L(z) = thì không tồn tại đư ng đi.
Ngược lại sang b c 4.
thay đổi thì ghi nhớđỉnh v cạnh đỉnh x bằng mảng truoc[] (với truoc[] c a đỉnh 1 = 0) để sau này xây dựng đư ng đi ngắn nhất.
Quay vềb c 2.
Độ 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 quá n – 1 phép so sánh. Do đó thuật toán có độ ph c tạp O(n2).
2.1.2.Ví dụ minh họa
Dùng thuật toán Dijkstra, tìm đư ng đi ngắn nhất từa đến z trong đồ thị sau:
+ Ta có: V = {a,b,c,d,e,z}; S =
+ Bước 1: ta gán 0 cho đỉnh a và gán cho các đỉnh còn lại. L(a) = 0.
+ Trong các đỉnh không thuộc S = {a} và kề với a có 2 đỉnh b,c. Ta có:
L(b) = min {∞, L(a) + w(ab)} = min {∞, 0 + 4} = 4.
L(c) = min {∞, L(a) + w(ac)} = min {∞, 0 + 2} = 2. Ta có: L(c) nhỏ nhất nên c S, S = {a, c}.
+ Trong các đỉnh không thuộc S mà kề với c có 3 đỉnh b, d, e. Ta có: L(b) = min {4, L(c) + w(cb)} = min{4,2+1} = 3.
L(e) = min {∞, L(c) + w(ce)} = min{∞,12} = 12.
L(d) = min{∞,L(c) + w(cd)} = min{∞,2 + 8} = 10.
+ Trong các đỉnh không thuộc S mà kề với b có đỉnh d. Ta có: L(d) = min {10, L(b) + w(bd)} = min {10, 3 + 5} = 8.
d S, S = {a, b, c, d}
+ Trong các đỉnh không thuộc S mà kề với d có đỉnh e, z. Ta có: L(e) = min {12, L(d) + w(de)} = min{12, 2+8} = 10.
L(z) = min {∞, L(d) + w(dz)} = min{∞, 8+6} = 14.
Ta có: L(e) nhỏ nhất nên e S, S = {a, b, c, d, e}.
+ Trong các đỉnh không thuộc S mà kề với e có đỉnh z. Ta có: L(z) = min {14, L(e) + w(ez)} = min{14, 10+3} = 13.
Ví dụ 2: Cho đồ thị được biểu diễn sau đây, sau khi thuật toán thực hiện xong thì kết quảđược ghi nhớ lên các nhãn đỉnh tương ng.
Hình 2.1. Ghi nhớ kết quảtính được trên đồ thị
Mảng truoc[]=0 1 1 2 3 3 6 4 8 11 7 11 (Mảng ghi nhớ truoc [] dùng để tìm đư ng đi, với truoc[1]=0)
Mảng độ dài L = 0 7 5 13 15 15 17 18 38 39 24 29 Vậy kết quả từđỉnh 1 đến tất cảcác đỉnh là: đến 2=7 (12) đến 3=5 (13) đến 4=13 (124) đến 5=15 (135) đến 6=15 (136) đến 7=17 (1367) đến 8=18 (1248) đến 9=38 (1248) đến 10=39 (13671110) đến 11= 24 (136711) đến 12=29 (13671112) (0) (7)1 (5)1 (13)2 (15)3 (15)3 (17)6 (24)7 (18)4 (38)8 (39)11 1 2 3 4 7 4 7 5 6 1 11 5 7 6 8 11 9 10 0 15 20 6 7 10 2 20 10 10 6 4 5 18 10 15 12 5 (29) 11
2.2.Thu t toán tu n tự Prim tìm cây khung cực ti u 2.2.1.Mô tả thuật toán
Đầu vào: Đồ thị G=(V,E) với trọng số. Các đỉnh ký hiệu là 1,2,3,…,n
Trọng số c a cạnh (i,j), (i,j)E, ký hiệu là cij, đỉnh nguồn a, 1 bộ xử lý chính và m-1 bộ xử lý phụ.
Đầu ra: Cây ph nhỏ nhất T, Hoặc kết luận đồ thị không liên thông. Các bước: (1) Kh i tạo: T là đồ thị gồm một đỉnh 1 và không có cạnh (2) Kiểm tra điều kiện kết thúc: Nếu T có n-1 cạnh, kết thúc, kết luận: T là cây ph nhỏ nhất. Ngược lại sang bước (3) (3) Thêm cạnh: Ký hiệu M là tập M ={ (i,j)E| iT&jT} Tìm cạnh (k,h)M sao cho : ckh=min{cij|(i,j)M}
Nếu ckh<∞, thêm cạnh (k,h) và đỉnh h vào T, sang bước (2). Ngược lại t c M=
, kết thúc. Kết luận đồ thị G không liên thông
2.2.2.Ví dụ minh họa
Tìm cây ph nhỏ nhất c a đồ thị
(1) Kh i tạo: T chỉcó đỉnh a không có cạnh T:= ({a},), d(T):=0
(2) Kiểm tra: Số cạnh c a T là 0, sang bước (3)
(3) Thêm cạnh: tập M={(a,e),(a,c),(a,b)} Ta có cac=2=min{cij|(i,j)M}
Thêm đỉnh c và cạnh (a,c) vào T, T:= ({a,c},{(a,c)}), d(T):=d(T)+ cac=2
(2) Kiểm tra: Số cạnh c a T là 1, sang bước (3)
(3) Thêm cạnh: tập M={(a,e),(a,b),(c,e),(c,f),(c,d)} Ta có ccd=1=min{cij|(i,j)M}
Thêm đỉnh d và cạnh (c,d) vào T, T:= ({a,c,d},{(a,c),(c,d)}), d(T):=d(T)+ ccd=2+1=3 a b d c e f 4 3 3 5 2 2 6 1 6
(2) Kiểm tra: Số cạnh c a T là 2, sang bước (3)
(3) Thêm cạnh: tập M={(a,e),(a,b),(c,e),(c,f),(d,b),(d,f)} Ta có cae=3=min{cij|(i,j)M}
Thêm đỉnh e và cạnh (a,e) vào T, T:= ({a,c,d,e},{(a,c),(c,d),(a,e)}), d(T):=d(T)+ cae=3+3=6
(2) Kiểm tra: Số cạnh c a T là 3, sang bước (3)
(3) Thêm cạnh: tập M={(a,b),(c,f),(d,b),(d,f),(e,f)}Ta có cef=2=min{cij|(i,j)M }
Thêm đỉnh f và cạnh (e,f) vào T,
T:= ({a,c,d,e,f},{(a,c),(c,d),(a,e),(e,f)}), d(T):=d(T)+ cef=6+2=8
(2) Kiểm tra: Số cạnh c a T là 4, sang bước (3)
(3) Thêm cạnh: tập M={(a,b),(d,b)}Ta có cab=4=min{cij|(i,j)M}
Thêm đỉnh b và cạnh (a,b) vào T, T:= ({a,c,d,e,f,b},{(a,c),(c,d),(a,e),(e,f),(a,b)}), d(T):=d(T)+ cab=8+4=12 (2) Kiểm tra: Số cạnh c a T là 5, kết thúc. Kết luận: Ta có cây ph nhỏ nhất gồm các cạnh: (a,c),(c,d),(a,e),(e,f),(a,b) Với tổng trọng số là: d(T):=2+1+3+2+4=12 a b d c e f 4 3 3 5 2 2 6 1 6
CH NGă3
NGHIÊN C U NG D NG THU T TOÁN SONG SONG
TRÊN TH ăVI N MPI
3.1.Thu t toán song song Prim tìm cây khung cực ti u 3.1.1. Cách thực hiện thuật toán
Đ u vào: Đồ thị G=(V,E) với trọng số. Các đỉnh ký hiệu là 1,2,3,…,n
Trọng số c a cạnh (i,j), (i,j)E, ký hiệu là cij, , đỉnh nguồn a, 1 bộ xử lý chính và m-1 bộ xử lý phụ.
Đ u ra: Cây ph nhỏ nhất T, hoặc kết luận đồ thị không liên thông
Cácăb c thực hi n:
B c 1: Chia số đỉnh n và ma trận trọng số tương ng c a đồ thị cho m BXL (mỗi BXL nhận n/m đỉnh). BXL 1 đặt tên P1 có tập cạnh là E1, BXL 2 là P2 có tập cạnh là E2, …, BXL m là Pm có tập cạnh là Em
B c 2: Bộ xử lý P1 gửi một đỉnh ban đầu lên cho các BXL P1,P2,…,Pm
B c 3: Trên mỗi BXL (P1,P2,…,Pm) thực hiện các bước sau đây: Kh i tạo T= (1 đỉnh mà P1 đã phát ra bước 2, không cạnh)
B c 4: Kiểm tra điều kiện kết thúc:Nếu T có n-1 cạnh thì kết thúc, ngược lại sang bước 5
B c 5: Thêm cạnh: Trên mỗi BXL Ký hiệu Mk là tập trên BXL k Mk={(i,j) Ek iT&jT(k=1,…,m)}
Trên mỗi BXL tìm cạnh (xk,yk) Mk(k=1,…,m)
sao cho c(xkyk) =min{cij|(i,j) Mk(k=1,…,m)}
Nếu tất cả các Mk trên tất cả m BXL là rổng thì kết thúc, kết luận đồ thị không liên thông, ngược lại sang bước 6
B c 6: BXL P1 thực hiện tìm c( xy)nhỏ nhất trên tất cả m BXL . BXL P1 thêm cạnh (x,y) và đỉnh y vào T
BXL P1 chuyển số cạnh c a T và đỉnh y lên tất cảcác BXL để lặp lại
3.1.2.Ví dụ thực hiện thuật toán song song Prim
(1) P1 nhận 3 đỉnh a,b,c tương ng với đồ thị
(2) P1 nhận đỉnh a mà chính P1 gửi (3) T:= ({a}, , d(T):=0
(4) kiểm tra: số cạnh c a T=0 sang bước (5) (5) Thêm cạnh: tập M1={(a,b),(a,c)}
Ta có cac=2=min{cij|(i,j) 1}
(4) kiểm tra: số cạnh c a T=1 sang bước (5) (5) Thêm cạnh: tập M1={(a,b)}
Ta có cab=4=min{cij|(i,j) 1}
(1) P2 nhận 3 đỉnh d,e,f tương ng với đồ thị
(2) P2 nhận đỉnh a mà P1 gửi lên (3) T:= ({a}, , d(T):=0
(4) kiểm tra: số cạnh c a T=0 sang bước (5) (5) Thêm cạnh: tập M2={(a,e)}
Ta có cae=3=min{cij|(i,j) 2}
(4) kiểm tra: số cạnh c a T=1 sang bước (5)
(5)Thêmcạnh: tập M2={(a,e),(c,d),(c,e),(c,f)} Ta có ccd=1=min{cij|(i,j) 2} P 2 a b c a ∞ 4 2 b 4 ∞ ∞ c 2 ∞ ∞ d ∞ 5 1 e 3 ∞ 6 f ∞ ∞ 3 a b d c e f 4 3 3 2 5 6 1 d e f a ∞ 3 ∞ b 5 ∞ ∞ c 1 6 3 d ∞ ∞ 6 e ∞ ∞ 2 f 6 2 ∞ a b d c e f 3 3 5 2 6 1 6 (6) P1 Kiểm tra cac=2 ,cae=3 trên p1 và p2 ,có cac=2 là minThêm đỉnh c và cạnh (a,c) vào T, T:= ({a,c},{(a,c)}), d(T):=d(T)+ cac=2. P1 Chuyển đỉnh c và số cạnh c a T=1
(6) P1 Kiểm tra cab=4 ,ccd=1 trên p1 và p2 có ccd=1 là minThêm đỉnh d và cạnh(c,d) vào T, T:= ({a,c,d},{(a,c),(c,d)}), d(T):=d(T)+ ccd=2+1=3. P1Chuyển đỉnh d và số cạnh c a T=2 lên 2 BXL ế ụ ểm tra bướ a b d c e f 4 3 3 5 2 2 6 1 6
(5) Thêm cạnh: tập: M1={(a,b),(d,b)}
Ta có cab=4=min{cij|(i,j) 1}
(4) Kiểm tra: Số cạnh c a T=3, sang bước (5) (5) Thêm cạnh: tập M1={(a,b),(d,b)}
Ta có cab=4=min{cij|(i,j) 1}
(4) Kiểm tra: Số cạnh c a T=4, sang bước 5 (5) Thêm cạnh: tập M1={(a,b),(d,b)} Ta có cab=4=min{cij|(i,j) 1} (4) Kiểm tra: Số cạnh c a T=5. Kết luận, (5) Thêm cạnh: tập M2={(a,e),(c,e),(c,f),(d,f)} Ta có cae=3=min{cij|(i,j) 2}
(4) Kiểm tra: Số cạnh c a T=3, sang bước(3) (5) Thêm cạnh: tập M2={(e,f),(c,f),(d,f)} Ta có cef=2=min{cij|(i,j) 2}
(5) Kiểm tra: Số cạnh c a T=4, sang bước 5 (5) Thêm cạnh: tập M2=
(5) Kiểm tra: Số cạnh c a T=5. Kết luận (6) P1 Kiểm tra cab=4 ,cae=3 trên p1 và p2 có cae=3 là
minThêm đỉnh e và cạnh(a,e) vào T, T:= ({a,c,d,e},{(a,c),(c,d),(a,e)}), d(T):=d(T)+ cae=3+3=6. P1 Chuyển đỉnh e và số cạnh c a T=3 lên 2 BXL để tiếp tục kiểm tra bước 4
(6) P1 Kiểm tra cab=4 ,cef=2 trên p1 và p2 có cef=2 là minThêm đỉnh f và cạnh(e,f) vào T,
T:=({a,c,d,e,f},{(a,c),(c,d),(a,e),(e,f)}),
d(T):=d(T)+ cab=6+2=8. P1 Chuyển đỉnh f và số cạnh c a T=4 lên 2 BXL để tiếp tục kiểm tra bướ
(6) P1 Kiểm tra cab=4 trên p1 và p2 có cab=4 là minThêm đỉnh b và cạnh (a,b) vào T,
T:=({a,c,d,e,f,b},{(a,c),(c,d),(a,e),(e,f),(a,b)}), d(T):=d(T)+ cab=8+4=12. P1 Chuyển đỉnh b và số cạnh c a T=5 lên 2 BXL để tiếp tục kiểm tra bước 4
T là cây khung nhỏ nhất qua các cạnh
3.2.Thu t toán song song Dijkstraă tìmă đ ngă điă ng n nh t t m tă đ nh
đ n t t c cácăđnh
3.2.1.Cách thực hiện thuật toán
Đầu vào: Đồ thị liên thông G(V,E,w), w(i,j) ≥ 0 (i,j)E, đỉnh nguồn a, 1 bộ xử lý chính và m-1 bộ xử lý phụ.
Đầu ra: Chiều dài đư ng đi ngắn nhất là đư ng đi ngắn nhất từ đỉnh a đến tất cảcác đỉnh trên đồ thị.
ụăt ng: Chia đồ thị ban đầu cho m bộ xử lý (P0, P1,…,Pm-1), cùng tính toán đồng th i, mỗi bộBXL đảm nhận n/m đỉnh c a đồ thị (n là sốđỉnh c a đồ thị, m là số BXL ) và ma trận trọng số n/m cột và n dòng
+Phương pháp:
B c 1. B x lý chính thực hi n
- Gán L(a):=0. Với mọi đỉnh x ≠ a, x thuộc bộ xửlý chính gán L(x)= ∞. - Chia đều sốđỉnh và ma trận trọng sốđể gửi cho m BXL.
Cách chia đều như sau: giả sửta có n đỉnh và m bộ xử lý P0,P1,…,Pm-1. Gọi ni là sốđỉnh c a bộ xử lý Pi (i=0,…,m-1).
- Nếu n chia hết cho m thì For i=0 to m-1 do
- Nếu n không chia hết cho m thì For i=0 to m-2 do
- Ta xây dựng Ti (i=0,…,m-1) là tập đỉnh mà bộ xử lý Pi sẽ nhận như sau: BN=0; kt là số phần tử mà các bộ xử lý nhận for (k=0; k<m; k++) { Tk=; for (j=0; j<kt; j++) Tk=Tk+{j+ BN+1} }
- Ta xây dựng Ai (i=0,…,m-1) là ma trận trọng số mà bộ xử lý Pi sẽ nhận như sau: Gọi A là ma trận trọng số c a đồ thị đầu vào thì A=(wij)nxn. m n m n nm 1 ( 1). m n ni m n ni / m n k BN .
Hình 3.1. Ma trận trọng số của đồ thị
Suy ra: sẽđược bộ xử lý Pi(i=0,…,m-1) nhận.
- Gửi Ti (i=1,..,m-1), Ai (i=1,..,m-1), L(x), xTi (i=1,..,m-1), cho m-1 BXL phụ P1,P2,…,Pm-1.
B c 2. m b x lýthực hi n
- Trong m bộ xử lý (trừ bộ xử lý chính), gán L(xi)= ∞, sao cho xi thuộc Ti(i=1,…,m-1).
- Trên m bộ xử lý tìm Li(xi)= min{L(xi), xiTi(i=0,…,m-1), xichưa xét}. - Các bộ xử lý phụ gửi Li(xi) về bộ xử lý chính.
B c 3. B x lý chính thực hi n
- Bộ xử lý chính tìm l(v)= min{Li(xi), i=0,..,m-1}trên m bộ xử lý. - Chuyển đỉnh v lên m bộ xửlý để thực hiện các bước tiếp theo.
B c 4. m b x lý thực hi n
- Trên m BXL kiểm tra nếu vTi, Ti=Ti\{v} (i=0,…,m-1), đánh đấu đỉnh v đã
xét.
- Kiểm tra nếu Ti (i=0,..,m-1) = , thì bộ xử lý th i kết thúc, sang bước 6. - Ngược lại, sang bước 5.
B c 5. m b x lý thực hi n for x Ti(i=0,…,m-1) kề với v