Báo cáo đề tài xử lý song song

Mục lục
Mục lục...............................................................................................................................1
Chương 1. Khái quát về lý thuyết........................................................................................2
1.1 Giới thiệu về hệ thống tính toán song song...............................................................2
1.1.1 Hệ thống tính toán song song..............................................................................2
1.1.2 Phân loại hệ thống song song..............................................................................2
1.2 Chương trình song song.............................................................................................3
1.2.1 Các bước tổng quát phát triển ứng dụng song song............................................3
1.2.2 Phân loại chương trình song song.......................................................................3
1.3 Giải thuật song song...................................................................................................4
1.3.1 Song song hóa bài toán tuần tự...........................................................................4
1.3.2 Khả năng song song hóa.....................................................................................4
1.3.3 Trình tự song song hóa.......................................................................................4
Chương 2. Mô tả chi tiết bài toán........................................................................................5
2.1 Bài toán......................................................................................................................5
2.2 Đặt vấn đề & phát họa hướng giải quyết bài toán.....................................................5
2.3 Mô tả giải thuật song song cho bài toán....................................................................6
Chương 3. Đánh giá thời gian chạy của chương trình khi số lượng CPU thay đổi.............7
3.1 Biểu đồ thời gian chạy chương trình:........................................................................7
3.1.1 Ma trận vào 5x5:.................................................................................................7
3.1.2 Ma trận vào 40x40..............................................................................................8
3.2 Kết luận và nhận xét..................................................................................................8
Chương 4. Phụ lục...............................................................................................................9
Tài liệu tham khảo............................................................................................................12

Trương Hoàng Xuyên Ánh 06T1
Phạm Minh Nhựt
06T2

1

1.2 Phân loại theo website top500.Báo cáo đề tài xử lý song song Chương 1.1.1 Hệ thống tính toán song song Máy tính song song là một tập các tài nguyên tính toán có khả năng truyền thông và kết hợp với nhau để giải quyết các bài toán lớn trong khoảng thời gian chấp nhận được. … Máy tính song song là cách tiếp cận phổ biến nhất để xây dựng các siêu máy tính.org Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 2 . Hệ thống tính toán song song chính là một máy tính song song.1.1 Phân loại theo mô hình Flynn SISD: giống như máy tuần tự SIMD: song song hóa về mặt dữ liệu MISD: chia sẻ bộ nhớ MIMD: máy tính song song thực sự 1. RAM.2.1 Giới thiệu về hệ thống tính toán song song 1.1.2.1. Khái quát về lý thuyết 1. Tài nguyên tính toán: CPU.2 Phân loại hệ thống song song 1.

1 Theo mô hình truyền thông điệp Mỗi tiến trình có một vùng nhớ riêng.2 Chương trình song song 1. kết quả thực hiện dưới dạng thông điệp.2. Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 3 .2.2 Phân loại chương trình song song 1.1 Các bước tổng quát phát triển ứng dụng song song 1.2. Việc trao đổi dữ liệu.Báo cáo đề tài xử lý song song 1.2.

3.Pha 4. Quá trình thiết kế giải thuật song song là quá trình song song hóa bài toán tuần tự 1.3. Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 4 .Pha 1.2 Khả năng song song hóa Không phải giải thuật nào cũng có khả năng song song hóa. . Ví dụ : bài toán Fibonaci 1.2.3.Báo cáo đề tài xử lý song song 1.2.5: tối ưu tính song song.2 Theo mô hình bộ nhớ chia sẻ Tồn tại một vùng không gian nhớ chung.3: tìm kiếm khả năng song song. 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 chính là các kết quả đầu ra của bước thứ i.1 Song song hóa bài toán tuần tự Thiết kế giải thuật song song là chia bài toán thành các bài toán nhỏ hơn và gán bài toán nhỏ cho các bộ vi xử lý khác nhau để thực hiện song song.2.3 Giải thuật song song 1.3 Trình tự song song hóa Mô hình 5 pha:      Xác định rõ vấn đề Phân hoạch Truyền thông Gom kết Ánh xạ . 1.

