Bài giảng Xử lý song song
NỘI DUNG CHƢƠNG TRÌNH
PHẦN 1: TÍNH TOÁN SONG SONG
Chương 1 KIẾN TRÚC VÀ CÁC LOẠI MÁY TINH SONG SONG
Chương 2 CÁC THÀNH PHẦN CỦA MÁY TINH SONG SONG
Chương 3 GIỚI THIỆU VỀ LẬP TRÌNH SONG SONG
Chương 4 CÁC MÔ HÌNH LẬP TRÌNH SONG SONG
Chương 5 THUẬT TOÁN SONG SONG
PHẦN 2: XỬ LÝ SONG SONG CÁC CƠ SỞ DỮ LIỆU
(Đọc thêm)
Chương 6 TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU SONG SONG
Chương 7 TỐI ƢU HÓA TRUY VẤN SONG SONG
Chương 8 LẬP LỊCH TỐI ƢU CHO CÂU TRUY VẤN SONG SONG
N GiẢI ĐƢỢC TRÊN MÔ HÌNH PRAM 7/17/2010 51 301 1. Khối các lệnh song song: Parbegin và Parend (Cobegin và Coend): Giả sử các lệnh S1, S2, … Sn được thực hiện trên n tiến trình riêng biệt 5.5 CÁC CẤU TRÚC LỆNH SONG SONG Parbegin S1; S2; ... Sn; Parend Cobegin S1; S2; ... Sn; Coend 302 2. Cấu trúc forall (parfor) Nhiều khi một số tiến trình (câu lệnh) tương tự nhau cần phải bắt đầu thực hiện và cùng lặp lại một số lần. Điều này có thể thực hiện được bằng cấu trúc forall 5.5 CÁC CẤU TRÚC LỆNH SONG SONG Forall(i=0;i<n; i++){ S1; S2; ... Sn; } Parend For(i=0;i<n;i++){ S1; S2; ... Sn; } In parallel Hoặc 303 1. Thuật toán sắp xếp theo hạng Bài toán: cho mảng a[n] các số nguyên. Hãy sắp xếp tăng dần các phần tử của mảng. Ý tƣởng thuật toán: Trong cách sắp xếp này, số những số nhỏ hơn một số đã chọn sẽ được đếm. Số đếm được sẽ xác định vị trí của phần tử đã được chọn trong danh sách cần sắp xếp. Giả sử có n số được lưu giữ trong mảng a[n] và kết quả sau khi sắp xếp là b[n]. Thuật toán tuần tự: 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG for(i = 0; i < n; i++){ x = o; for(j = 0; i < n; j++) if(a[i] > a[j]) x++; b[x] = a[i]; } Độ phức tạp O(n2) 304 Thuật toán song song-Sử dụng n bộ xử lý Giả sử ta có n bộ xử lý. Mỗi bộ xử lý được cấp một số trong dãy số cho trước và nó phải tìm vị trí của số đó trong dãy được sắp xếp. 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG for(i=0; i<n; i++){ // n bộ xử lý thực hiện song song x = o; for(j=0; i<n; j++) if(a[i]>a[j]) x++; // đếm số phần tử nhỏ hơn b[x] = a[i]; // Sao sang bảng được sắp xếp } Nhận xét: Tất cả n bộ xử lý thực hiện song song nên thuật toán có độ phức tạp là O(n) (tuyến tính). (Xem tài liệu Thuật toán song song-Sử dụng n2 bộ xử lý) 305 2. Thuật toán sắp xếp so sánh và đổi chổ Bài toán: cho mảng a[n] các số nguyên. Hãy sắp xếp tăng dần các phần tử của mảng. Ý tƣởng thuật toán: so sánh hai phần tử liền kề nhau. Nếu chưa theo thứ tự thì đổi chổ nhau. Quá trình lặp lại cho đến khi nào không còn cặp nào không thỏa mãn thì dừng. Thuật toán tuần tự: 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG for(i=n-1; i > 0; i--){ for(j=0; j < i; i++){ k = j + 1; if(a[j] > a[k]){ temp = a[j]; a[j] = a[k]; a[k] = temp; } } } 306 2. Thuật toán sắp xếp so sánh và đổi chổ Thuật toán song song: Ý tƣởng thuật toán • Dùng n tiến trình kết hợp theo nguyên lý hình ống để sắp xếp mảng a[n] • Hệ thống được chia thành 2 pha: pha chẵn và pha lẻ - Pha chẵn: gồm các tiến trình được đánh số chẵn so sánh với những tiến trình tiếp theo (số lẻ), nếu nó giữ phần tử lớp hơn thì trao đổi dữ liệu với tiến trình đó. - Pha lẻ: các tiến trình được đánh số lẻ hoạt động tương tự như trên 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG 7/17/2010 52 307 Ví dụ: n=8 và a = (4 , 2 , 7 , 8 , 5 , 1 , 3 , 6) 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG Pha/TT P0 P1 P2 P3 P4 P5 P6 P7 0 4 2 7 8 5 1 3 6 1 2 4 7 8 1 5 3 6 2 2 4 7 1 8 3 5 6 3 2 4 1 7 3 8 5 6 4 2 1 4 3 7 5 8 6 5 1 2 3 4 5 7 6 8 6 1 2 3 4 5 6 7 8 7 1 2 3 4 5 6 7 8 Sắp xếp theo nguyên lý hình ống Đổi chổ Không đổi chổ 308 Thuật toán song song: Giả sử A lưu dữ liệu ở tiến trình lẻ và B lưu dữ liệu ở tiến trình chẵn Thuật toán song song theo hình ống được mô tả theo MPI như sau: 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG Pha chẵn Pi , i = 0, 2, ..., n-2 Pi , i = 1, 3, ..., n-3 recv(&A, Pi+1); send(&A, Pi-1); send(&B, Pi+1); recv(&B, Pi-1); if (A>B) B=A ; if (A>B) A=B ; Pha lẻ Pi , i = 1, 3, ..., n-3 Pi , i = 0, 2, ..., n-2 send (&A, Pi+1); recv (&A, Pi-1); recv (&B, Pi+1); send(&B, Pi-1); if (A>B) A=B ; if (A>B) B=A ; 309 Kết hợp 2 pha ta đƣợc thuật toán song song: 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG Pi , i = 1, 3, ..., n-3 Pi , i = 0, 2, ..., n-2 send(&A,Pi-1); recv(&A,Pi+1); recv(&B,Pi-1); send(&B,Pi-1); if (A>B) A=B ; if (A>B) B=A ; if (i2){ send(&A,Pi+1); recv(&A,Pi-1); recv(&B,Pi+1); send(&B,Pi-1); if (A>B) A=B; if (A>B) B=A; } } Nhận xét: thuật toán có độ phức tạp là O(n). 310 3. Thuật toán sắp xếp MergeSort Bài toán: cho mảng a[n] các số nguyên. Hãy sắp xếp tăng dần các phần tử của mảng. Ý tƣởng thuật toán (dùng nguyên tắc chia để trị) • Chia mảng a thành 2 phần • Mỗi phần lại chia đôi tiếp cho đến khi mỗi phần nhỏ chỉ có 1 phần tử • Từng cặp được ghép lại theo thứ tự sắp xếp Ví dụ Mảng a = (4, 2, 7, 8, 5, 1, 3, 6) 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG 311 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG 63158724 8724 6315 24 87 15 63 4 2 7 8 5 1 3 6 42 87 51 63 8742 6531 87654321 Chia đôi danh sach Ghép kết hợp 312 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG Chia danh sách thành từng cặp và phân công cho các BXL (4, 2, 7, 8, 5, 1, 3, 6) P0 P0 P4 P0 P2 P4 P6 P0 P1 P3 P5P2 P4 P6 P7 P0 P2 P4 P6 P0 P4 P0 Nhận xét: thuật toán có ĐPT O(nlogn) 7/17/2010 53 313 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG Xác định thời gian truyền thông: tcomm a. Trong giai đoạn phân chia dữ liệu Truyền dữ liệu Truyền thông của BXL • tstartup + (n/2)tdata P0 P4 • tstartup + (n/4)tdata P0 P2; P4 P6 • tstartup + (n/8)tdata P0 P1; P2 P3; P4 P5; P6 P7 b. Trong giai đoạn ghép kết hợp có những sự trao đổi dữ liệu: • tstartup + (n/8)tdata P0 P1; P2 P3; P4 P5; P6 P7 • tstartup + (n/4)tdata P0 P2; P4 P6 Giả sử có p BXL thì cả hai giai đoạn sẽ thực hiện đƣợc log p bƣớc. Vậy chi phí truyền thông của cả hai giai đoạn là: tcomm = 2(tstartup+ (n/2)tdata + tstartup + (n/4)tdata +tstartup + (n/8)tdata …) = 2(log p)tstartup + 2ntdata Nhắc lại: + tstartup là thời gian cần thiết để gửi những thông điệp không phải là dữ liệu. Nó bao gồm cả thời gian để đóng gói thông điệp ở nơi gửi và thời gian mở gói ở nơi nhận. Để đơn giản chúng ta giả thiết thời gian này là hằng số. + tdata là thời gian cần thiết để chuyển một mục dữ liệu (data item) từ nơi gửi tới nơi nhận, được giả thiết là hàng số và n là số mục dữ liệu được trao đổi tro g hệ thống. 314 • Việc tính toán chỉ thực hiện việc ghép các danh sách con để tạo danh sách lớn hơn. • Việc ghép 2 danh sách con được thực hiện bằng cách duyệt lần lượt từ đầu hai danh sách để tìm phần tử nhỏ hơn đưa vào danh sách mới. • Để ghép 2 danh sách con có n phần tử thì cần nhiều nhất 2n-1 bước so sánh. c. Xác định thời gian tính toán: tcomp Nhận xét 315 Xác định thời gian tính toán Tcomp=1 P0, P2, P4, P6 Tcomp=3 P0, P2 Tcomp=7 P0 Tổng quát, Tcomp= 1 + 3 + ... + (2i - 1), i = 1, ..., logn Vậy độ phức tạp thời gian tính toán của TTSS sử dụng n BXL là O(n) 316 3. Thuật toán sắp xếp QuickSort a. Bài toán: Giả sử cần sắp xếp một dãy con kể từ vị trí start đến end trong danh sách list[ ] với pilot là vị trí của phần tử trong danh sách được chọn làm hoa tiêu. b. Ý tƣởng thuật toán • Chia dãy sắp xếp thành 2 danh sách con sao cho danh sách 1 gồm các phần tử nhỏ hơn các phần tử của danh sách 2 • Chọn một phần tử hoa tiêu (pivot) để thực hiện việc phân chia • Lặp lại việc phân chia trên cho từng danh sách đến khi nào những danh sách cuối cùng chỉ có 1 phần tử 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG 317 c. Thuật toán QuickSort tuần tự đƣợc viết đệ qui QuickSort(list, start, end){ if (start < end){ Partition (list, start, end, pilot); QuickSort (list, start, pilot); QuickSort (list, pilot+1, end); } } Trong đó, Partition() là hàm chuyển tất cả các phần tử nhỏ hơn hoặc bằng phần tử pilot về trước phần tử pilot, những phần tử lớn hơn sẽ được đặt sau pilot. Thực hiện phân tách xong thì pilot là vị trí của phần tử hoa tiêu ở danh sách mới 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG 318 d. Ví dụ 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG 63158724 4123 6875 312 4 5 687 21 3 76 8 Danh sách cần sắp xếp pilot Thuật toán QuickSort tuần tự có ĐPT O(nlogn) Reference: Parallel Programming by Barry Wilkinson 7/17/2010 54 319 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG e. Song song hóa QuickSort Phát biểu lại QuickSort • Chọn phần tử pilot để chia dãy thành hai phần: bên trái là những phần tử nhỏ hơn hoặc bằng pilot và bên phải là những phần tử lớn hơn pilot . • Phần tử pilot được chèn vào giữa hai dãy con được tách và nó là vị trí đã được sắp xếp sau khi thực hiện bước 1. • Bước 1 lặp lại một cách đệ qui cho đến khi các dãy con chỉ còn lại một phần tử. 320 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG Song song hóa QuickSort Ý tƣởng: bắt đầu thực hiện ở một BXL và chuyển các lời gọi đệ quy cho các BXL khác. • Tạo ra tập các tiến trình và đặt dãy cần sắp xếp vào stack. • Tiến trình đầu tiên (tiến trình chủ) thực hiện tách dãy cho trước thành hai dãy con và đặt vào stack. • Những tiến trình khác (tiến trình tớ) xử lý những dãy con đã được tách ra và thực hiện những công việc tương tự như thuật toán đã nêu. 321 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG P4 P0 P0 P4 P0 P2 P4 P6 P0 P1 P6 63158724 4723 6875 312 4 5 687 21 3 76 8 Danh sách sắp xếp Phân công việc cho các BXL 322 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG f. Đánh giá thuật toán QuickSort song song • Giả thiết rằng pilot được chọn một cách lý tưởng để mỗi lần đều tách thành hai phần có kích cỡ bằng nhau. 1. Thời gian tính toán. • Đầu tiên một bộ xử lý phải thao tác với n số. Sau đó hai bộ xử lý thao tác trên n/2 số, rồi bốn bộ xử lý thao tác trên n/4 số, v.v. • Thời gian để thực hiện thuật toán sẽ là: tcomp = n + n/2 + n/4 + … 2n 2. Thời gian truyền thông. • Sự trao đổi dữ liệu giữa các bộ xử lý chỉ xảy ra khi thực hiện ghép kết hợp giống như MergeSort. • tcomm = 2(tstartup + (n/2)tdata + tstartup + (n/4)tdata + tstartup + (n/8)tdata …) = 2(log p)tstartup + 2ntdata 323 5.7 CÁC THUẬT TOÁN SONG SONG THÔNG DỤNG 1. Nhân ma trận • Mô hình lưới 2 chiều • Mô hình mảng tâm thu 2. Giải hệ phương trình tuyến tính 3. Tính biểu đồ của ảnh 4. Tô màu đồ thị 5. Thuật toán Kruskal tìm cây khung cực tiểu 6. Thuật toán tính tổng tiền tố 7. Phương trình nhiệt một chiều Bài tập (tham khảo tài liệu)
File đính kèm:
- Bài giảng Xử lý song song.pdf