. Các hệ thống song song: có rất nhiều các hệ thống song song khác nhau được phân loại theo cấu trúc, theo chức năng hoặc theo sức mạnh tính toán. Sau đây là một số ví dụ về các hệ thống tính toán song song: Cray T3E (massively parallel processors) IBM RS6000 SP2 (distributed memory system) Sun Fire 15000 (shared memory system) Cray SV1 (massively parallel processors) PCCluster (một tập các máy PC được kết nối lại với nhau thông qua mạng chuyên dụng hoặc mạng thông thường). Cái này ở Bộ môn CHTTT cũng có, nếu em muốn thử nghiệm, em hãy liên lạc với thầy giáo Hà Quang Thụy (hqthuyhn.vnn.vn) 3. Môi trường lập trình: môi trường lập trình song song được chia làm hai mức như sau: Mức hệ thống: thường là một phần mềm hệ thống chạy ở background nhằm thực hiện các chức năng trong tính toán song song như quản lý tiến trình (task management), truyền thông (communication), đồng bộ hóa (synchronization), .v.v. Mức này còn cung cấp thư viện bao gồm các hàm về truyền thông, đồng bộ hóa, .v.v. Em có thể liên kết các hàm thư viện này vào trong chương trình của em khi viết các chương trình song song. Hiện nay có khá nhiều phần mềm hỗ trợ tính toán song song như MPI (Message Passing Interface), PVM (Parallel Virtual Machine), .v.v. Em có thể vào google.com để search và download các phần mềm này về vì chúng được cung cấp miễn phí và lại có cả mã nguồn mở. Mức thứ hai không thể thiếu được là ngôn ngữ lập trình song song: Em có thể sử dụng CC++ để lập trình song song, tất nhiên khi biên dịch thì em phải thông qua một tiện ích biên dịch do MPI hoặc PVM cung cấp. Em cũng có thể dịch theo cách thông thường miễn là em liên kết thành công các hàm thư viện song song của MPI hoặc PVM là được. Em cũng có thể sử dụng ngôn ngữ FORTRAN (fortran 77 hoặc fortran 90) hoặc HPF (High Performance Fortran) để lập trình song song.
1. Giải thuật song song | Thảo luận về các giải thuật song song Thân chào các bạn! Trong topic này mình đưa ra ý tưởng cùng thảo luận và trao đổi với nhau về giải thuật song song với nội dung như sau: 1. Tổng quan về tính toán song song 2. Một số giải thuật song song cho các bài toán cụ thể. trước hết mình đi vào phần 1 với các giới thiệu cơ bản: 1. Khái niệm tính toán song song và phân tán (parallel and distributed computing): tính toán song song và phân tán là một dạng tính toán hiệu năng cao (high performance computing) bằng cách tận dụng sức mạnh tính toán của một tập các máy tính hoặc bộ xử lý được kết nối thông qua các hệ thống mạng chuyên dụng (tốc độ rất cao) hoặc mạng thông thường (TCP/IP chẳng hạn). 2. Các hệ thống song song: có rất nhiều các hệ thống song song khác nhau được phân loại theo cấu trúc, theo chức năng hoặc theo sức mạnh tính toán. Sau đây là một số ví dụ về các hệ thống tính toán song song: - Cray T3E (massively parallel processors) - IBM RS/6000 SP2 (distributed memory system) - Sun Fire 15000 (shared memory system) - Cray SV1 (massively parallel processors) - PC-Cluster (một tập các máy PC được kết nối lại với nhau thông qua mạng chuyên dụng hoặc mạng thông thường). Cái này ở Bộ môn CHTTT cũng có, nếu em muốn thử nghiệm, em hãy liên lạc với thầy giáo Hà Quang Thụy (hqthuy@hn.vnn.vn) 3. Môi trường lập trình: môi trường lập trình song song được chia làm hai mức như sau: - Mức hệ thống: thường là một phần mềm hệ thống chạy ở background nhằm thực hiện các chức năng trong tính toán song song như quản lý tiến trình (task management), truyền thông (communication), đồng bộ hóa (synchronization), .v.v. Mức này còn cung cấp thư viện bao gồm các hàm về truyền thông, đồng bộ hóa, .v.v. Em có thể liên kết các hàm thư viện này vào trong chương trình của em khi viết các chương trình song song. Hiện nay có khá nhiều phần mềm hỗ trợ tính toán song song như MPI (Message Passing Interface), PVM (Parallel Virtual Machine), .v.v. Em có thể vào google.com để search và download các phần mềm này về vì chúng được cung cấp miễn phí và lại có cả mã nguồn mở. - Mức thứ hai không thể thiếu được là ngôn ngữ lập trình song song: Em có thể sử dụng C/C++ để lập trình song song, tất nhiên khi biên dịch thì em phải thông qua một tiện ích biên dịch do MPI hoặc PVM cung cấp. Em cũng có thể dịch theo cách thông thường miễn là em liên kết thành công các hàm thư viện song song của MPI hoặc PVM là được. Em cũng có thể sử dụng ngôn ngữ FORTRAN (fortran 77 hoặc fortran 90) hoặc HPF (High Performance Fortran) để lập trình song song. 4. Ứng dụng của tính toán song song: Hầu hết các ứng dụng của tính toán song song là nhằm giải quyết các bài toán có độ phức tạp thời gian lớn hoặc những bài toán thời gian thực (real-time applications). Sau đây là một số ví dụ: - Tính toán trong vật lý và hóa học: mô phỏng các quá trình nhiệt học, mô phỏng chuyển động các hạt cơ bản trong vật lý, mô phỏng các quá trình hóa học, .v.v. - Tính toán trong sinh học: hiện nay có một lĩnh vực đang được giới nghiên cứu focus, đó là tin sinh (bioinformatics). Bài toán này chủ yếu phân tích thông tin di truyền ADN. Bài toán phân tích và mô hình hóa bản đồ gen người cũng không thể không sử dụng các máy tính hiệu năng cao, trong đó có các hệ thống tính toán song song rất mạnh. - Trò chơi: Chăc em cũng biết máy tính DeepBlue của IBM? Máy tính này có khả năng tính toán hàng triệu nước cờ trong một giây và đây là một hệ thống song song sử dụng môi trường lập trình MPI đấy. - Tính toán song song áp dụng trong khám phá tri thức từ cơ sở dữ liệu (Knowledge Discovery from Databases - KDD & Data Mining) - .v.v. Còn rất nhiều ứng cụng khác của tính toán song song mà anh không thể kể hết ra đây được. 5. Các mô hình và thuật toán song song: - Về mô hình song song thì người ta chia ra các dạng chính sau đây: SIMD (Đơn dòng lệnh, đa dữ liệu - Single Instruction Multiple Data); MISD (Đa dòng lệnh, đơn dữ liệu - Multiple Instruction Single Data); MIMD (Đa dòng lệnh, đa dữ liệu - Multiple Instructions Multiple Data). - Thuật toán song song thì rất đa dạng, mỗi bài toán có một chiến lược song song riêng. Tuy nhiên, người ta khái quát hóa được hai chiến lược chính là song song theo chức năng và song song theo dữ liệu. Thời gian có hạn nên mình chỉ giới thiệu được chừng này, các bạn có thể vào các tạp chí hàng đầu về tính toán song song và phân tán sau đây để nghiên cứu thêm. Mở đầu Trong rất nhiều chiến lược khác nhau để song song hoá thuật toán tuần tự có ba chiến lược thiết kế chương trình song song tương đối phổ biến là song song hoá kết quả, song song hoá đại diện và song song hoá chuyên biệt. Mặc dù, trong từng bài toán cụ thể việc kết hợp các chiến lược thiết kế có thể cho ta kết quả thú vị, song thông thường tuỳ thuộc tính chất bài toán chỉ một chiến lược thiết kế thuật toán song song được chọn nhằm đạt hiệu quả cao nhất. Trong phần đầu chúng tôi trình bày ba chiến lược thiết kế nêu trên. Phần thứ hai chúng tôi trình bày môi trường Parallel Virtual Machine (PVM) được dùng trong quá trình thử nghiệm bài toán sinh ra số nguyên tố trong thuật toán mã hoá RSA . Tiếp theo chúng tôi trình bày một số thử nghiệm và kết quả của nó. 1. Các chiến lược song song hoá phổ biến 1.1 Song song hoá kết quả Việc phân loại các chiến lược thiết kế thuật toán song song phụ thuộc vào tính chất bài toán. Song song hoá kết quả (xem [1]) là cơ chế tính toán song song tập trung trên toàn bộ dữ liệu của bài toán. Mỗi bộ xử lý sẽ cho một phần kết quả của bài toán và các bộ xử lý hoạt động song song sao cho các phần việc được thực hiện độc lập tối đa có thể. Sau khi các phần việc hoàn thành, công đoạn cuối cùng là kết hợp các thành phần để được kết quả hoàn chỉnh. Các lớp bài toán chia - để - trị, bảng đen (trong hệ chuyên gia) và lơi - lặp (iterative relaxtion) thường sử dụng chiến lược song song hoá kết quả để thiết kế chương trình song song. Mỗi bài toán trong lớp các bài toán chia-để -trị (xem [2]) thường được chia thành các bài toán thành phần. Mỗi bài toán thành phần được giải quyết độc lập và kết quả cuối cùng là sự kết hợp các kết quả của bài toán thành phần. Trong hệ thống bảng đen (xem [3]) cấu trúc dữ liệu thể hiện mô hình tính toán. Mỗi bộ xử lý độc lập có trách nhiệm quản lý, kiểm tra trạng thái hiện thời và cập nhật nó nếu cần. Trong lơi - lặp (xem [4]) người ta chia không gian dữ liệu thành các vùng có quan hệ láng giềng, mỗi vùng này được một hay nhiều bộ vi xử lý đảm nhiệm. Mỗi bộ vi xử lý này đảm trách công việc theo từng vùng song song và khi cần có sự truyền thông điệp với các láng giềng. Việc thiết kế chương trình theo chiến lược song song hoá kết quả thông qua năm giai đoạn. Giai đoạn đầu cần phải mô hình kết qủa dưới dạng cấu trúc dữ liệu gồm nhiều thành phần, đồng thời xác định được sự phụ thuộc giữa chúng. Giai đoạn hai, phân mỗi bộ xử lý đảm nhiệm công việc cho một hay nhiều thành phần và việc phân chia này phải bảo đảm vấn đề hiệu suất của các bộ xử lý. Giai đoạn ba, xác định nguồn tài nguyên cần thiết để thực hiện việc tính toán các thành phần. Bước tiếp theo xác định cách lấy các giá trị kết quả của các thành phần khi thực hiện xử lý song song. Cuối cùng, là giai đoạn kết hợp các kết quả thành phần để được kết quả bài toán và kết thúc các xử lý. 1.2 Song song hoá đại diện Thiết kế chương trình theo cơ chế song song hoá đại diện xác định cụ thể công việc phải thực hiện để song song hoá. Như vậy, để giải quyết một bài toán có nhiều công đoạn, mỗi công đoạn của bài toán được giải quyết song song cho đến khi hoàn thành công đoạn đó và các công đoạn tiếp theo cũng được thực hiện tương tự cho đến khi bài toán được giải quyết. Các mô hình của chiến lược này là chủ - tớ, tính toán - tổng hợp - truyền thông. Trong mô hình chủ - tớ (xem [4]) bài toán cần giải được chia thành các vấn đề phụ thuộc lẫn nhau. Các bộ xử lý đóng vai trò tớ trong mô hình có nhiệm vụ xử lý các vấn đề này và giữa chúng được điều phối bởi bộ xử __________lý đóng vai trò chủ. Khác với phương pháp chia - để - trị, các vấn đề ở đây không nhất thiết cùng được tiến hành giải quyết, mà có thể được giải quyết song song một cách tuần tự. Trong mô hình tính toán - tổng hợp - truyền thông (xem [2]) thiết kế bao gồm ba giai đoạn. Giai đoạn tính toán thực hiện các tính toán cơ bản có tính chất cục bộ, giai đoạn tổng hợp kết hợp các dữ liệu cục bộ thành dữ liệu toàn cục, giai đoạn truyền thông trả lại các thông tin toàn cục cho các bộ xử lý. Việc thiết kế chương trình theo chiến lược song song hoá đại diện được thực hiện thông qua ba giai đoạn. Giai đoạn đầu xác định các công việc cần phải thực hiện bởi các bộ xử lý. Trong giai đoạn tiếp theo cần phải xác định bộ xử lý đóng vai trò điều khiển các công việc.Cuối cùng cần phải nhận biết được kết quả công việc. 1.3 Song song hoá chuyên biệt Trong chiến lược song song hoá chuyên biệt, bài toán cần giải quyết bao gồm nhiều công việc, mỗi công việc có đặc thù riêng được giao cho một bộ xử lý chuyên dụng. Ngoài ra hệ thống cần một bộ xử lý giữ vai trò agent, điều phối quá trình thực hiện công việc. Trong mỗi công việc đặc thù, các phần việc nhỏ hơn được thực hiện song song. Sau khi các phần việc này hoàn thành, cần tiến hành “phối hợp” các kết quả để hoàn thành công việc. Một số mô hình thường gặp trong chiến lược thiết kế này là: ống dẫn và bộ lọc, khách -phục vụ. Trong mô hình ống dẫn và bộ lọc (xem [3]) dòng dữ liệu kết quả ra của quá trình xử lý A là dữ liệu vào của quá trình xử lý B. Trong mô hình khách - phục vụ (xem [4]) các yêu cầu từ các bộ xử lý đóng vai trò khách được gửi đến các bộ xử lý đóng vai trò phục vụ để xử lý. 2. Parallel Virtual Machine (PVM) PVM là tập hợp phần mềm công cụ và thư viện kết hợp các máy tính khác nhau về cấu hình như một máy ảo. Mục tiêu chính của hệ thống PVM là tăng hiệu suất tính toán bằng cách kết hợp các máy tính thông qua xử lý song song trên các máy tính. Hệ thống PVM gồm hai thành phần chính. Thứ nhất là tiến trình thường chú (daemon) thường gọi là pvmd3 hay pvmd chạy trên tất cả các máy tính thành viên của máy tính song song ảo. Để thực hiện ứng dụng PVM, trước hết tạo ra một máy ảo bằng cách chạy PVM. Khi đó ứng dụng PVM sẽ được khởi động trên tất cả các máy tính thành viên. Thứ hai là thư viện các hàm giao diện PVM thường gọi là libPVM3.a. Thư viện gồm các hàm phục vụ cho việc truyền thông điệp, sinh tiến trình, phối hợp công việc v…v. Mô hình tính toán PVM dựa trên khái niệm một ứng dụng bao gồm nhiều công việc. Hai phương pháp thường được PVM sử dụng là song song hoá chức năng và song song hoá dữ liệu. Phương pháp song song các chức năng, ứng dụng bao gồm nhiều chức năng, các chức năng được thực hiện song song. Phương pháp song song hoá dữ liệu các tiến trình xử lý như nhau nhưng mỗi tiến trình chỉ xử lý một phần dữ liệu của ứng dụng. Hệ thống PVM hỗ trợ ngôn ngữ lập trình C, Fortran và C++. Trong đó ngôn ngữ C++ được sử dụng phổ biến nhất. Các thử nghiệm của chúng tôi cũng sử dụng ngôn ngữ C++. 2.1 Đặc điểm môi trường PVM• Khả năng cấu hình các máy: Các công việc thực hiện trên các máy được lựa chọn bởi chính người dùng khi thực hiện PVM. Trong quá trình tính toán, việc thêm hay bớt các máy thành viên thực hiện rất dễ dàng. • Khả năng truy nhập đến cấu hình phần cứng cho phép người dùng có thể chọn các máy thành viên phù hợp trong quá trình tính toán. • Tính toán dựa trên bộ xử lý: Đơn vị của PVM là công việc, nhiều công việc có thể thực hiện trên một bộ xử lý,có một luồng điều khiển tuần tự độc lập thực hiện việc chuyển đổi giữa quá trình truyền thông và tính toán. • Sử dụng mô hình truyền thông điệp: Điều phối việc truyền thông giữa các máy thành viên qua việc gửi/nhận thông điệp. • Hỗ trợ mạng hỗn tạp: Cho phép các máy thành viên có cấu hình khác nhau, hỗ trợ nhiều bộ xử lý. 2.2 Nguyên lý hoạt động Thông thường chương trình được viết trên PVM qua các bước khởi tạo các tiến trình, quản lý truyền thông điệp, tính toán, tổng hợp kết quả và hiện thị chúng, kết thúc các tiến trình. • Khởi tạo tiến trình Mỗi tiến trình trong hệ thống PVM được định danh bởi một số nguyên do pvmd cung cấp. Hàm pvm_mytid() thực hiện công việc này. Nó kết nạp tiến trình vào hệ thống PVM nếu chúng chưa được kết nạ__________p. Hàm pvm_spawn(char *task, char **argv, int flag, char *where, int intask, int *tids) sinh ra các bản sao của tiến trình cho bởi tham số task trên máy ảo. Danh sách các đối số của tiến trình đó thông qua tham số argv. Cờ flag cho một số tuỳ chọn đặc biệt, thường sử dụng giá trị mặc định cho phép PVM tự xác định nơi khởi tạo tiến trình.Hàm trả về số nguyên cho biết số lượng các tiến trình được khởi tạo thành công, hoặc mã lỗi trong trường hợp ngược lại.Nếu thành công tham số tids danh sách các số nguyên định danh tiến trình. • Quản lý truyền thông điệp Quá trình gửi thông điệp trong hệ thống PVM gồm ba giai đoạn. Đầu tiên một vùng đệm được khởi tạo thông qua hàm pvm_initsend(int encoding) sẽ tạo ra vùng đệm dành cho dữ liệu mới. Giai đoạn tiếp theo thông điệp được nạp vào vùng đệm thông qua hàm pvm_pk*(). Tùy vào kiểu dữ liệu nạp vào vùng đệm, PVM xây dựng hàm tương ứng, ví dụ pvm_pkint() dành cho dữ liệu kiểu nguyên, pvm_pkfloat() dành cho kiểu thực. Công đoạn cuối cùng là việc thực hiện gửi thông điệp đến tiến trình khác thông qua hàm pvm_send(int tid, int msgtag) gửi thông điệp định danh bởi msgtag đến tiến trình định danh bởi tid. Quá trình nhận thông điệp được thực hiện thông qua hàm pvm_recv(int tid, int msgtag). Sau khi nhận thông điệp, dữ liệu được lấy ra từ vùng đệm thông qua hàm pvm_upk*(). Cần phải sử dụng hàm phù hợp với kiểu dữ liệu, ví dụ pvm_upkint() dùng cho kiểu dữ liệu kiểu nguyên, pvm_upkfloat() dùng cho dữ liệu kiểu thực. • Kết thúc tiến trình Trong quá trình hoạt động PVM cho phép loại bỏ tiến trình khi tiến trình đã thực hiện xong công việc hoặc không cần thiết nữa thông qua hàm pvm_exit(), cho tiến trình thường trú pvmd biết rằng tiến trình đó được loại khỏi hệ thống PVM. 3. Thử nghiệm, so sánh các chiến lược song song hoáTrong quá trình thực hiện đề tài “Xử lý song song trên PVM ứng dụng trong bài toán bảo mật”. Chúng tôi có sử dụng thuật toán RSA để mã hoá. Vấn đề mấu chốt của thuật toán RSA là việc sinh ra các số nguyên tố. Trong quá trình thử nghiệm chúng tôi thực hiện cài đặt bài toán tìm số nguyên tố theo ba chiến lược trên. Giải thuật mà chúng tôi dùng là giải thuật “sàng Eratosthenes”. Giải thuật sàng Eratosthenes: Bước 1: Nhập 1 n Bước 2 : Loại bỏ 1 Bước 3: Lặp các bước sau đây cho đến căn bậc hai của n Bước 3.1: Tìm tiếp số đầu chưa loại bỏ, kí hiệu p, nếu tìm được p là số nguyên tố Bước 3.2: Loại bỏ các số là bội của p kể từ p2 3.1 Sử dụng chiến lược song song hoá kết quả Chúng tôi dùng mảng logic để kiểm tra số nguyên tố. Phần tử đầu tiên của mảng biểu diễn cho số 1, phần tử thứ 2 biểu diễn cho số 2, tiếp tục như vậy. Nếu phần tử có giá trị là true thì số ứng với phần tử đó là số nguyên tố và ngược lại. Tiến trình cha khởi tạo mảng, sinh các tiến trình con xử lý mỗi phần tử của mảng, các tiến trình con này có nhiệm vụ kiểm tra số ứng với vị trí của phần tử đó có phải là số nguyên tố hay không, sau đó tiến trình cha có nhiệm vụ tập hợp kết quả để hiển thị. C Code: Select All | Show/Hide 1. #define MAX 100000 2. #define TRUE 1 3. #define FALSE 0 4. void main(){ 5. int kq[MAX],tid,tids[MAX-2],i,num,res; 6. (void) pvm_mytid() // Khởi tạo tiến trình 7. kq[0]=FALSE;kq[1]=TRUE; 8. //Sinh tiến trình con 9. (void) pvm_spawn(“nguyento”,(char**)0,0,””,MAX-2,tids); 10. //Gửi cho các tiến trình con để kiểm tra 11. for(i=2;i<MAX;i++){ 12. pvm_intsend(PvmDataRaw); 13. pvm_pkint(&i,1,1); 14. pvm_send(tids[i],1); 15. } 16. //Nhận kết quả 17. for(i=2;i<MAX;i++){ 18. pvm_recv(-1,2); 19. pvm_upkint(&num,1,1); pvm_upkint(&res,1,1); 20. kq[num]=res; 21. } 22. //Hiển thị kết quả 23. for(i=0;i<MAX;i++) 24. if(kq[i]) printf(“%d”,i); 25. pvm_exit()// Kết thúc tiển trình 26. exit(0); 27. } Mỗi tiến trình con sẽ là nhiệm vụ kiểm tra và trả lại giá trị TRUE nếu đúng là số nguyên tố và ngược lại. C Code: Select All | Show/Hide 28. #define TRUE 1 29. #define FALSE 0 30. void main(){ 31. int p_tid,i,num,res; 32. p_tid=pvm_parent(); //Nhận số định danh tiến trình 33. //Nhận dữ liệu 34. pvm_recv(p_tid,1);pvm_upkint(&num,1,1); 35. //Kiểm tra số nguyên tố 36. res=TRUE;i=2; 37. while(res &&(i<sqrt(num)){ 38. res &&=((num %i)!=0); 39. i++; 40. } 41. //Gửi kết quả 42. pvm_initsend(PvmDataRaw); 43. pvm_pkint(&num,1,1);pvm_pkint(&res,1,1); 44. pvm_send(p_tid,2); 45. pvm_exit(); 46. exit(0); 47. } 3.2 Sử dụng chiến lược song song hoá đại diện Cũng giống như chiến lược trên, chúng tôi cũng dùng mảng logic để kiểm tra số nguyên tố.Phần tử đầu tiên của mảng biểu diễn cho số 1, phần tử thứ 2 biểu diễn cho số 2, tiếp tục như vậy. Nếu phần tử có giá trị là true thì số ứng với phần tử đó là số nguyên tố và ngược lại. Tuy nhiên chỉ có một số lượng nhỏ các tiến trình kiểm thực hiện công việc kiểm tra, sau khi kiểm tra xong, các tiến trình này tiếp tục kiểm tra các phần tử khác. C Code: Select All | Show/Hide 48. #define MAX 100000 49. #define NPROCS 3 50. #define TRUE 1 51. #define FALSE 0 52. void main() 53. { 54. int kq[MAX],tids[NPROCS],bufid,msgtag,msglength,msgsrc,from,upto; 55. int allocated=2,halt=0; 56. (void) pvm_mytid();//Khởi tạo tiến trình 57. kq[0] = FALSE; kq[1] = TRUE; 58. //Sinh tiến trình 59. (void) pvm_spawn (“nguyento”,(char **) 0,0,””,NPROCS,tids); 60. while(NPROCS>0) 61. { 62. bufid = pvm_recv (-1,-1); 63. pvm_bufinfo(bufid,&msglength,&msgtag,&msgsrc); 64. switch(msgtag) 65. { 66. case REQUESTTAG : 67. pvm_initsend(PvmDataRaw); 68. pvm_pkint(&allocated, 1, 1); 69. pvm_send(msgsrc,2); 70. if (allocated < MAX) 71. allocated += 100; 72. else 73. halted++; 74. break; 75. case RESULTTAG : 76. // Nhận dữ liệu 77. pvm_unpkint(&from, 1, 1); 78. pvm_unpkint(&upto, 1, 1); 79. if ((from < upto) && (upto < MAX)) 80. pvm_unpkint((&kq) + from, from - upto + 1, 1); 81. break; 82. }; 83. } 84. // Hiển thị kết quả 85. for(int i = 0; i < MAX; i++) 86. if(kq[i]) 87. printf ("%d ", i); 88. pvm_exit(); 89. exit(0); 90. } Đối với các tiến trình con, thực hiện kiểm tra số nguyên tố, sau khi kiểm tra xong gửi kết quả cho tiến trình cha và nhận các phần tử tiếp theo để thực hiện. C Code: Select All | Show/Hide 91. #define TRUE 1 92. #define FALSE 0 93. void main() 94. { 95. int ptid,num,kq[100],dum,task_end,i; 96. int task_start=0; 97. ptid = pvm_parent(); 98. while(task_start < MAX) 99. { 100. // Gửi yêu cầu nhận số mới để kiểm tra 101. pvm_initsend(PvmDataRaw); 102. pvm_pkint(&dum,1, 1); 103. pvm_send(ptid, 1); 104. pvm_recv(ptid,2); 105. pvm_upkint(&task_start,1, 1); 106. if (task_start<MAX) 107. { 108. task_end = task_start + 100; 109. if (task_end > MAX) 110. task_end = MAX; 111. for (num= task_start; num < task_end; num++) 112. { 113. kq[num - task_start] = TRUE; 114. i = 2; 115. while(kq[num - task_start] && (i < sqrt (num))) 116. { 117. kq[num - task_start] &&= ((num % i) != 0); 118. i++; 119. } 120. } 121. // Gửi kết quả cho tiến trình cha 122. pvm_initsend (PvmDataRaw); 123. pvm_pkint (&task_start, 1, 1); 124. pvm_pkint (&task_end, 1, 1); 125. pvm_pkint (kq, task_end - task_start + 1, 1); 126. pvm_send (ptid, 3); 127. } 128. } 129. pvm_exit(); 130. exit(0); 131. } 3.3 Sử dụng chiến lược song song hoá chuyên biệt Trong chiến lược này, chúng tôi khởi tạo các tiến trình kiểm tra số nguyên tố. Các số được tiến trình chính chuyển cho các tiến trình con để kiểm tra. Nếu số đó không phải là số nguyên tố, tiến trình tiếp tục kiểm tra số tiếp theo, nếu số đó là số nguyên tố và tiến trình khác chưa kiểm tra số đó thì sẽ kết nạp số đó vào tập kết quả.Nếu đã có tiến trình khác đã chọn số đó, tiến trình này sẽ tiếp tục kiểm tra như đã làm với tiến trình trước. C Code: Select All | Show/Hide 132. #define MAX 100000 133. #define TRUE 1 134. #define FALSE 0 135. void main() 136. { 137. int kq[MAX],tid,num,i; 138. (void) pvm_mytid();//Khởi tạo tiến trình 139. (void) pvm_spawn (“nguyento”,(char**)0,0,””,1, &tid); 140. for (num = 2; number <= MAX; num++) 141. { 142. pvm_initsend (PvmDataRaw); 143. pvm_pkint (&num, 1, 1); 144. pvm_send (tid,1); 145. } 146. // Nhận kết quả 147. pvm_recv (tid,2); 148. pvm_unpkint (&num,1,1); 149. pvm_unpkint (kq,num + 1, 1); 150. kq[0] = FALSE; 151. //Hiển thị kết quả 152. for (i = 0; i < (num + 1), i++) 153. printf ("%d ", kq[i]); 154. pvm_exit(); 155. exit(0); 156. } Các tiến trình con thực hiện việc kiểm tra, đồng thời các tiến trình động được PVM được tạo ra khi có yêu cầu. C Code: Select All | Show/Hide 157. #define MAX 100000 158. #define TRUE 1 159. #define FALSE 0 160. void main() 161. { 162. int ptid,ngto,n,kq[MAX]; 163. int next_tid = 0; 164. int length = 0; 165. ptid = pvm_parent(); 166. pvm_recv(ptid,1); 167. pvm_unpkint(&ngto, 1, 1); 168. while (n < MAX) 169. { 170. //Nhận số nguyên mới để kiểm tra 171. pvm_recv (ptid,1); 172. pvm_unpkint(&n, 1, 1); 173. if (n < MAX) 174. { 175. if ((n % ngto) != 0) 176. { 177. if (!next_tid) 178. //Tạo tiến trình mới 179. pvm_spawn(“nguyento”,(char**)0,0,””,1,&next_tid); 180. pvm_initsend(PvmDataRaw); 181. pvm_pkint(&n,1, 1); 182. pvm_send(next_tid, 1); 183. } 184. } 185. } 186. if (next_tid) 187. { 188. pvm_initsend(PvmDataRaw); 189. pvm_pkint(&n, 1, 1); 190. pvm_send(next_tid,1); 191. pvm_recv(next_tid, 2); 192. pvm_unpkint(&length, 1, 1); 193. pvm_unpkint((kq + 1), length, 1); 194. } 195. kq[0] = ngto; 196. length++; 197. pvm_initsend(PvmDataRaw); 198. pvm_pkint(&length, 1, 1); 199. pvm_pkint(kq,length, 1); 200. pvm_send(ptid,2); 201. pvm_exit(); 202. exit(0); 203. } 3.d Nhận xét Chúng tôi tiến hành thử nghiệm trên ba máy tính Với các cấu hình Pentium IV 2.4 Mhz bộ nhớ 512MB, Pentium III 750 Mhz bộ nhớ 256 MB và Xeron 1.7Mhz bộ nhớ 128MB. Sử dụng chiến lược song song hoá kết quả, chương trình thực hiện hiệu quả nhất. Tuy nhiên do dữ liệu chương trình nhỏ nên sử dụng các chiến lược này chưa cho hiệu quả chênh lệch rõ rệt. Về phương diện cài đặt, cài đặt chương trình theo chiến lược song song hoá kết quả dễ dàng hơn so với song song hoá đại diện và song song hoá chuyên biệt. 4. Kết luậnĐể song song hóa thuật toán tuần tự có rất nhiều chiến lược, để cho hiệu quả cần phải chọn chiến lược phù hợp với thuật toán. Trong quá trình thực hiện thực hiện đề tài “Xử lý song song trên PVM ứng dụng trong bài toán bảo mật” chúng tôi đã thử [...]... *cptr += *(aptr++) * *bptr; bptr += N; } } } } Chương trình nhân ma trận song song dùng MPI Có nhiều phương án song song hóa bài toán nhân ma trận, trong đó có phương pháp phân chia dữ liệu cho các tác vụ theo dòng hoặc theo cột, phương pháp sử dụng giải thuật Cannon (phân chia dữ liệu theo khối) Dưới đây là một phương pháp song song hóa đơn giản Trong phương pháp này, chúng ta truyền ma trận B và một... trong một lần tính toán vừa với kích thước của cache Trong đoạn mã dưới đây, chúng ta giới hạn kích thước của một lần thực hiện phép nhân ma trận bằng hằng số THRESHOLD Giải thuật mm Mã nguồn của phương thức nhân ma trận dùng giải thuật mm như sau: C Code: Select All | Show/Hide 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 /* Matrix multiplication */ /* source...nghiệm một số chiến lược tiếp cận khác nhau để tìm ra chiến lược phù hợp nhất bài toán của mình Song song hóa bài toán nhân ma trận Bài toán yêu cầu thực hiện phép nhân hai ma trận A=lxm và B=mxn để thu được ma trận kết quả C=lxn Cách giải quyết trực tiếp trên một máy tính là dùng các vòng lặp: C Code: Select All | Show/Hide 204 205 206 207 for (i=0; i . 1. Giải thuật song song | Thảo luận về các giải thuật song song Thân chào các bạn! Trong topic này mình đưa ra ý tưởng cùng thảo luận và trao đổi với nhau về giải thuật song song với nội. dụng là song song hoá chức năng và song song hoá dữ liệu. Phương pháp song song các chức năng, ứng dụng bao gồm nhiều chức năng, các chức năng được thực hiện song song. Phương pháp song song hoá. Data). - Thuật toán song song thì rất đa dạng, mỗi bài toán có một chiến lược song song riêng. Tuy nhiên, người ta khái quát hóa được hai chiến lược chính là song song theo chức năng và song song