2. có chỉ số từ: dataSet sptGui*np . Dòng dầu tiên của tệp tin gồm 2 phần tử cách nhau bởi khoảng trắng.1 Bài toán Viết chương trình tìm phần tử có giá trị lớn nhất trong một ma trận cho trước. Giải quyết vấn đề trên như sau: • Gọi np là số tiến trình chạy.rank0 sẽ giải quyết mảng có độ dài lẻ này..le = n % np.2 Đặt vấn đề & phát họa hướng giải quyết bài toán Giải quyết vấn đề chuyển bài toán tuần tự thành bài toán song song. Dòng thứ hai của tệp tin là danh sách phần tử trong dãy. và có một mảng 1 chiều: int *dataSet. Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 5 .. • Gọi n là size của mảng số nguyên đó. Các dòng tiếp theo là các dòng trong ma trận. yêu cầu dùng các hàm truyền thông cộng tác để tìm ra số Max trong mảng các số nguyên. Mô tả chi tiết bài toán 2. trong dãy.Báo cáo đề tài xử lý song song Chương 2. • Gọi le là số phần tử còn lẻ lại sau khi chia cho các tiến trình: . Sử dụng hàm truyền thông cộng tác. dataSet n-1 le phần tử • Ta gởi các mảng con đến các rank yêu cầu tính Max (đây là giai đoạn song song của bài toán). . các phần tử cách nhau bởi một khoảng trắng.. Đầu vào là một tệp tin. Các phần tử trong một dòng cách nhau bởi khoảng trắng. thể hiện số dòng và số cột của ma trận..np-1): sptGui = n / np. • Gọi sptGui là số phần tử gửi cho các tiến trình ranki(i=0.

NULL.MPI_MA X. →Kết thúc. dùng chung cho các tiến trình để tìm max. • Các tiến trình bắt đầu làm việc: .0. đưa các dữ liệu vào một mảng một chiều dataSet có độ dài(total): total = n * m. rồi in kết quả max tìm được ra màn hình: MPI_Reduce(&max0. • Cài đặt hàm tìm max: int maxFind(int *array.MPI_MAX. if(maxCon>max0)max0=maxCon. .&max. so sánh với max0 của mình.M PI_COMM_WORLD).MPI_COMM_WORLD).MPI_INT.1.0.Rank0: + Tính max phần mảng mình đảm nhiệm(max0): max0=maxFind(buff. • Rank0 bắt đầu tổng kết để nhận kết quả max trả về từ các Rank. Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 6 .1. buff + Tính các max(i) ở các rank: max=maxFind(buff. + Nếu le >0 tính max của mảng lẻ sau khi chia đủ các rank: maxCon=maxFind(dataCon.sptGui).0.MP I_COMM_WORLD). • Gởi Broadcast số phần tử của mảng đến các rank: MPI_Bcast (&sptGui.3 Mô tả giải thuật song song cho bài toán →Bắt đầu: • Đọc file “dulieu.MPI_COMM_WORLD).MPI_INT. • Gởi mảng buff tấc cả các rank: MPI_Scatter(dataSet.sptGui).buff.MPI_INT.le).Rank(i): + Nhận các dữ liệu: sptGui (kích thước mảng).0.MPI_INT.1.MPI_INT. + Gởi về cho rank0 số maxI đó bằng hàm: MPI_Reduce(&max.in” với ma trận int (n x m).sptGui.sptGui.Báo cáo đề tài xử lý song song 2.int size).

1 Ma trận vào 5x5: Số CPU Thời lượng(s) 1 2 3 4 5 6 7 8 0.047 2 3 4 5 6 7 8 Đánh giá: đối với đầu vào ma trận 5x5 thì số lượng CPU là 1.14 1 0. Đánh giá thời gian chạy của chương trình khi số lượng CPU thay đổi 3.1.4 1.181 1.Báo cáo đề tài xử lý song song Chương 3.2 1.109 1.2 phù hợp với chương tình.8 0.1 1.124 1.181 1.1 1.8 1.14 2 1.109 1.4 0.124 1.043 0.6 0.047 1.063 1.1 Biểu đồ thời gian chạy chương trình: 3. Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 7 .063 1.046 0 1 0.2 0.6 1.

091 1.045 0.6 1. Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 8 .4 1.Báo cáo đề tài xử lý song song 3.2.124 1.124 1 0.071 0 1 2 vào 40x40 3 5 6 phù hợp 7 17 Đánh giá: đối với ma trận số 4lượng CPU là 1.2 Ma trận vào 40x40 Số CPU Thời lượng(s) 1 2 3 4 5 6 7 8 0.114 1.1. Còn với những chương trình lớn thì cần số lượng lớn CPU hơn nhưng cũng chỉ một giới hạn nào đó. 3.096 1. Đối với những chương trình nhỏ như thế này thì chỉ cần 1 hoặc 2 CPU là thích hợp.733 1.6 0.733 2 1. Không phải càng nhiều thì càng tốt.06 1.3 với chương trình.045 0.2 Kết luận và nhận xét - Mỗi chương trình có một số lượng CPU nhất định để khi chạy đạt hiệu quả cao nhất.8 1.2 1.114 1.071 1.8 0.06 0.4 0.096 1.091 1.2 0.

so cot fscanf(f."r").max=-32768.m. int *dataSet.dataSet+i). /*mo file*/ f=fopen("dulieu. //khai bao cap phat vung nho dong dataSet=(int*)malloc(sizeof(int)*(n*m)).in */ int *loadData(int *Number) { FILE *f. return max. int main(int argc. MPI_Comm_rank(MPI_COMM_WORLD. MPI_Finalize().Báo cáo đề tài xử lý song song Chương 4.return NULL. else Ranki(). if(!f){printf("error open file\n").i<size.h> #include<stdlib.in". int Ranki().i++) fscanf(f.&m). if(rank==0)Rank0().h> int Rank0().&n). fscanf(f."%d".} //doc so hang. //doc ma tran vao mang mot chieu : dataSet for(i=0.n."%d".i<(n*m). char **argv) { int rank. return dataSet.int size) { int i.i++) if(array[i]>max)max=array[i].h> #include<stdio.&rank). fclose(f). } //ham tim so max cua mot mang int maxFind(int *array. } /* ham doc file : dulieu. *Number=n*m. for(i=0. Phụ lục //truyen thong cong tac #include<mpi."%d". int i. return 0. } Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 9 . MPI_Init(&argc.&argv).

