Nhân ma trận với vecto

Một phần của tài liệu Ứng dụng kỹ thuật phân hoạch và chia để trị trong thuật toán song song (Trang 38)

Trong phần này chúng ta sẽ ứng dụng kĩ thuật chia nhỏ dữ liệu để thiết kế thuật toán song song cho bài toán nhân ma trận vuông dàyAcỡn×nvới vectoxcỡn×1, cho ra kết quả là vectoy.

Thuật toán tuần tự thông thường để nhân một ma trận với vecto: MAT_VECT(A,x,y){ for(i=0;i<n;i+ +){ y[i] =0; for(j=0;j <n−1;j+ +)do y[i] =y[i] +A[i,j]∗x[j]; } }

Độ phức tạp của thuật toán làO(n2).

Chia nhỏ dữ liệu đầu vào theo khối 1-chiều

Trong phần này trình bày thuật toán song song cho phép nhân ma trận với vecto sử dụng kĩ thuật chia nhỏ dữ liệu theo khối 1-chiều.

Ta chia nhỏ ma trậnAvà vectoxthành các khối theo hàng.

Hình 2.9:Phép nhân ma trận cỡ n×n với vecton sử dụng kĩ thuật chia nhỏ thành các khối theo hàng trong trường hợp p=n

Gán mỗi hàng cho một tiến trình Trong trường hợp này, ma trận A được chia nhỏ cho p(p=n) tiến trình và một phần tử của vecto x. Tiến trìnhPi sở hữu hàng A[i] và phần tử x[i] sẽ tính y[i]. Để tính y[i], tiến trình Pi cần toàn bộ vecto x nên thuật toán gồm hai bước sau:

1. Mỗi tiến trình bắt đầu chỉ có một phần tử củax, sử dụng hàm loan tin all-to-all để phân bố phần tử đó đến tất cả các tiến trình còn lại.

2. Tiến trìnhPi tínhy[i] =∑nj=−01(A[i,j]∗x[j]).

Thời gian thực hiện song song

tcomm : Là toàn bộ bước 1, có

tcomm=O(n)

tcomp : Là thời gian thực hiện bước 2, có

tcomp =O(n)

Vậy độ phức tạp thời gian của thuật toán khi sử dụngntiến trình làO(n).

Sử dụng p tiến trình, p< n Mỗi tiến trình sẽ chứa n/p hàng của ma trận A, và một phần của vecto x cỡ n/p. Tương tự như trong phần trên, trong bước 1 ta sử dụng hàm loan tin all-to-all tới p tiến trình và mỗi thông điệp bao gồm n/p dữ liệu, tcomm =tstartuplogb+ (p−1)(n/p)tdata, với p lớn ta có thể xấp xỉ bằng tstartuplogp+ntdata. Trong bước 2, cần thực hiện tínhn/p hàng của ma trậnA lần lượt với vecto xtương ứng, yêu cầun2/pthời gian.

Vậy tổng thời gian thực hiện song song khi sử dụng ptiến trình là tp =n2/p+tstartuplogb+ (p−1)(n/p)tdata

Chia nhỏ thành các khối 2-chiều

Trong phần này ta nghiên cứu thuật toán nhân ma trận với vecto bằng việc chia nhỏ ma trận thành các khối 2-chiều và gán vào cho các tiến trình. Hình 2.10 miêu tả thuật toán song song.

Gán mỗi phần tử cho một tiến trình Ma trận được chia nhỏ thànhn2 khối, ta sử dụng n2 tiến trình để gán mỗi phần từ cho một tiến trình, mỗi phần tử của vecto x được lưu ở ntiến trình ở cột cuối cùng của . Thuật toán song song được thực hiện theo 4 bước sau:

1. Các phần tử vecto chứa trong n tiến trình nằm ở cột cuối cùng được phân phối tới tiến trình trong cùng hàng nằm trên đường chéo chính sử dụng hàm loan tin one-to-one. Thời gian yêu cầu là O(logn)).

Hình 2.10:Phép nhân ma trận-vecto sử dụng chia nhỏ thành khối 2-chiều

2. Các tiến trình nằm trên đường chéo chính sử dụng hàm loan tin one-to-all để phân phối phần tử của xtrong tới tất cả các tiến trình còn lại trong cùng một cột một cách đồng thời. Thời gian yêu cầu làO(logn).

3. Mỗi tiến trìnhPi,jthực hiện phép nhân phần tửA[i, j]với x[j] tương ứng một cách đồng thời. Thời gian yêu cầu làO(1).

4. Sử dụng hàm gộp all-to-one để tính tổng của mỗi hàng, địa chỉ đến là tiến trình nằm ở cột cuối cùng. Thời gian yêu cầu làO(logn).

Vậy, tổng thời gian thực hiện song song của thuật toán tp=O(logn)

Nhưng chi phí để thực hiện

Cost =O(n2logn)

Sử dụng ít hơn n2 tiến trình

Ta chia ma trận thành pkhối, mỗi khối cỡn/(√

p)×n/(√

p). Giả sử, ta sử dụng một mảng lưới hai chiều gồm ptiến trình để lưu mỗi khối của ma trận. Vectoxđược chia nhỏ thành √p phần, mỗi phần gồmn/(√

p)phần tử và được lưu tại tiến trình của cột cuối cùng(√p−1). Thuật toán được thực hiện như sau:

1. Gán các phần của vecto dọc theo đường chéo chính. Để làm việc này, mỗi tiến trình nằm trên cột bên phải nhất của lưới 2-chiều gửi n/(√

p) của mình tới một tiến trình trong cùng hàng nằm trên đường chéo chính. Thời gian yêu cầu trong bước này làtstartup+ (n/(√

p))tdata.

2. Mỗi tiến trình trên đường chéo chính sử dụng hàm loan tin one-to-all theo cột để phân phối n/(√

p) phần tử vecto. Thời gian yêu cầu là (tstartup+ (n/(√

p)))log√p.

3. Mỗi tiến trình thực hiện n2/p phép nhân để tính tại khối và cộng cục bộ n/(√

p) phân tử với nhau. Kết thúc bước này mỗi tiến trình sẽ có n/(√

p)

tổng thành phần. 4. Cộng gộp n/(√

p)giá trị của mỗi hàng lại sử dụng hàm gộp all-to-one, địa chỉ đến là cột bên phải nhất của lưới. Thời gian yêu cầu (bỏ qua thời gian thực hiện phép cộng) là(tstartup+ (n/(√

p)))log√p. Thời gian thực hiện song song của thuật toán:

tp =n2/p+tstartup+ (n/(√

p))tdata+2(tstartup+ (n/(√

p)))log√p

≈n2/p+tstartuplogp+logpn/(√

p)tdata

Một phần của tài liệu Ứng dụng kỹ thuật phân hoạch và chia để trị trong thuật toán song song (Trang 38)

Tải bản đầy đủ (PDF)

(62 trang)