Hình 3-1 Phương pháp khử Gaussian

Một phần của tài liệu Luận văn nghiên cứu các kiến trúc của máy tính song song, các mô hình và các thuật toán trong xử lý song song, (Trang 67 - 69)

Thuật toán Gaussian (tuần tự) được viết như sau:

for(i = 0; i < n-1; i++)/* Trừ hàng đầu tiên */ for(j = i+1; j < n; j++){

m = a[j][i]/a[i][i]; for(k = i; k < n; k++)

a[j][k] = a[j][k] – a[i][k]*m; b[j] = b[j] – b[i] * m;

}

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

Cài đặt thuật toán Gaussian song song.

Từ thuật toán tuần tự nêu trên chúng ta thấy chu trình trong cùng làm thay đổi hàng

j và thực hiện những phép toán độc lập với nhau. Do vậy, có thể chia nhỏ bài toán bằng cách cho mỗi bộ xử lý giữ một hàng thực hiện trên hàng đó. Thuật toán song song thực hiện như sau:

1. Bộ xử lý P0 giữ hàng 0 và phát tán (broadcast) tất cả các phần tử của hàng đầu tiên cho n-1 bộ xử lý còn lại.

2. Các bộ xử lý thực hiện các phép nhân với những hệ số tương ứng và thay đổi trên hàng của mình. Các phần tử ở hàng thứ i được phân tán bởi Pi là: a[i] [i+1], a[i][i+2], …, a[i][n-1] và b[i], tổng cộng là n-i+1 phần tử.

Giá truyền thông: Giả sử các thông điệp được phát tán trong từng nhịp. Thông điệp được phát tán lần thứ i chứa n-i+1 phần tử, suy ra công thức tính thời gian truyền thông của hệ thống sẽ là: tcomm = ∑− = 2 0 n i

(tstartup + (n-i+1)tdata) = ((n-1)tstartup + ((n+1)(n+2)/2 –3)tdata) Vậy độ phức tạp truyền thông là O(n2).

Độ phức tạp tính toán: Các bộ xử lý Pj bên dưới Pi sẽ nhận được dữ liệu từ Pi

chuyển tới và tính toán trên những n-j+2 số của hàng đó. Chúng thực hiện n-j+2 phép nhân và n-j+2 phép cộng. Do đó, số các phép toán cơ sở sẽ là:

tcomp = ∑− = 1 1 n j (n – j + 2) = ((n+3)(n+2)/2 –3) = O(n2).

Sau khi đã chuyển ma trận hệ số về dạng ma trận tam giác trên, chúng ta có thể xây dựng thuật toán song song để giải hệ phương trình thu được theo phương pháp thế quay lui. Ví dụ, áp dụng thuật toán khử Gaussian đưa về hệ phương trình dạng:

2x1 - 2x2 - 2x3 + 1x4 = 5 2x2 - 1x3 + 3x4 = 4

1x3 - 3x4 = 0

4x4 = 4

Giải phương trình cuối cùng thu được x4 = 1 sau đó thế vào phương trình thứ ba (ở trên) ta tính được x3 = 3. Bằng cách đó, chúng ta thế những biến đã được xác định quay lui lên phía trên để tính được x2 = 2, x1 = 7.

Giả sử A là ma trận tam giác trên và b là vector hằng số. Thuật toán giải hệ phương trình tuyến tính Ax = b được xây dựng như sau:

spawn(Pi), 0 < i ≤ p /* tạo ra p tiến trình *?

for(i = n; i > 1; i--){ x[i] = b[i]/a[i,i];

forall Pj where 1 ≤ j ≤ p do { for(k = j; k <i; k += p){ b[k] = b[k] – x[i] * a[k][i]; a[k][i] = 0; } } }

Một phần của tài liệu Luận văn nghiên cứu các kiến trúc của máy tính song song, các mô hình và các thuật toán trong xử lý song song, (Trang 67 - 69)