0. } //nhan du lieu cua cac tien trinh con gui ve va tinh Max if(np>=2)MPI_Reduce(&max0.//mang kq tra ve cac max ma tien trinh tim dc int np.return 0.maxCon. MPI_Scatter(dataSet. buff=(int*)malloc(sizeof(int)*sptGui).MPI_INT.0.sptGui. if(np==0){printf("error process=0"). //so phan tu trong mang con cua mang dataSet. else max=maxFind(dataSet.max0.MPI_INT. int le.1. trinh MPI_Comm_size(MPI_COMM_WORLD. maxCon=maxFind(dataCon.1.total).MPI_INT. } // rank0 se lam cong viec cua minh : tim max tu 0 den(sptGui-1) va mang con du khi chia deu cho cac tien trinh if(np>=2)max0=maxFind(buff.MPI_INT. //mang data con du khi chia cho cac tien trinh int *dataClient. printf("Ket qua Max la : %d\n".MPI_COMM_WORLD).j++) dataCon[j]=dataSet[np*sptGui+j].sptGui.&np). if(le>0) { dataCon=(int*)malloc(sizeof(int)*le).i.j.le).buff. le=total%np. if(maxCon>max0)max0=maxCon. // so proccess int sptGui.maxClients. for(j=0.max). //gui cac mang con di den cac tien trinh if(np>=2) { MPI_Bcast(&sptGui. //bien le : le=total%np.*buff.MPI_COMM_WORLD). free(buff).MPI_MAX. de gui cho cac proccess tim max int max.j<le.Báo cáo đề tài xử lý song song //ham cua Rank 0 int Rank0() { int total.MPI_COMM_WORLD ). Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 10 .&max.//lay ve so tien dataSet=loadData(&total). return 0.0.sptGui). //du lieu mang int *dataCon. //tong so phan tu mang can tim max int *dataSet.} sptGui=total/np. free(dataSet).

//nhan du lieu MPI_Bcast(&n.n).0. //MPI_Status status.MPI_COMM_WORLD).//so pt mang int *array.1.MPI_INT. return 0.MPI_COMM_WORLD).MPI_MAX. } Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 11 . MPI_Scatter(NULL.Báo cáo đề tài xử lý song song } //ham cac tien trinh con int Ranki() { int n.0.MPI_INT.NULL. // gui lai cho rank 0 so max tim dc MPI_Reduce(&max.//nhan mot so tu tien trinh rank0.0. //tim max max=maxFind(array.MPI_INT. chinhla kichthuoc mang //khai bao cap phat dong array=(int*)malloc(sizeof(int)*n). int max.MPI_COMM_WORLD).array.1.n.MPI_INT.n.

[2] Tài liệu tham khảo trên Internet.Báo cáo đề tài xử lý song song Tài liệu tham khảo [1] Bài giảng lập trình song song của Đại học Bách khoa Hà Nội 6/2008. Trương Hoàng Xuyên Ánh 06T1 Phạm Minh Nhựt 06T2 12 .