Tải bản đầy đủ (.pdf) (50 trang)

Parallel computing (c4)

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 (1.98 MB, 50 trang )

TS. Ngô Văn Thanh,

Viện Vật lý.

Chuyên ngành : Công nghệ thông tin.
/>

Chương 4: Các thuật toán song song
4.1 Mô hình PRAM
4.2 Các thuật toán song song nhân hai ma trận
4.3 Các thuật toán sắp xếp song song
4.4 Tìm kiếm trên danh bạ
4.5 Các thuật toán song song trên đồ thị
4.5.1 Tìm đường đi ngắn nhất.
4.5.2 Tìm cây khung bé nhất.

4.6 Các thuật toán song song tìm kiếm tổ hợp.

@2009, Ngô Văn Thanh - Viện Vật Lý


4.1 Mô hình PRAM








PRAM: "Parallel random access machine" được đưa ra bởi Fortune và Wyllie


vào năm 1978.
Mô hình PRAM là một mô hình thuộc hệ bộ nhớ chia sẻ (shared memory).
Mục đích: xây dựng mô hình lý thuyết để diễn tả và phân tích các thuật toán.
Dựa trên mô hình này, chúng ta có thể đánh giá mức độ phức tạp một bài
toán.
Mô hình PRAM bao gồm:
 Bộ điều khiển trung tâm.
(control unit)
 Bộ nhớ dùng chung
(global memory)
 p processors P1, P2,… Pp.
 Mỗi một processor có thể có
một bộ nhớ riêng.
(private memory)
@2009, Ngô Văn Thanh - Viện Vật Lý

















Các processor sẽ thực hiện một vòng đồng bộ: đọc – tính toán - ghi. (readcompute-write).
Trong mỗi bước tính một processor hoạt động (active processor) có thể đọc dữ
liệu từ bộ nhớ riêng, xử lý dữ liệu và ghi kết quả trở lại lên bộ nhớ riêng.
Tất cả các active processor cần phải thực hiện cùng một câu lệnh trên các
phần dữ liệu khác nhau.
Mô hình PRAM còn được gọi là máy tính có bộ nhớ dùng chung và xử lý một
dòng lệnh trên nhiều phần dữ liệu: SM SIMD (shared memory, single
instruction, multiple data).
Các thuật toán hoạt động độc lập với nhau và nó chỉ thực hiện trên một vùng
bộ nhớ mà nó được phép truy nhập tại mỗi thời điểm.
Atomic: một công việc được gọi là atomic nếu như nó thực hiện xong hoàn
toàn, hoặc là không thực hiện gì cả.
Các kiểu điều khiển quá trình đọc và viết trong PRAM
 Exclusive read (ER) – chỉ đọc: chỉ có một processor được phép đọc tất cả các
vùng trên bộ nhớ dùng chung tại mỗi thời điểm.
 Exclusive write (EW) – chỉ ghi: chỉ có một processor được phép ghi lên tất cả
các vùng trên bộ nhớ dùng chung tại mỗi thời điểm.
@2009, Ngô Văn Thanh - Viện Vật Lý





Concurrent read (CR) – đọc đồng thời: nhiều processor được phép đọc cùng
một vùng trên bộ nhớ dùng chung tại mỗi thời điểm.
Concurrent write (CW) – ghi đồng thời: nhiều processor được phép ghi đồng
thời lên cùng một vùng trên bộ nhớ dùng chung tại mỗi thời điểm. Sự xung đột
giữa các quá trình ghi dữ liệu được giải quyết theo các quy ước (policy):
Common (thông thường): tất cả các quá trình concurrent write ghi cùng một giá trị

dữ liệu.
Arbitrary (bất kỳ): chỉ một giá trị nào đó được ghi lại, bỏ qua các giá trị khác.
Minimum (tối thiểu) : Chỉ một processor nào đó có chỉ số bé nhất được phép ghi, các
giá trị khác bị loại bỏ.
Reduction (rút gọn): Tất cả các giá trị được rút gọn lại thành một giá trị duy nhất và
được ghi lên bộ nhớ. Phép rút gọn các giá trị phải được thực hiện một trong những
hàm như tổng (sum), tích (product), cực đại (maximum)…









Các lớp con của mô hình PRAM:
EREW PRAM: một processor đọc, một processor ghi.
ERCW PRAM: một processor đọc, nhiều processor ghi.
CREW PRAM: nhiều processor đọc, một processor ghi.
CRCW PRAM: nhiều processor đọc, nhiều processor ghi.
@2009, Ngô Văn Thanh - Viện Vật Lý


Truy cập đa luồng trên mô hình EREW PRAM.









