Giáo trình Khái quát Giải thuật song song tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả...
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC KINH DOANH VÀ CÔNG NGHỆ -o0o - BÀI GIẢNG KHÁI QUÁT GIẢI THUẬT SONG SONG ThS Trần Văn Ước Bùi Thanh Tuyền ThS Trần Nguyên Hương Nguyễn Văn Ninh Chương - TỔNG QUAN XỬ LÝ SONG SONG 1.1 Khái niệm xử lý song song Tính tốn song song hay xử lý song song q trình xử lý thơng tin nhiều đơn vị liệu xử lý đồng thời hay nhiều xử lý để giải tốn Nói cách khác: Xử lý song song q trình xử lý thơng tin nhiều đơn vị liệu xử lý đồng thời nhiều xử lý để giải tốn 1.2 Vì phải xử lý song song Yêu cầu người sử dụng: + Cần thực khối lượng lớn công việc + Thời gian xử lý phải nhanh Yêu cầu thực tế: + Trong thực tế khơng tồn máy tính có nhớ vơ hạn khả tính tốn vơ hạn + Trong thực tế có nhiều tốn mà máy tính xử lý (XLTT) kiểu von Neumann khơng đáp ứng + Sử dụng hệ thống nhiều BXL để thực tính tốn nhanh hệ đơn BXL + Giải toán lớn hơn, phức tạp Nhiều lĩnh vực đồ họa máy tính, trí tuệ nhận tạo, phân tích số, v.v đòi hỏi phải xử lý khối lượng liệu lớn ,những vấn đề xử lý ngôn ngữ tự nhiên, nhận dạng, xử lý ảnh ba chiều (3-D), dự báo thời tiết v.v đòi hỏi phảixử lý liệu với tốc độc cao, với khối lượng liệu lớn Hầu hết toán này, máy tính xử lý khơng đáp ứng yêu cầu thực tế.do cần phải có hệ thống máy tính thật mạnh đáp ứng yêu cầu thực tế Mặc dù tốc độ xử lý Bộ xử lý tăng nhiều năm qua, giới hạn vật lý nên khả tính tốn chúng khơng thể tăng Điều dẫn tới muốn tăng khả tính tốn hệ thống máy tính đích cuối phải khai thác khả xử lý song song chúng Ngày xuất nhiều toán mà hệ thống đơn xử lý không đáp ứng yêu cầu xử lý thời gian, địi hỏi phải sử dụng hệ thống đa xử lý đòi hỏi phải xử lý song song 1.3 Sự khác XLSS XLTT Trong tính tốn song song, số xử lý kết hợp với để giải vấn đề giảm thời gian xử lý thời điểm có nhiều phép tốn thực đồng thời Trong tính tốn với xử lý thời điểm thực phép tốn Mục đích xử lý song song tận dụng khả hệ đa xử lý để thực tính tốn nhanh sở sử dụng nhiều xử lý đồng thời Cùng với tốc độ xử lý nhanh hơn, việc xử lý song song giải toán lớn Xử lý Xử lý song song Mỗi thời điểm thực phép tốn Mỗi thời điểm thực nhiềuphép toán Thời gian thực phép toán chậm Thời gian thực phép toán nhanh 1.4 Tiêu chí để đánh giá thuật tốn song song Đối với thuật tốn tuần tự: • Thời gian thực thuật tốn • Khơng gian nhớ • Khả lập trình Đối với thuật tốn song song • Các tiêu chuẩn thuật tốn • Những tham số số BXL: số BXL, tốc độ xử lý • Khả nhớ cục • Sơ đồ truyền thông • Thao tác I/O 1.5 Khái niệm hệ thống tính tốn song song Máy tính song song tập tài ngun tính tốn có khả truyền thơng kết hợp với để giải toán lớn khoảng thời gian chấp nhận được.Tài ngun tính tốn: CPU, RAM, …Máy tính song song cách tiếp cận phổ biến để xây dựng siêu máy tính.Hệ thống tính tốn song song máy tính song song 1.6 Phân loại hệ thống tính tốn song song theo mơ hình Flynn SISD (Single Instruction, Single Data): giống máy SIMD (Single Instruction, Multiple Data): song song hóa mặt liệu MISD: Multiple Instruction, Single Data: chia sẻ nhớ MIMD: Multiple Instruction, Multiple Data: máy tính song song thực 1.7 Chương trình song song 1.7.1 Các bước tổng quát phát triển ứng dụng song song Song song hóa tốn Cài đặt toán song song Biên dịch chạy toán song song Các phân tích giải thuật song song Các thư viện hỗ trợ lập trình song song Các máy tính song song 1.7.2 Phân loại chương trình song song Theo mơ hình truyền thơng điệp Mỗi tiến trình có vùng nhớ riêng Việc trao đổi liệu, kết thực dạng thông điệp Theo mơ hình nhớ chia sẻ Tồn vùng không gian nhớ chung 1.8 Giải thuật song song 1.8.1 Song song hóa tốn Thiết kế giải thuật song song chia toán thành toán nhỏ gán toán nhỏ cho vi xử lý khác để thực song song.Quá trình thiết kế giải thuật song song q trình song song hóa tốn 1.8.2 Khả song song hóa Khơng phải giải thuật có khả song song hóa Những giải thuật khơng thể song song hóa:Các tham số đầu vào cho bước i+1 kết đầu bước thứ i.Ví dụ : tốn Fibonaci 1.8.2 Trình tự song song hóa Mơ hình pha: Xác định rõ vấn đề Phân hoạch Truyền thông Gom kết Ánh xạ - Pha 1,2,3: tìm kiếm khả songsong - Pha 4,5: tối ưu tính song song 1.9 Một số ví dụ ý tưởng song song 1.9.1 Tính giai thừa Ví dụ: Giả sử cần thực tính n! hai máy tính, máy nhân n/2số với n lưu máy tính thứ Kết máy tính thứ hai tính xong chuyển máy tính thứ để nhân hai kết phận với Bài toán phát biểu sau: B1.Máy tính thứ gửi n cho máy tính thứ hai B2.Cả hai máy tính thực nhân n/2 số cách đồng thời P1: 1*2*3…*(ndiv2) P2: (ndiv2+1)*((ndiv2+2)*….*n B3.Máy tính thứ hai chuyển kết tính máy tính thứ B4.Máy tính thứ nhân hai kết để có kết cuối Thời gian tính tốn (ở bước 4): tcomp = n/2 + Thời gian truyền thông (ở bước 3): tcomm = (tstartup + tdata) + (tstartup + tdata) = 2*tstartup + * tdata Độ phức tạp tính tốn O(n) độ phức tạp truyền thông số, độ phức tạp nói chung thuật tốn O(n) Hiện nay, nhiều ngơn ngữ lập trình song song sử dụng như: Posix, MPI, OpenMP, VPM , Fortran 90, CUBE C, Occam, C-Linda, PVM với C/C++, CDC 6600, JAVA v.v công cụ quan trọng cho phép cài đặt thuật toán song song mơ hình máy tính hổ trợ việc xử lý song song Xử lý song song vấn đề phức tạp, khó khăn trước mắt thay đổi tư thuật toán (lâu quen với cách nhìn vấn đề cách ), xây dựng mơ hình máy tính song song, kỹ thuật cài đặt chương trình … mà lập trình song song đem lại thật to lớn, khơng thể phủ nhận 1.9.2 Tìm phần tử mảng Ta xét tốn tìm phần tử a mảng A kích thước n Trong xử lý tuần tự: ta dùng xử lý duyệt từ phần tử đầu đến phần tử cuối mảng Trong xử lý song song, giả sử ta có mơ hình song song m xử lý, ta chia việc cho xử lý đồng thực tìm kiếm, xử lý tìm kiếm (n div m)phần tử Trong trình thực hiện, xử lý tìm thấy phần tử a duyệt qua hết khơng tìm thấy phải gửi thơng điệp để hệ thống xử lý nhận biết, điều khiển trình xử lý Chúng ta dễ nhận thấy độ phức tạp xử lý song song lớn xử lý nhiều, cần có trao đổi thơng tin đồng tiến trìnhtrong trình thực xử lý toán,vấn đề cần quan tâm thời gian thực chương trình Một mục đích xử lý song song nghiên cứu, xây dựng thuật tốn thích hợp để cài đặt máy tính song song, nghĩa phát triển thuật toán song song nhằm giải toán đặt thực tế Chương - KIẾN TRÚC MÁY TÍNH SONG SONG Máy tính xây dựng từ khối sở: - Bộ nhớ: để lưu trữ liệu - Các đơn vị logic số học: thực phép toán ký hiệu ALU - Các phần tử điểu khiển:Bộ điều khiển CU thiết bị vào/ra liệu - Các Bus trao đổi liệu Cách thức liên kết khối với cho ta biết kiến trúc máy tính Trong hệ thống máy tính thơng thường có hai khối quan trọng nhớ BXL BXL xử lý liệu lưu trữ nhớ thông qua thị (các câu lệnh) Các câu lệnh lưu nhớ Trong hệ thống liệu thực theo hai chiều, đọc ghi vào nhớ Hình 2-1 mơ tả hoạt động mơ hình máy tính kiểu von Neumann Hình 2-1: Sự liên kết nhớ xử lý 2.1 Phân loại máy tính song song 2.1.1 Mơ hình SISD (Single Instruction stream, Single Data Stream - Đơn luồng lệnh, đơn luồng liệu) Máy tính loại SISD có CPU, thời điểm thực lệnh đọc, ghi mục liệu Tất máy tính SISD có ghi register gọi đếm chương trình (program counter) sử dụng để nạp địa lệnh kết thực theo thứ tự xác định câu lệnh Hình 2-2 mơ tả hoạt động máy tính theo mơ hình SISD Hình 2-2: Mơ hình kiến trúc SISD Mơ hình SISD cịn gọi SPSD (Single Program Single Data), đơn chương trình đơn liệu Đây mơ hình máy tính kiểu von Neumann 2.1.2 Mơ hình SIMD (Single Instruction Stream, Multiple Data Stream - Đơn luồng lệnh, đa luồng liệu) Máy tính loại SIMD có đơn vị điều khiển để điều khiển nhiều đơn vị xử lý (nhiều đơn vị) thực theo luồng câu lệnh CU phát sinh tín hiệu điều khiển tới tất phần tử xử lý, BXL thực phép toán mục liệu khác nhau, nghĩa BXL có luồng liệu riêng Hình 2-3 mơ tả hoạt động máy tính theo mơ hình SIMD, cịn gọi SPMD 10 For (j=0; j A[k]) { temp=A[j]; A[j]=A[k]; A[k]=temp; } } Thơng qua giải thuật, ta thấy độ phức tạp tính toán giải thuật O( ) b Thuật toán song song Dùng n tác vụ kết hợp theo nguyên lý hình ống để xếp mảng A[n] Hệ thống chia thành pha: Pha chẵn pha lẻ Pha chẵn: Các tác vụ đánh số chẵn so sánh với tác vụ nó(tác vụ có số lẻ), giữ phần tử lớn đổi chỗ liệu với tác vụ Pha lẻ: Các tác vụ đánh số lẻ so sánh với tác vụ (tác vụ có số chẵn), giữ phần tử lớn đổi chỗ liệu với tác vụ Thuật tốn song song có độ phức tạp O(n) (Vì lại có độ phức tạp O(n), coi tập nhỏ nhà cho bạn tìm hiểu.) c Ví dụ Cho A[8]={4, 2, 7, 8, 5, 1, 3, 6} Sắp xếp lại mảng A theo giải thuật song song sử dụng xử lý đánh số Pi (i=0 8) Tác vụ P0 P1 P2 P3 P4 P5 P6 ↔ ↔ ↔ ↔ ↔ P7 Pha ↔ 2 2 ↔ ↔ ↔ ↔ ↔ ↔ ↔ 5 ↔ − − − − − − 6 − 54 − 2 − − 4 − − 6 − − 8 5.6.5.3 Thuật toán Merge Sort MergeSort thuật toán “Chia để trị” (Nguyên lý chia để trị thể cách chia toán thành toán cho chúng có dạng giốn tốn lớn Vì vậy, phương pháp chia để trị thường có dạng đệ quy.) Một danh sách chưa xếp chia thành phần Mỗi phần lại chia đôi phần nhỏ phần tử Sau đó, cặp ghép lại theo thứ tự cần xắp xếp Quá trình ghép làm ngược lại trình phân rã tiếp tục ghép để cuối thu dãy xếp Cách chia đôi phần tử thuật toán MergeSort tạo cấu trúc nhị nguyên Nếu n lũy thừa cân Độ phức tạp thuật toán O(nlogn) Độ phức tạp thời gian tính tốn giải thuật song song sử dụng n xử lý O(n) Do giới hạn chương trình chúng tơi khơng thể trình bày cụ thể giải thuật Coi tập lớn dành cho bạn! 55 5.6.5.4 Mở rộng Trong mảng tốn xếp, cịn nhiều thuật toán khác Quicksort, RadixSort, InsertSort, BioticSort, BubbleSort… Các bạn tìm hiểu thêm thuật tốn tài liệu “Introduction to Parallel Computing, Ananth Grama, Anshul Gupta, Geogre Karipys - Addison Wesley – 2003” Chapter 9.Sorting 5.6.6 Tìm phần tử lớn ma trận Viết chương trình tìm phần tử có giá trị lớn ma trận cho trước Đầu vào tệp tin Dòng dầu tiên tệp tin gồm phần tử cách khoảng trắng, thể số dòng số cột ma trận Các dòng dòng ma trận Các phần tử dòng cách khoảng trắng dãy Dòng thứ hai tệp tin danh sách phần tử dãy, phần tử cách khoảng trắng Sử dụng hàm truyền thông cộng tác 5.6.6.1 Giải thuật song song Giải vấn đề chuyển toán thành toán song song, yêu cầu dùng hàm truyền thơng cộng tác để tìm số Max mảng số nguyên Giải vấn đề sau: •Gọi np số tiến trình chạy, có mảng chiều: int *dataSet; •Gọi n size mảng số nguyên •Gọi sptGui số phần tử gửi cho tiến trình ranki(i=0 np-1): sptGui = n / np; •Gọi le số phần tử lẻ lại sau chia cho tiến trình: - le = n % np; - rank0 giải mảng có độ dài lẻ này, c ó số từ: •Ta gửi mảng đến rank yêu cầu tính Max (đây giai đoạn song song tốn Mơ tả giải thuật song song cho tốn →Bắt đầu: •Đọc file “dulieu.in” với ma trận int (n x m), đưa liệu vào mảng chiều dataSet có độ dài(total): total = n * m •Cài đặt hàm tìm max:int maxFind(int *array,int size); dùng chung cho tiến trình để tìm max •Gởi Broadcast số phần tử mảng đến rank: MPI_Bcast (&sptGui,1,MPI_INT,0,MPI_COMM_WORLD); 56 •Gởi mảng buff tấc rank: MPI_Scatter(dataSet,sptGui,MPI_INT,buff,sptGui,MPI_INT,0,MPI_COMM_WOR LD); •Các tiến trình bắt đầu làm việc: - R a n k : + Tính max phần mảng đảm nhiệm(max0): max0=maxFind(buff,sptGui); + Nếu le >0 tính max mảng lẻ sau chia đủ rank: maxCon=maxFind(dataCon,le); if(maxCon>max0)max0=maxCon; -Rank(i): + Nhận liệu: sptGui (kích thước mảng), buff + Tính max(i) rank: max=maxFind(buff,sptGui); + Gửi cho rank0 số maxI hàm: MPI_Reduce(&max,NULL,1,MPI_INT,MPI_MAX,0,MPI_COMM_WORLD ); •Rank0 bắt đầu tổng kết để nhận kết max trả từ Rank, sosánh với max0 mình, in kết max tìm hình: MPI_Reduce(&max0,&max,1,MPI_INT,MPI_MAX,0,MPI_COMM_ WORLD); →Kết thúc 5.6.6.2 Đánh giá thời gian chạy chương trình số lượng CPU thay đổi Biểu đồ thời gian chạy chương trình: - Ma trận vào 5x5: 57 Đánh giá: Các bạn sinh viên dựa vào bảng số liệu đầu vào ma trận 5x5 số lượng CPU là phù hợp với chương trình? Ma trận vào 40x40: Đánh giá: Các bạn sinh viên dựa vào bảng số liệu biểu đồ đầu vào ma trận 40x40 số lượng CPU là phù hợp với chương trình? 5.6.6.3 Kết luận nhận xét -Mỗi chương trình có số lượng CPU định để chạy đạt hiệu cao 58 -Đối với chương trình nhỏ cần CPU thích hợp -Cịn với chương trình lớn cần số lượng lớn CPU giới hạn Khơng phải nhiều tốt 5.6.6.4 Chương trình tham khảo //truyen thong cong tac #include #include #include int Rank0(); int Ranki(); int main(int argc, char **argv) { int rank; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); if(rank==0)Rank0(); else Ranki(); MPI_Finalize(); return 0; } //ham tim so max cua mot mang int maxFind(int *array,int size) { int i,max=-32768; for(i=0;imax) max=array[i]; return max; } 59 60 //ham cac tien trinh 61 5.6.6 Bài tốn xếp balo Trong mơn Cấu trúc liệu giải thuật, làm quen với toán xếp balo Đây tốn hay có ý nghĩa Bài toán phát biểu sau: Cho dãy đồ vật, đồ vật có thơng số giá trị thể tích đồ vật Bài tốn đặt ra, có balo tích C Yêu cầu phải lựa chọn đồ vật cho tổng giá trị đồ vật lấy lớn tổng thể tích đồ vật lấy phải nhỏ thể tích balo Để giải tốn có nhiều giải thuật để làm việc với nó, điển hình giải thuật sử dụng chiến lược tham lam.(Sắp xếp đồ vật theo thứ tự, lấy giá trị đồ vật thứ i chia cho thể tích đồ vật thứ i Sau dựa vào tỉ số đó, chọn đồ vật có tỉ số vừa tính theo chiều từ cao xuống thấp đến đầy balo thơi.) Giải thuật ngắn gọn, dễ hiểu dễ cài đặt Tuy nhiên, lúc đưa kết tối ưu tốn đưa kết tối ưu Ví dụ: cho đồ vật với giá trị tương ứng thể tích giá trị sau: Với giải thuật trình bày trên, tỉ số đồ vật : (20/5, 8/3, 5/2, 4/1, 14/5, 27/9)=(4, 2.7, 2.5, 4, 2.8, 3) Và kết ta đồ vật chọn đồ vật 1, 4, tổng thể tích 15 tổng giá trị 51 Nhưng thực tế tổng thể tích 16 giá trị 52 kết tối ưu Vì tơi giới thiệu thuật tốn cho tốn xếp balo để tìm kết tối ưu giải thuật xem xét giải thuật dạng song song 5.6.6.1 Thuật toán sử dụng phần tử ưu cho toán xếp balo 0/1 a Phát biểu tốn: Tìm Max Trong đó: pj: Giá trị đồ vật thứ j wj: Thể tích đồ vật thứ j xj=0: Đồ vật thứ j không chọn xj=1: Đồ vật thứ j lựa chọn C: tổng thể tích balo 62 Để tránh trường hợp nhỏ lẻ sảy ta giả sử ln có: : wj