Tại mỗi thời điểm chỉ có một processor được phép ghi hoặc đọc dữ liệu trên
một vùng nhớ đã chọn.
Thuật toán Broadcast_EREW: nhằm thực hiện quá trình truy cập đồng thời
của nhiều processor trên một vùng nhớ.
Giả thiết: địa chỉ của một vùng nhớ là x, và quá trình đọc song song được
thực hiện trên các processors.
 P1 đọc giá trị x, sau đó chuyển cho P2.
 P1 và P2 chuyển tiếp một cách đồng thời cho P3 và P4
 P1, P2, P3, P4 lại chuyển tiếp đồng thời đến P5, P6, P7, P8.
Xét ví dụ p = 8 processor
 L[p] : mảng vùng nhớ dùng chung
 P1 đọc giá trị x từ vùng nhớ riêng, sau đó ghi lên mảng L[1].
 P1 đọc giá trị x từ L[1], ghi vào bộ nhớ riêng đồng thời ghi lên L[2]…

@2009, Ngô Văn Thanh - Viện Vật Lý




Thuật toán Broadcast_EREW:

Algorithm Broadcast_EREW
Processor P1
y (in P1’s private memory) x
L[1]  y
for i=0 to log (p – 1) do
forall Pj, where 2i + 1  j  2i+1 do in parallel

y (in Pj’s private memory)  L[j-2i]
L[j]  y
endfor
endfor
@2009, Ngô Văn Thanh - Viện Vật Lý


Thuật toán tính tổng (sum).
Tính tổng của các phần tử trong mảng A[1..n].





Tính tổng n phần tử của một mảng trong mô hình EREW.
 Giả thiết n là một số lũy thừa của 2, ví dụ: 4, 8, 16, 32,…


Số processor cần sử dụng :

Số vòng lặp : log n
Algorithm Sum_EREW
for i=1 to log n do
forall Pj, where 1  j  n/2 do in parallel
if (2j modulo 2i)=0 then
A[2j]  A[2j] + A[2j-2i-1]
endif
endfor
endfor



@2009, Ngô Văn Thanh - Viện Vật Lý








Bước 1: cả 4 processor cùng tính tổng hai phần tử trong mảng
 Các kết quả được ghi vào vị trí trong mảng: 2, 4, 6, 8

Bước 2: processor P2 và P4
thực hiện phép tổng và ghi
lại kết quả vào A[4] và A[8]
Bước 3: processor P4
thực hiện phép tổng và ghi
lại kết quả vào A[8]
Hạn chế: có nhiều processor
không làm việc sau khi đã
thực hiện xong một phần
công việc của mình.
@2009, Ngô Văn Thanh - Viện Vật Lý


Tính tổng các phần của mảng n phần tử trong mô hình EREW.
 Số processor cần sử dụng : p = n - 1
 Tất cả các processor đều hoạt động.
Algorithm AllSums_EREW

for i=1 to log n do
forall Pj, where 2i-1 + 1  j  n do in parallel
A[j]  A [j] + A[j – 2i-1]
endfor
endfor


@2009, Ngô Văn Thanh - Viện Vật Lý


4.2 Các thuật toán song song nhân hai ma trận

@2009, Ngô Văn Thanh - Viện Vật Lý


Mô hình sử dụng n3 processors.
Xét bài toán nhân hai ma trận có kích thước n × n










Giả thiết hai ma trận: A[1..n, 1..n] và B[1..n, 1..n] đã được nạp vào bộ nhớ
dùng chung.
Giả sử các processor được sắp xếp vào một mảng 3 chiều Pi,j,k với 1  i, j, k  n

Mảng C[i, j, k] với 1  i, j, k  n
Kết quả của phép nhân ma trận chỉ là C[i, j, n] với 1  i, j  n
Thuật toán để giải bài toán tích hai ma trận được chia thành 2 bước:
 Mỗi một processor Pi,j,k thực hiện phép nhân A[i, k]*B[k, j] và được lưu lại
trong mảng C[i, j, k]. Tất cả các processor thực hiện một cách đồng thời.



Áp dụng n2 lần thuật toán tính tổng Sum_EREW theo chiều k (chiều thứ 3)
của mảng C[i, j, k] sau đó lưu kết quả vào C[i, j, n] với 1  i, j  n.

@2009, Ngô Văn Thanh - Viện Vật Lý




Xét bài toán nhân hai ma trận có kích thước n × n
Algorithm MatMult_CREW
/* Step 1 */
forall Pi,j,k, where 1  i, j, k  n do in parallel
C[i,j,k]  A[i,k]*B[k,j]
endfor
/* Step 2 */
for m = 1 to log n do
forall Pi,j,k, where 1  i, j  n & 1  k  n/2
do in parallel
if (2k modulo 2m)=0 then
C[i,j,2k]  C[i,j,2k] + C[i,j, 2k – 2m-1]
endif
endfor

/* Kết quả C[i,j,n], where 1  i,j  n */
endfor
@2009, Ngô Văn Thanh - Viện Vật Lý


@2009, Ngô Văn Thanh - Viện Vật Lý


@2009, Ngô Văn Thanh - Viện Vật Lý


Chia ma trận thành các ma trận con.



Chia mỗi ma trận a[n, n] và b[n, n] thành s2 ma trận con.
Các ma trận con : A[n/s, n/s] và B[n/s, n/s]

for (p=0; p < s; p++)
for (q=0; q < s; q++){
C[p,q] = 0;
for (r=0; rC[p,q] = C[p,q] + A[p,r]*B[r,q]
}
 Trong đó tích hai ma trận A[p,r]*B[r,q] và phép tính tổng được áp dụng
thuật toán tính song song trên các ma trận con.
@2009, Ngô Văn Thanh - Viện Vật Lý


@2009, Ngô Văn Thanh - Viện Vật Lý



Thuật toán tính trực tiếp với n2 processors.





Mỗi một processor Pi,j được dùng để tính cho một phần tử Ci,j.
Processor Pi,j cần phải có dữ liệu của hàng thứ i của ma trận A và cột thứ j
của ma trận B.
Dữ liệu được gửi từng phần riêng biệt cho các processor.

@2009, Ngô Văn Thanh - Viện Vật Lý


Thuật toán tính cấu trúc cây với n processors.

@2009, Ngô Văn Thanh - Viện Vật Lý


Thuật toán đệ quy.
matMult(A, B, s){
if ( s == 1)
C = A * B
else{
s =s/2
P0 = matMult (A[p,p],
P1 = matMult (A[p,q],
P2 = matMult (A[p,p],

P3 = matMult (A[p,q],
P4 = matMult (A[q,p],
P5 = matMult (A[q,q],
P6 = matMult (A[q,p],
P7 = matMult (A[q,q],
C[p,p] = P0 + P1;
C[p,q] = P2 + P3;
C[q,p] = P4 + P5;
C[q,q] = P6 + P7;
}
}

B[p,p],
B[q,p],
B[p,q],
B[q,q],
B[p,p],
B[q,p],
B[p,q],
B[q,q],

s);
s);
s);
s);
s);
s);
s);
s);


@2009, Ngô Văn Thanh - Viện Vật Lý


@2009, Ngô Văn Thanh - Viện Vật Lý


4.3 Các thuật toán sắp xếp song song
Sắp xếp theo vị trí (rank sort)
 Xét một dãy hỗn độn gồm n phần tử a1, a2, …, an.
 Vị trí của một phần tử ai trong dãy các phần tử đã sắp xếp được xác định bởi





số các phần từ bé hơn nó.
 Ví dụ: có ci phần tử bé hơn ai thì phần tử ai có số thứ tự là ci + 1.
Nếu có hai hay nhiều phần tử bằng nhau thì thứ tự sắp xếp dựa trên chỉ số
của các phần tử đó. Phần tử có chỉ số lớn hơn được xem là có giá trị lớn hơn.
 Ví dụ: giả sử ta có hai số ai = aj, nếu i > j thì ta xem như ai > aj.
Đoạn mã chương trình tuần tự
for (i=0; ix=0;
for (j=0; jif (a[i] > a[j]) x++;
b[x] = a[i];
}
@2009, Ngô Văn Thanh - Viện Vật Lý



Đoạn mã chương trình song song sử dụng n processor.



forall (i=0; ix=0;
for (j=0; jif (a[i] > a[j]) x++;
b[x] = a[i];
}


Thuật toán sắp xếp đơn giản, sử dụng mô hình PRAM kiểu CRCW.
 Sử dụng n2 processors được phân bố dạng mảng hai chiều Pi, j với i là chỉ
số hàng và j là chỉ số cột.


Sử dụng hai mảng một chiều A[1 . . n] và C[1 . . n].



Mảng A[1 . . n] dùng để lưu kết quả trên bộ nhớ dùng chung của dãy các
phần tử sẽ được sắp xếp.



Mảng C[1 . . n] dùng để lưu số các phần tử bé hơn cho mỗi một phần tử
trong mảng A[1 . . n].
@2009, Ngô Văn Thanh - Viện Vật Lý



Thuật toán chia thành hai bước:



Mỗi hàng processors thứ i tính giá trị C[i] là số các phần tử bé hơn A[i]. Mỗi
processor Pi, j so sánh A[i] and A[j], rồi cập nhật giá trị của C[i].
 Processor đầu tiên trong mỗi hàng Pi, 1, đưa A[i] vào vị trí của nó trong dãy
được sắp xếp, (vị trí C[i] + 1).
Algorithm Sort_CRCW
/* Step 1 */
forall Pi,j, where 1  i, j  n do in parallel
if A[i] > A[j] or (A[i] = A[j] and i > j) then
C[i]  1
else
C[i]  0
endif
endfor
/* Step 2 */
forall Pi,1, where 1  i  n do in parallel
A[C[i] + 1]  A[i]
endfor


@2009, Ngô Văn Thanh - Viện Vật Lý


@2009, Ngô Văn Thanh - Viện Vật Lý



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×