Khóa luận Nghiên cứu tính toán lưới và thử nghiệm một số thuật toán lí thuyết đồ thị

Tài liệu Khóa luận Nghiên cứu tính toán lưới và thử nghiệm một số thuật toán lí thuyết đồ thị: TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM HUỲNH BÁ THANH TÙNG - 0112079 TRẦN VIỆT CƯỜNG - 0112339 NGHIÊN CỨU TÍNH TOÁN LƯỚI VÀ THỬ NGHIỆM MỘT SỐ THUẬT TOÁN LÝ THUYẾT ĐỒ THỊ KHÓA LUẬN CỬ NHÂN TIN HỌC GIÁO VIÊN HƯỚNG DẪN TS. TRẦN ĐAN THƯ Th.S NGUYỄN THANH SƠN NIÊN KHÓA 2001-2005 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... ..........................................................

pdf138 trang | Chia sẻ: haohao | Lượt xem: 1145 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Nghiên cứu tính toán lưới và thử nghiệm một số thuật toán lí thuyết đồ thị, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM HUỲNH BÁ THANH TÙNG - 0112079 TRẦN VIỆT CƯỜNG - 0112339 NGHIÊN CỨU TÍNH TOÁN LƯỚI VÀ THỬ NGHIỆM MỘT SỐ THUẬT TOÁN LÝ THUYẾT ĐỒ THỊ KHÓA LUẬN CỬ NHÂN TIN HỌC GIÁO VIÊN HƯỚNG DẪN TS. TRẦN ĐAN THƯ Th.S NGUYỄN THANH SƠN NIÊN KHÓA 2001-2005 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... LỜI CẢM ƠN Chúng em xin bày tỏ lòng biết ơn chân thành nhất đến thầy Trần Đan Thư và thầy Nguyễn Thanh Sơn, hai thầy đã tận tâm hướng dẫn, giúp đỡ chúng em trong suốt thời gian thực hiện luận văn này. Chúng con xin gửi tất cả lòng biết ơn sâu sắc và sự kính trọng đến ông bà, cha mẹ, cùng toàn thể gia đình, những người đã nuôi dạy chúng con trưởng thành đến ngày hôm nay. Chúng em cũng xin chân thành cám ơn quý Thầy cô trong Khoa Công nghệ thông tin, trường Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh đã tận tình giảng dạy, hướng dẫn, giúp đỡ và tạo điều kiện cho chúng em thực hiện tốt luận văn này. Xin chân thành cám ơn sự giúp đỡ, động viên và chỉ bảo rất nhiệt tình của các anh chị và tất cả các bạn, những người đã giúp chúng tôi có đủ nghị lực và ý chí để hoàn thành luận văn này. Mặc dù đã cố gắng hết sức, song chắc chắn luận văn không khỏi những thiếu sót. Chúng em rất mong nhận được sự thông cảm và chỉ bảo tận tình của quý Thầy Cô và các bạn. TP.HCM, 7/2005 Nhóm sinh viên thực hiện Huỳnh Bá Thanh Tùng - Trần Việt Cường LỜI NÓI ĐẦU Nhân lọai ngày nay đang chứng kiến sự phát triển mạnh mẽ của ngành Công nghệ Thông tin, một trong những ngành mũi nhọn của nhiều quốc gia trên thế giới. Sự phát triển vượt bậc của nó là kết quả tất yếu của sự phát triển kèm theo các thiết bị phần cứng cũng như phần mềm tiện ích. Sự phát triển đó đã kéo theo rất nhiều các ngành khác phát triền theo, trong đó có lĩnh vực nghiên cứu khoa học. Tuy công nghệ ngày càng phát triển, tốc độ xử lý của các thiết bị cũng không ngừng tăng cao, nhưng nhu cầu tính toán của con người vẫn còn rất lớn. Cho đến hiện nay vẫn còn rất nhiều vấn đề mà các nhà khoa học cùng với khả năng tính toán của các máy tính hiện nay vẫn chưa giải quyết được hay giải quyết được nhưng với thời gian rất lớn. Các vấn đề đó có thể là : • Mô hình hóa và giả lập • Xử lý thao tác trên các dữ liệu rất lớn • Các vấn đề “grand challenge” (là các vấn đề không thể giải quyết trong thời gian hợp lý) Lời giải cho những vấn đề này đã dẫn đến sự ra đời của các thế hệ siêu máy tính. Tuy nhiên việc đầu tư phát triển cho các thiết bị này gần như là điều quá khó khăn đối với nhiều người, tổ chức, trường học…. Chính vì lẽ đó mà ngày nay người ta đang tập trung nghiên cứu cách cách sử dụng các tài nguyên phân bố một cách hợp lý để tận dụng được khả năng tính toán của các máy tính đơn. Những giải pháp này được biết đến với nhiều tên gọi khác nhau như meta- computing, salable-computing, global- computing, internet computing và gần nhất hiện nay là peer to peer computing hay Grid computing. Đây là phương pháp nhằm tận dụng khả năng của các máy tính trên toàn mạng thành một máy tính “ảo” duy nhất, nhằm hợp nhất tài nguyên tính toán ở nhiều nơi trên thế giới để tạo ra một khả năng tính toán khổng lồ, góp phần giải quyết các vấn đề khó khăn trong khoa học và công nghệ. Ngày nay nó đang càng được sự hỗ trợ mạnh hơn của các thiết bị phần cứng, băng thông… Grid Computing có khả năng chia sẻ, chọn lựa, và thu gom một số lượng lớn những tài nguyên khác nhau bao gồm những siêu máy tính, các hệ thống lưu trữ, cùng với những nguồn dữ liệu, các thiết bị đặt biệt… Những tài nguyên này được phân bố ở các vùng địa lý khác nhau và thuộc về các tổ chức khác nhau. Nhận thấy được nhu cầu phát triển ấy, nhóm chúng em đã quyết định chọn thực hiện đề tài “Nghiên cứu tính toán lưới và thực nghiệm trên một số thuật toán lý thuyết đồ thị” Mục tiêu của đề tài đề ra là tìm hiểu về tính toán lưới, và qua đó tận dụng các kiến thức có được để có thể cài đặt một số thuật toán lý thuyết đồ thị, nhằm có thể giải quyết các vấn đề tìm đường đi khi số đỉnh tương đối lớn… Các nội dung chính: • Nghiên cứu tính toán lưới • Tìm hiểu các môi trường hỗ trợ • Tìm hiểu lập trinh song song và phân tán • Cài đặt một số thuật toán với kiến thức có được Nội dung của luận văn được chia làm 6 chương : Chương 1. Giới thiệu : Giới thiệu tổng quan về tính toán lưới, khái niệm lịch sử phát triển. Chương 2. Tính toán song song và phân bố : Trình bày về các kiến trúc, mô hình xử lý song song và phân bố, cách thức xây dựng chương trình, thiết kế thuật toán… Chương 3. Các môi trường hỗ trợ tính toán lưới : Tìm hiểu về các môi trường đang được sử dụng và nghiên cứu hiện nay trên thế giới. Chương 4. Mô hình lập trình truyền thông điệp - MPI : Mô hình cụ thể được dùng để phát triển ứng dụng MPI. Chương 5. Thử nghiệm các thuật toán lý thuyết đồ thị : Cách thức xây dựng chương trình , các khái niệm lý thuyết, thực nghiệm thực tế … Chương 6. Tổng kết : Nêu các kết quả đã đạt được, một số vấn đề còn tồn tại, định hướng mục tiêu mở rộng phát triển đề tài trong tương lai. Mục lục Danh sách hình..................................................................................................... 11 Chương 1. Giới thiệu ........................................................................................... 13 1.1. Các khái niệm.......................................................................................... 13 1.2. Những thách thức đối với tính toán lưới ................................................. 16 Chương 2. Tính toán song song và phân bố ...................................................... 17 2.1. Khái niệm ................................................................................................ 17 2.2. Nền tảng tính toán song song và phân bố ............................................... 18 2.2.1. Kiến trúc xử lý song song và phân bố ..............................................18 2.2.2. Tổ chức vật lý của các nền tảng song song và phân bố ....................25 2.3. Một số mô hình lập trình song song thông dụng..................................... 26 2.3.1. Mô hình chia sẽ không gian bộ nhớ..................................................26 2.3.2. Mô hình truyền thông điệp ...............................................................27 2.4. Cách thức xây dựng một chương trình song song và phân bố ................ 29 2.4.1. Các thuật ngữ căn bản.......................................................................29 2.4.2. Thiết kế thuật toán song song ...........................................................31 2.4.3. Một số phương pháp tối ưu...............................................................43 2.4.4. Các mô hình thuật toán song song....................................................48 Chương 3. Các môi trường hỗ trợ tính toán lưới ............................................. 52 3.1. Giới thiệu................................................................................................. 52 3.2. Các vấn đề khi lập trình luới ................................................................... 53 3.2.1. Tính mang chuyển, tính khả thi và khả năng thích ứng....................53 3.2.2. Khả năng phát hiện tài nguyên .........................................................54 3.2.3. Hiệu năng..........................................................................................54 3.2.4. Dung lỗi ............................................................................................55 3.2.5. Bảo mật .............................................................................................55 3.2.6. Các siêu mô hình...............................................................................55 3.3. Tổng quát về các môi trường hỗ trợ........................................................ 56 3.3.1. Một số môi trường Grid....................................................................56 3.3.2. Những mô hình lập trình và công cụ hỗ trợ......................................59 3.3.3. Môi trường cài đặt ............................................................................64 3.4. Những kỹ thuật nâng cao hỗ trợ lập trình ............................................... 75 3.4.1. Các kỹ thuật truyền thống.................................................................76 3.4.2. Các kỹ thuật hướng dữ liệu...............................................................76 3.4.3. Các kỹ thuật suy đoán và tối ưu........................................................77 3.4.4. Các kỹ thuật phân tán........................................................................77 3.4.5. Nhập xuất hướng Grid ......................................................................78 3.4.6. Các dịch vụ giao tiếp cấp cao ...........................................................78 3.4.7. Bảo mật .............................................................................................80 3.4.8. Dung lỗi ............................................................................................80 3.4.9. Các siêu mô hình và hệ thống thời gian thực hướng Grid................82 3.5. Tóm tắt .................................................................................................... 83 Chương 4. Mô hình lập trình truyền thông điệp - MPI................................... 85 4.1. Các khái niệm cơ bản .............................................................................. 86 4.2. Cấu trúc chương trình MPI ..................................................................... 89 4.3. Trao đổi thông tin điểm-điểm ................................................................. 90 4.3.1. Các thông tin của thông điệp ............................................................90 4.3.2. Các hình thức truyền thông...............................................................91 4.3.3. Giao tiếp blocking.............................................................................92 4.3.4. Giao tiếp non-blocking .....................................................................96 4.4. Trao đổi thông tin tập hợp..................................................................... 101 4.4.1. Đồng bộ hóa....................................................................................101 4.4.2. Di dời dữ liệu trong nhóm ..............................................................101 4.4.3. Tính toán gộp ..................................................................................105 4.5. Các kiểu dữ liệu..................................................................................... 109 4.5.1. Những kiểu dữ liệu đã được định nghĩa .........................................109 4.5.2. Các kiểu dữ liệu bổ sung.................................................................110 4.5.3. Pack và UnPack ..............................................................................113 Chương 5. Thử nghiệm các thuật toán lý thuyết đồ thị ................................. 114 5.1. Các khái niệm cơ bản ............................................................................ 114 5.2. Dijkstra .................................................................................................. 115 5.2.1. Tuần tự ............................................................................................115 5.2.2. Song song........................................................................................119 5.2.3. Thực nghiệm chương trình .............................................................120 5.3. Prim ....................................................................................................... 122 5.3.1. Tuần tự ............................................................................................122 5.3.2. Song song........................................................................................124 5.3.3. Thực nghiệm chương trình .............................................................126 5.4. Bellman – Ford...................................................................................... 128 5.4.1. Tuần tự ............................................................................................128 5.4.2. Song song........................................................................................130 5.4.3. Thực nghiệm chương trình .............................................................132 5.5. Đánh giá chung...................................................................................... 134 Chương 6. Tổng kết ........................................................................................... 136 6.1. Kết luận ................................................................................................. 136 6.2. Hướng phát triển ................................................................................... 136 Tài liệu tham khảo ............................................................................................. 138 Danh sách hình Hình 1-1 : 3 tầng của Grid ................................................................................ 15 Hình 2-1 : Phân lọai hệ thống máy tính theo Flynn-Johnson ........................... 19 Hình 2-2 : Kiến trúc SISD ................................................................................ 19 Hình 2-3 : Kiến trúc SIMD ............................................................................... 20 Hình 2-4 : Kiến trúc MISD ............................................................................... 22 Hình 2-5 : Kiến trúc MIMD.............................................................................. 23 Hình 2-6 : Mô hình chía sẽ không gian bộ nhớ ................................................ 27 Hình 2-7 : Mô hình truyền thông điệp .............................................................. 28 Hình 3-1 : Mô hình NetSolve............................................................................ 56 Hình 3-2 : Các thành phần của Globus ............................................................. 59 Hình 4-1 : Các tiến trình tạo lập trên mô hình lập trình MPI ........................... 86 Hình 4-2 : Cách thức truyền thông của các process.......................................... 87 Hình 4-3 : Blocking và non-blocking ............................................................... 88 Hình 4-4 : Group, communicator và rank......................................................... 88 Hình 4-5 : Cấu trúc của chương trình MPI ....................................................... 89 Hình 4-6 : Giao tiếp blocking ........................................................................... 92 Hình 4-7 : Thứ tự các xử lý............................................................................... 95 Hình 4-8 : Cách thức xử lý tiến trình ................................................................ 95 Hình 4-9 : Giao tiếp non-blocking .................................................................... 96 Hình 4-10 : Broadcast dữ liệu ......................................................................... 102 Hình 4-11 : Ví dụ hàm Scatter ........................................................................ 103 Hình 4-12 : Hàm MPI_Gather ........................................................................ 103 Hình 4-13 : Hàm MPI_Allgather .................................................................... 104 Hình 4-14 : Hàm MPI_Alltoall ....................................................................... 104 Hình 4-15 : Hàm MPI_Reduce ....................................................................... 105 Hình 4-16 : Sử dụng 8 xử lý để tính giá trị tuyệt đối...................................... 107 Hình 4-17 Hàm Mpi-Allreduce....................................................................... 108 Hình 4-18 : Hàm MPI_Reduce_scatter........................................................... 108 Hình 4-19 : Hàm MPI_Scan ........................................................................... 109 Hình 4-20 : MPI_Type_contiguous ................................................................ 110 Trang 12 Hình 4-21 : MPI_Type_vetor.......................................................................... 111 Hình 4-22 : MPI_Type_indexed ..................................................................... 112 Hình 4-23 : MPI_Type_struct ......................................................................... 112 Hình 5-1. Thuật toán Dijkstra tuần tự ............................................................. 118 Hình 5-2 : Thuật toán Dijkstra song song....................................................... 119 Hình 5-3. Thuật toán Prim tuần tự .................................................................. 124 Hình 5-3 : Thuật toán Prim song song ............................................................ 125 Hình 5-4: Thuật toán Bellman-Ford tuần tự ................................................... 130 Hình 5-5 : Thuật toán Bellman-Ford song song ............................................. 132 Trang 13 Chương 1. Giới thiệu 1.1. Các khái niệm Trong những năm đầu thập niên 90, nhiều nhóm nghiên cứu đã bắt đầu khai thác các nguồn tài nguyên tính toán phân tán trên Internet. Các nhà khoa học đã tập trung và sử dụng hàng trăm các máy trạm để thực hiện các chương trình song song như thiết kế phân tử và hiển thị đồ họa máy tính. Trong khi đó các nhóm nghiên cứu khác đã kết hợp các siêu máy tính lớn lại với nhau thành một siêu máy tính ảo duy nhất, rồi phân phối các phần của một ứng dụng rất lớn cho các máy tính trên một mạng diện rộng, ví dụ như máy tính giả lập các ứng dụng tương tác giữa chất lỏng và cánh quạt của chân vịt tàu…Thêm vào đó phạm vi của các dự án nghiên cứu này đã nêu ra tiềm năng thực sự của mạng máy tính, cùng với cơ sở phần mềm và tin học để phát triển nó xa hơn. Hệ thống đa bộ xử lý (Multiprocessor Systems - MPs), Cluster, Grids là các ví dụ của kiến trúc tính toán phân tán. Trong MPs, các bộ xử lý được kết hơp chặt chẽ với nhau, thông qua bộ nhớ chia sẽ chung và đường truyền kết nối rất cao. Ví dụ như là PVPs (Parallel Vector Processors), chúng hầu như rất thích hợp cho tính toán hiệu năng cao, như là các ứng dụng song song dựa vào trao đổi thông điệp tốc độ cao giữa các tiến trình song song. Trang 14 Trong khi đó Cluster lại là các máy tính đơn hay đa bộ xử lý được kết hợp tương đối với nhau thông qua đường mạng, vì thế nó chậm hơn từ 1 đến 2 lần so với kết nối MP. Ví dụ như cluster Beowulf chạy Linux, hay TCF (Technical Compute Farm) của Sun chạy hệ điều hành Solaris/TM, chúng được sử dụng cho các tính toán số lượng lớn, phân phối các tác vụ tính toán (thường là không song song) cho các bộ xử lý, rồi thu thập lại các kết quả tính toán vào kết quả toàn cục. Các tính toán này có thể là việc hiển thị hàng ngàn khung hình để làm phim hay là giả lập việc kiểm tra và thiết kế để xây dựng thế hệ tiếp theo của chip VLSI, hay như trong công nghệ sinh học, đó là việc cắt lớp hàng trăm ngàn chuỗi gen. Trong khi MPs và Cluster chỉ là các hệ thống đơn, thường là trong một domain đơn. Grid điện toán bao gồm các cluster của mạng các MPs hay/và cluster, nằm trên nhiều domain khác nhau, phân bố ở nhiều phòng ban, xí nghiệp hay thậm chí là trên mạng Internet. Về bản chất, những grid có một độ phức tạp cao hơn, đặc biệt là ở tầng trung gian, trong việc thực thi, quản lý, và sử dụng các tài nguyên tính toán phân tán, và ở tầng ứng dụng là việc thiết kế, phát triển, chạy các phần mềm để triển khai grid một cách hiệu quả. Tóm lại Grid là một kiến trúc tính toán phân tán cho phép chuyển giao các tài nguyên lưu trữ và tính toán như thể là một dịch vụ trên Internet. Đây là bước phát triển tiếp theo về cơ sở hạ tầng kỹ thuật, cho phép kết nối các máy tính phân tán, các thiết bị lưu trữ, các thiết bị di động, các công cụ, cơ sở dữ liệu, và các ứng dụng phần mềm, và cung cấp cách thức truy cập duy nhất đến cộng đồng người dùng để cho phép tính toán, trao đổi thông tin và cộng tác. Một số hệ thống grid hiện tại như là NASA Information Power Grid (IPG); DoD Distance Computing và NetSolve cho chia sẽ và khai thác phần mềm toán học; Nimrod cho chia sẽ tài nguyên trên phạm vi trường học; SETI@Home cho tìm kiếm trí thông minh ngòai trái đất; hay là APGrid để kết nối các trung tâm máy tính ở vành đai Châu Á Thái Bình Dương trong tương lai gần. Trang 15 Hình 1-1 : 3 tầng của Grid Grid là một cơ sở hạ tầng về phần cứng lẫn phần mềm cung cấp truy cập phụ thuộc, thích hợp, rộng khắp và chi phí thấp vào các khả năng tính toán. Trong một tương lai không xa, những grid này sẽ được các kỹ sư, nhà khoa học, khoa học thực nghiệm, công ty, tổ chức, môi trường, giáo dục và đào tạo, khách hàng, … sử dụng rộng rãi. Chúng sẽ được dành riêng cho tính toán theo yêu cầu, tính toán trên thông tin nhạy cảm, tính toán cộng tác, và siêu tính toán, dựa trên cơ sở của khách hàng/nhà cung cấp. Ngày nay chúng ta đang thấy những nỗ lực đầu tiên nhằm khai thác một cách có hệ thống các nguồn tài nguyên tính toán lưới trên mạng Internet. Những dự án này được gọi là peer-to-peer computing, như SETI@home, Distributed.Net và Folderol, cho phép người dùng Internet tải về các dữ liệu khoa học, chạy trên các máy cá nhân theo chu trình xử lý chia sẽ, và gửi lại kết quả cho cơ sở dữ liệu trung tâm. Gần đây có một dự án ở một trường đại học, được gọi là Compute Power Market, được xây dựng nên nhằm phát triển các kỹ thuật phần mềm cho phép tạo lập những Grid, mà ở đó bất cứ ai cũng có thể mua hay bán khả năng khả năng tính toán giống như cách mà người ta sử dụng điện hiện nay. Trang 16 1.2. Những thách thức đối với tính toán lưới Hầu hết các kỹ thuật phức tạp bên dưới dành cho Grid hiện nay đang được tiếp tục phát triển. Các môi trường Grid mẫu tồn tại giống như các dự án Globus và Legion. Đồ án EcoGrid thì đang nghiên cứu cách thức quản lý tài nguyên, và các khối xây dựng như vậy đang tồn tại trong trình quản lý tài nguyên mang tính thương mại của phần mềm Sun Grid Engine. Diễn đàn Grid (GGF – Global Grid Forum), được thành lập vào năm 1998, đã tập hợp được hàng trăm các nhà khoa học để cùng nhau nghiên cứu và thảo luận về một kiến trúc Grid chung. Trong đó vẫn còn tồn tại một số thách thức sau: • Phát triền phần mềm ứng dụng cho Grid • Chỉ ra và truy cập các nguồn tài nguyên tính toán thích hợp trên môi trường phân tán • Định nghĩa những giao tiếp chuẩn cho phép giao tiếp giữa các khối Grid với nhau, nhằm đáp ứng nhu cầu phát triển ứng dụng. • Bảo đảm các truy cập được xác nhận và truyền dữ liệu an toàn. • Cung cấp các dịch vụ cho phép theo dõi, quảng cáo và kết xuất báo cáo. • Thiết kế các nghi thức mạng cho việc trao đổi và định dạng thông điệp. Trang 17 Chương 2. Tính toán song song và phân bố 2.1. Khái niệm Ngày nay trong khi công nghệ ngày một phát triển thì nhu cầu về tốc độ tính toán của các hệ thống máy tính cũng ngày một tăng cao. Các lĩnh vực đòi hỏi tính tóan hiệu năng cao như là mô hình số và giả lập các vấn đề của khoa học và công nghệ. Ngoài ra nó còn nhằm giải quyết các lọai vấn đề cần tốc độ xử lý cao như: • Mô hình hóa và giả lập Mô hình các mẫu DNA Mô hình hóa chuyển động của các phi hành gia … • Xử lý/Thao tác trên các dữ liệu rất lớn Xử lý ảnh và tín hiệu Khai thác dữ liệu và cơ sở dữ liệu Xác định địa chấn … • Các vấn đề “grand challenge” (là những vấn đề không thể giải quyết trong thời gian “hợp lý”, như cần 100, 1000,…năm để có đáp án) Mô hình khí hậu Sự chuyển động của chất lỏng Bộ gene con người Mô hình chất bán dẫn … Xuất phát từ nhu cầu đó đã dẫn đến sự cần thiết phải có những hệ thống song song và phân bố nhằm tận dụng tối đa khả năng thực thi của các bộ xử lý, và để giải quyết các vấn đề nan giải trên. Trang 18 2.2. Nền tảng tính toán song song và phân bố Trong phần này chúng ta sẽ xem xét cách tổ chức logic và vật lý của các nền tảng song song và phân tán. Cách tổ chức logic liên quan đến quan điểm của người lập trình (kiến trúc xử lý song song và phân bố) trong khi cách tổ chức vật lý liên quan đến cách cơ cấu thực sự của các phần cứng bên dưới. Trong tính toán song song thì từ quan điểm của người lập trình gồm 2 thành phần chính quan trọng đó là cách thức thể hiện các tác vụ song song (cấu trúc điều khiển) và những phương pháp xác định tương tác giữa các tác vụ này (mô hình giao tiếp). 2.2.1. Kiến trúc xử lý song song và phân bố Máy tính song song có thể được chia theo 2 lọai chính là : dòng điều khiển (control flow) và dòng dữ liệu (data flow). Máy tính song song dòng điều khiển dựa chủ yếu theo các nguyên tắc của máy tính Von Neumann, ngọai trừ nhiều dòng điều khiển có thể thực hiện vào bất cứ thời gian nào. Máy tính song song dòng dữ liệu , đôi khi được biết đến là “phi Von Neumann”, thì hoàn toàn khác biệt ở chỗ nó không có con trỏ trỏ tới các chỉ thị hiện hành hay trung tâm điều khiển. Ở đây chúng ta chỉ tập trung vào các máy tính song song dòng điều khiển. Năm 1966, M.J.Flynn đã phân chia các hệ thống máy tính dựa trên dòng chỉ thị và dòng điều khiển thành 4 loại sau: • SISD (Single Instruction stream, a Single Data stream) • SIMD (Single Instruction stream, Multiple Data streams) • MISD (Multiple Instruction streams, a Single Data stream) • MIMD (Multiple Instruction streams, Multiple Data streams) Phân theo mức độ hay được sử dụng: MIMD > SIMD > MISD Trang 19 In st ru ct io n S tre am (s ) SISD (Uniprocessors) SIMD (Array Processors) MISD GMSV GMMP DMSV Data Stream(s) Single Multiple M ul tip le S in gl e Shared Variables Message Passing G lo ba l D is tri bu te d M em or y Communication DMMP MIMD Hình 2-1 : Phân lọai hệ thống máy tính theo Flynn-Johnson 2.2.1.1. SISD Hình 2-2 : Kiến trúc SISD Kiến trúc này tương tự với kiến trúc Von Neumann. Một đơn vị điều khiển tiếp nhận một chỉ thị đơn từ bộ nhớ, sau đó đưa vào cho bộ xử lý thực thi trên một đơn vị dữ liệu được chỉ ra trong chỉ thị nhận được, và cuối cùng là đưa kết quả nhận được vào bộ nhớ. 2.2.1.2. SIMD Hầu hết các máy tính song song ban đầu đều được thiết kế theo kiến trúc SIMD. Trong kiến trúc này, một đơn vị xử lý trung tâm sẽ thông dịch và quảng bá các tín hiệu điều khiển thích hợp cho các bộ xử lý theo chiều kim đồng hồ. Từng bộ xử lý sẽ thực thi các chỉ thị một cách đồng thời, và chúng cũng có quyền không tiếp nhận trên các chỉ thị nào đó. Sự phổ biến của kiến trúc SIMD là do tính năng của các ứng dụng song song ban đầu và từ yêu cầu của nền kinh Trang 20 tế. Theo quan điểm của người dùng thì các ứng dụng sử dụng kiến trúc SIMD thì dễ dàng được lập trình hơn và tận dụng hiệu quả hơn các thiết bị phần cứng. Hình 2-3 : Kiến trúc SIMD Bên trong SIMD, tồn tại hai lựa chọn thiết kế cơ bản sau: 1. SIMD đồng bộ và bất đồng bộ. Trong một máy SIMD, từng bộ xử lý có thể thực thi hay bỏ qua các chỉ thị được quảng bá dựa vào trạng thái cục bộ của nó hay những điều kiện phụ thuộc vào dữ liệu. Tuy nhiên điều này có thể dẫn đến xử lý một vài tính toán điều kiện không hiệu quả. Một cách giải quyết khả thi là sử dụng phiên bản bất đồng bộ của S1IMD, được biết đến là SPMD (Single Program Multiple Data), trong đó từng bộ xử lý sẽ chạy một bản sao của Trang 21 chương trình chung. Điểm thuận lợi của SPMD là trong lúc tính toán biểu thức điều kiện “if-then-else”, từng bộ xử lý sẽ chỉ thực hiện ở nhánh thích hợp mà không mất thời gian cho các chi phí tính toán khác. 2. Chip SIMD tùy chọn hay thống nhất (commodity). Một máy SIMD có thể được thiết kế dựa trên những thành phần thống nhất hay là từ những con chip tùy chọn. Trong cách tiếp cận thứ nhất thì các thành phần có xu hướng rẻ hơn do sản xuất hàng loạt. Tuy nhiên những thành phần mang mục đích chung như vậy có thể chứa các yếu tố không cần thiết cho một thiết kế cụ thể nào đó. Những thành phần thêm vào có thể làm phức tạp việc thiết kế, sản xuất và kiểm thử các máy SIMD và cũng có thể đem lại khiếm khuyết về tốc độ xử lý. Còn các thành phần tùy chọn thì nhìn chung hỗ trợ tốt hơn cho thực thi tuy nhiên nó cũng dẫn đến chi phí cao hơn cho việc phát triển. Khi việc tích hợp nhiều bộ xử lý cùng với bộ nhớ dư dật trên một con chip VLSI đơn trở nên khả thi, thì việc kết hợp ưu điểm của 2 cách tiếp cận trên là hoàn toàn có thể. 2.2.1.3. MISD Mô hình này hầu như không thấy nhiều trong các ứng dụng. Một trong những lý do là bởi vì hầu hết các ứng dụng không thế áp dụng một cách dễ dàng vào kiến trúc MISD, điều này dẫn đến việc thiết kế ra một kiến trúc để thỏa mãn cho một mục đích chung là điều không thể. Tuy nhiên có thể áp dụng các bộ xử lý song song kiểu MISD vào trong một ứng dụng cụ thể nào đó. Trang 22 Hình 2-4 : Kiến trúc MISD Trong hình trên là ví dụ về một bộ xử lý song song với kiến trúc MISD. Một dòng dữ liệu đơn đi vào một máy tính gồm 5 bộ xử lý. Nhiều phép biến đổi được thực hiện trên từng đơn vị dữ liệu trước khi nó được chuyển sang một (hay nhiều) bộ xử lý khác. Các đơn vị dữ liệu kế tiếp có thể đi qua các phép biến đổi khác do điều kiện độc lập dữ liệu của các dòng chỉ thị hay do các thẻ điều khiển đặc biệt được truyền cùng với dữ liệu. Chính vì vậy mà cách tổ chức theo kiến trúc MISD có thể được xem như là một hệ thống ống lệnh cấp độ cao và phức tạp với nhiều đường dẫn và trong đó từng giai đọan có thể được lập trình riêng biệt. 2.2.1.4. MIMD Được tiên đoán bởi các doanh nghiệp vào thập niên 90, mô hình MIMD gần đây đã trở nên khá phổ biến. Lý do cho sự thay đổi này là vì tính uyển chuyển cao của kiến trúc MIMD và bởi khả năng tận dụng được những ưu điểm của các bộ vi xử lý được sản xuất hàng lọat (commodity microprocessors), vì thế tránh được những vòng phát triển dài dòng và qua đó có thể được phát triển cùng với sự cải thiện của các bộ xử lý. Các máy tính MIMD được áp dụng rất hiệu quả cho các ứng dụng song song mà vấn đề của nó được phân rã từ trung bình cho đến tốt (medium- to coarse-grain parallel applications).Ưu điểm của các máy tính MIMD bao gồm khả năng uyển Trang 23 chuyển cao trong việc khai thác nhiều dạng thức song song khác nhau, dễ phân chia nhỏ hơn cho các bộ xử lý độc lập trong môi trường đa người dùng (tính chất này là ngụ ý quan trọng cho tính dung lỗi), ít khó khăn trong việc mở rộng (scalability). Nhưng bên cạnh đó kiến trúc này cũng có khuyết điểm là sự quá tải do giao tiếp giữa các bộ xử lý và việc lập trình gặp nhiều khó khăn. Hình 2-5 : Kiến trúc MIMD Bên trong kiến trúc MIMD, tồn tại 3 loại vấn đề cơ bản hay còn được gọi là cách lựa chọn thiết kế hiện vẫn là chủ đề đang được tranh cãi trong cộng đồng các nhà nghiên cứu. 1. MPP – massively or moderately parallel processor. Việc xây dựng một bộ xử lý song song từ một số lượng nhỏ các bộ xử lý Trang 24 mạnh mẽ hay từ một số lượng rất lớn các bộ xử lý bình thường (một “bầy voi” hay là một “đàn kiến”) thì cách nào sẽ hiệu quả hơn ?. Theo luật của Amdahl thì cách đầu tiên thích hợp hơn cho những phần tuần tự của một tính toán, trong khi cách tiếp cận thứ hai sẽ làm tăng tốc hơn nữa những phần mang tính song song. Không thể đưa ra một câu trả lời chung cho câu hỏi này, sự lựa chọn tốt nhất tùy thuộc vào loại công nghệ và ứng dụng đang được sử dụng. 2. MIMD “chặt chẽ” hay “lỏng lẻo”. Cách tiếp cận nào tốt hơn cho việc tính toán hiệu năng cao, bằng cách sử dụng đa bộ xử lý được thiết kế đặc biệt trên nhiều máy tính hay là tập hợp của những máy trạm bình thường được kết nối với nhau bởi các hệ thống mạng “tiện nghi” (như là Ethernet hay ATM) và những tương tác nào sẽ được kết nối với nhau bằng hệ thống phần mềm đặc biệt và các hệ thống tập tin phân tán? Cách tiếp cận thứ hai đôi khi được biết đến là mạng của các máy trạm (network of workstations hay là NOW) hay là tính toán cluster, đã được sử dụng rộng rãi trong những năm gần đây. Tuy nhiên vẫn còn nhiều vấn đề mở còn tồn tại nhằm phát huy tối đa khả năng của những kiến trúc có nền tảng là mạng. Thiết bị phần cứng, hệ thống phần mềm, và những khía cạnh ứng dụng của NOW đang được đầu tư tìm hiểu bởi một số lượng lớn các nhóm ngiên cứu. Một cách tiếp cận trung gian là kết hợp các cluster những bộ xử lý thông qua môi trường mạng. Điều này về cơ bản là một phương pháp phân nhánh, đặc biệt thích hợp khi có một sự truy cập rất lớn đến dữ liệu cục bộ. 3. Truyền thông điệp tường minh hay chia sẽ bộ nhớ ảo. Lọai nào sẽ tốt hơn, cho phép người dùng chỉ ra tất cả các loại thông điệp sẽ được truyền giữa các bộ xử lý hay là cho phép họ lập trình ở một cấp độ trừu tượng cao hơn, cùng với các thông điệp cần thiết tự động được phát sinh bởi hệ thống phần mềm? Câu hỏi này về cơ bản là tương tự với câu được hỏi trong những ngày đầu của những ngôn Trang 25 ngữ lập trình cấp cao và bộ nhớ ảo. Tại một vài thời điểm trong quá khứ, việc lập trình bằng hợp ngữ và thực hiện trao đổi giữa bộ nhớ chính và bộ nhớ phụ có thể đem lại hiệu quả cao hơn. Tuy nhiên, do ngày nay các phầm mềm đã đạt đến mức quá phức tạp, các trình biên dịch cùng với hệ điều hành cũng đã quá cấp cao đến nỗi việc tối ưu các chương trình bằng tay không còn là điều gì quá khó. Tuy nhiên chúng ta vẫn chưa ở thời điểm xử lý song song đáng kể, và việc che giấu cấu trúc giao tiếp tường minh giữa các máy tính song song ra khỏi người lập trình sẽ đem lại hiệu năng thực thi rất đáng kể. 2.2.2. Tổ chức vật lý của các nền tảng song song và phân bố Trong phần này chúng ta sẽ chỉ mô tả một máy tính song song lý tưởng là PRAM. Đây là một cách mở rộng tự nhiên của mô hình tính toán tuần tự (Random Access Machine hay là RAM) bao gồm p bộ xử lý và một vùng nhớ toàn cục có kích thước không giới hạn và được truy cập từ tất cá các bộ xử lý. Tất cả chúng đều có sử dụng cùng chung một không gian địa chỉ. Các bộ xử lý có thể cùng chia sẽ một đồng hồ chung nhưng cũng có thể thực thi các chỉ thị khác nhau trên cùng một chu kỳ. Mô hình này được biết đến là parallel random access machine (PRAM). Tùy thuộc vào cách thức truy cập bộ nhớ, PRAM được phân thành 4 loại sau. 1. Toàn quyền đọc - Toàn quyền ghi (exclusive-read, exclusive write) EREW. Trong loại này, truy cập vào vùng nhớ là toàn quyền. Không có thao tác đọc ghi nào được cho phép. Đây là mô hình PRAM không chắc chắn nhất, chỉ hỗ trợ truy cập đồng thời vào bộ nhớ một cách tối thiểu. 2. Đồng thời đọc – Toàn quyền ghi (concurrent read, exclusive write) CREW. Cho phép nhiều thao tác đọc cùng lúc trên cùng một vùng nhớ, tuy nhiên nhiều thao tác ghi chỉ thực hiện theo tuần tự. 3. Toàn quyền đọc – Đồng thời ghi (exclusive read, concurrent write) ERCW. Cho phép nhiều thao tác ghi cùng lúc trên cùng một vùng nhớ, tuy nhiên nhiều thao tác đọc chỉ thực hiện theo tuần tự. Trang 26 4. Đồng thời đọc – Đồng thời ghi (concurrent read, concurrent write) CRCW. Trong loại này, cho phép nhiều thao tác đọc ghi đồng thời trên cùng vùng nhớ chung. Đây là mô hình PRAM có nhiều ưu điểm nhất. Việc có nhiều thao tác đọc cùng một lúc không làm ảnh hưởng đến tính nhất quán của chương trình. Tuy nhiên khi có nhiều thao tác ghi đồng thời thì lại có ảnh hưởng lớn, vì thế có nhiều cách thức được đặt ra để giải quyết vấn đề đó: • Chung (common), thao tác ghi cùng lúc chỉ được thực hiện nếu tất cả các bộ xử lý đều muốn ghi một giá trị như nhau. • Tùy ý (arbitrary), chỉ cho phép một bộ xử lý bất kỳ được ghi. • Ưu tiên (priority), tất cả các bộ xử lý được tổ chức theo một danh sách ưu tiên được xác định trước, và bộ xử lý có quyền cao nhất sẽ có quyền ghi. • Tổng hợp (sum), trong đó giá trị tổng của các giá trị cần ghi sẽ được ghi. 2.3. Một số mô hình lập trình song song thông dụng 2.3.1. Mô hình chia sẽ không gian bộ nhớ Lập trình song song tường minh thường yêu cầu chỉ ra cụ thể các tác vụ song song cùng với các tương tác giữa chúng. Những tương tác này có thể ở trong dạng đồng bộ giữa các tiến trình đồng thời hay là sự giao tiếp giữa các kết quả trung gian. Trong kiến trúc chia sẽ không gian bộ nhớ, giao tiếp giữa các tiến trình được chỉ ra là ngụ ý vì tất cả các bộ xử lý đều có quyền truy cập vào một vài (hay tất cả) các bộ nhớ. Do đó, mô hình lập trình cho các máy tính chia sẽ không gian địa chỉ tập trung chủ yếu vào các cách thức để thực thi đồng thời, đồng bộ hóa và những cách để làm giảm sự quá tải do tương tác. Các mô hình lập trình chia sẽ không gian địa có thể khác nhau về cách thức chia sẽ dữ liệu, mô hình đồng thời, và hỗ trợ đồng bộ hóa. Các mô hình giả sử rằng tất cả các dữ liệu của tiến trình đều mặc định là không được truy cập, trừ khi nó cho phép làm điều đó (sử dụng các hàm gọi của hệ thống UNIX Trang 27 như shmat và shmget). Mặc dù đây là một yếu tố quan trọng nhằm bảo mật trong các hệ thống đa người dùng, tuy nhiên khí chúng cùng nhau hợp tác để giải quyết cùng một vấn đề thì điều này là không còn cần thiết. Các chi phí do bảo vệ dữ liệu gia tăng chỉ làm cho các tiến trình ít thích hợp hơn cho lập trình song song. Ngược lại, các tiến trình và tiểu trình giả sử toàn bộ bộ nhớ là toàn cục, và chúng sẽ thực hiện trao đổi thông tin với nhau một cách tường minh thông qua đọc và ghi lên biến chia sẽ. Hình 2-6 : Mô hình chía sẽ không gian bộ nhớ Vì các tiến trình đều có quyền đọc và ghi lên vùng nhớ chung vào cùng một thời điểm nên ta cần phải có một cơ chế đồng bộ hóa để bảo đảm tính đúng đắn khi thao tác trên dữ liệu. 2.3.2. Mô hình truyền thông điệp Có rất nhiều ngôn ngữ lập trình và các thư viện được xây dựng nên để dành cho lập trình song song. Những điều này khác nhau ở cách nhìn của chúng về không gian địa chỉ dành cho người lập trình, mức đồng bộ trong các chỉ thị song song và sự đa dạng của các chương trình. Mô hình lập trình truyền thông điệp là một trong các mô hình cổ nhất và được sử dụng rộng rãi nhất trong các mô hình dùng cho lập trình trên các máy tính song song. Lý do chính cho việc này là vì nó yêu cầu tối thiểu về phần cứng bên dưới. Trong phần này chúng ta sẽ đề cập một vài khái niệm căn bản về mô hình truyền thông điệp và các kỹ thuật dùng với thư viện MPI (sẽ mô tả kỹ trong chương sau). Trang 28 Hình 2-7 : Mô hình truyền thông điệp Có 2 tính chất quan trọng tạo nên bản chất của mô hình truyền thông điệp là: thứ nhất là nó giả sử không gian địa chỉ được phân chia và thứ hai là nó chỉ hỗ trợ song song hóa tường minh. Cấu trúc của những chương trình truyền thông điệp Các chương trình truyền thông điệp thường được viết bằng cách sử dụng mô hình bất đồng bộ hay ít đồng bộ. Trong mô hình bất đồng bộ, tất cả các tác vụ song song được thực thi một cách bất đồng bộ. Điều này cho phép ta có thể triển khai bất cứ thuật toán song song nào. Tuy nhiên những chương trình như vậy thường gặp khó khăn hơn để suy ra và bên cạnh đó cách thể hiện của nó cũng khó mà đoán trước do những điều kiện về thực thi. Ngược lại những chương trình ít đồng bộ có thể kết hợp tốt cả hai thái cực này. Trong những chương trình như vậy, các tác vụ và những tập hợp con các tác vụ được đồng bộ hóa để thực hiện những tương tác. Tuy nhiên giữa những tương tác này, các tác vụ được thực thi hoàn toàn bất đồng bộ. Bởi vì những tương tác xảy ra một cách đồng bộ, nên việc suy ra chương trình như vậy cũng khá dễ dàng. Nhiều thuật toán song song phổ biến cũng được thực hiện một cách tự nhiên bằng cách sử dụng những chương trình ít đồng bộ hơn. Trong dạng phổ biến nhất của mình, mô hình truyền thông điệp hỗ trợ thực thi cho các chương trình khác nhau trên từng bộ xử lý. Điều này cung cấp tính mềm dẻo tối đa trong lập trình song song, nhưng điều này cũng làm cho công việc viết các chương trình song song không thể mở rộng một cách hiệu quả. Vì nguyên nhân này mà hầu hết các chương trình truyền thông điệp được Trang 29 viết bằng cách sử dụng phương pháp single program multiple data (SPMD). Trong những chương trình SPMD, các tiến trình khác nhau thực thi đoạn code tương tự nhau ngọai trừ một số nhỏ các tiến trình (là những tiến trình “gốc”). Điều này không có nghĩa là những tiến trình làm việc theo lock-step. Các chương trình SPMD có thể là ít đồng bộ hay là hoàn toàn bất đồng bộ. 2.4. Cách thức xây dựng một chương trình song song và phân bố Phát triển thuật toán là một phần quan trọng trong việc giải quyết vấn đề khi sử dụng máy tính. Một thuật toán tuần tự về cơ bản là một phương pháp thực hiện hay là một chuỗi tuần tự những bước cơ bản để giải quyết một vấn đề được đặt ra bằng cách sử dụng máy tính tuần tự. Tương tự, một thuật tóan song song là một phương pháp giải quyết vấn đề dựa trên việc sử dụng nhiều bộ xử lý. Tuy nhiên, để chỉ ra được một thuật tóan song song không đơn giản như là chỉ ra từng bước cụ thể. Mà là ở một mức độ nào đó, một thuật tóan song song phải được thêm vào tính đồng thời và người thiết kế ra thuật toán cũng phải chỉ ra tập hơp những bước có thể xử lý đồng thời. Điều này nhằm tận dụng được khả năng tính toán của các máy tính song song. Trong thực tế việc thiết kế ra một thuật tóan song song là khá phức tạp, nó có thể bao gồm một vài hay tất cả những điều sau: • Chỉ ra những phần của công việc có thể được thực thi đồng thời. • Ánh xạ các phần của công việc vào nhiều bộ xử lý chạy song song. • Phân tán dữ liệu nhập, xuất và trung gian cùng với chương trình. • Quản lý truy cập vào dữ liệu chung giữa các bộ xử lý. • Đồng bộ hóa các bộ xử lý khi thực thi các chương trình song song 2.4.1. Các thuật ngữ căn bản ™ Phân họach : là quá trình phân chia một vấn đề cần tính toán thành các phần nhỏ hơn, một vài hay tất cả các phần đó có thể xử lý song song. ™ Tác vụ : là đơn vị do người lập trình định nghĩa để chỉ ra các phần tính toán sau khi phân họach. Xử lý đồng thời nhiều tác vụ là điều Trang 30 kiện tiên quyết để rút ngắn thời gian giải quyết toàn bộ vấn đề. Các tác vụ có thể không cùng kích thước. ™ Đồ thị phụ thuộc : là một thể hiện sự phụ thuộc giữa các tác vụ và trật tự thực hiện giữa chúng. Một đồ thị phụ thuộc là một đồ thị có hướng trong đó mỗi nút của cây là một tác vụ và cạnh có hướng thể hiện sự phụ thuộc giữa chúng. Một tác vụ chỉ được thực hiện khi các tác vụ trước nó (có cạnh nối) được thực hiện. Trong đồ thị phụ thuộc tập hợp cạnh có thể rỗng. Hình 2-8 : Đồ thị phụ thuộc tác vụ ™ Granularity : số lượng và kích thước của các tác vụ sau bước phân họach được gọi là granularity của bước phân họach. Bước phân họach một vấn đề lớn thành một số lượng lớn các vấn đề nhỏ được gọi là fine-grained và thành một số lượng nhỏ các vấn đề lớn đựơc gọi là coarse-grained. ™ Đồ thị tương tác : là mô hình thể hiện sự tương tác giữa các tác vụ. Các nút trong đồ thị tương tác thế hiện các tác vụ còn các cạnh nối thể hiện tưong tác giữa chúng. Các cung trong đồ thị tương tác thường là cung vô hướng. Tập hợp cạnh thuờng là tập hợp cha của tập hợp cạnh của đồ thị phụ thuộc Trang 31 Hình 2-9 :Đồ thi tương tác trong bài toán nhân ma trận với vector 2.4.2. Thiết kế thuật toán song song Phân chia một công việc tính toán thành các phần nhỏ hơn và ánh xạ chúng vào các bộ xử lý khác nhau để thực hiện song song là 2 bước cơ bản trong vịêc thiết kế một thuật tóan song song. 2.4.2.1. Một số phương pháp phân hoạch Một trong những bước cơ bản mà chúng ta cần làm để giải quyết một vấn đề theo hướng song song là phân chia những phép tính toán muốn thực hiện thành môt tập hợp các tác vụ nhỏ hơn để xử lý đồng thời như trong đồ thị phụ thuộc tác vụ. Trong phần này chúng ta sẽ mô tả một vài kỹ thuật phân họach phổ biến cho xử lý đồng hành. Các kỹ thuật này không phải là tất cả các kỹ thuật phân họach có thể có. Thêm vào đó, những phương pháp phân họach ở đây không bảo đảm sẽ dẫn tới những thuật toán song song tốt nhất cho một vấn đề nào đó. Mặc dù còn một vài thiếu sót, nhưng các kỹ thuật phân họach được đề cập trong phần này là điểm bắt đầu tốt cho nhiều vấn đề và một hay nhiều sự kết hơp của các kỹ thuật này có thể được dùng để đạt được các phân họach hiệu quả cho rất nhiều lọai vấn đề. Các kỹ thuật phân họach phân họach ở đây có thể phân thành các lọai sau phân họach đệ quy, phân họach dữ liệu, phân họach thăm dò và phân họach suy đóan. Trong đó phân họach đệ quy và phân họach dữ liệu được dùng cho nhiều lọai vấn đề còn các phương pháp phân họach khác chỉ được sử dụng cho một lọai vấn đề cụ thể nào đó. Phân họach đệ quy Trang 32 Phân họach đệ quy là một phương pháp dùng để tạo ra sự đồng hành trong những vấn đề có thể được giải quyết bằng phương pháp chia-và-trị. Trong kỹ thuật này trước tiên một vấn đề được giải quyết bằng cách phân chia nó thành tập hợp các vấn đề con độc lập với nhau. Đến phiên các vấn đề con lại tiếp tục áp dụng cách thức phân họach đệ quy thành các vấn đề con khác nhỏ hơn. Cuối cùng là chúng ta sẽ thực thi đồng hành các vấn đề con độc lập này, kết quả của vấn đề lớn là sự kết hợp kết quả của các vấn đề con nhỏ hơn. Phân hoạch dữ liệu Phân họach theo dữ liệu là một phương pháp phân hoạch hiệu quả và được sử dụng nhiều nhất trong việc xác định tính đồng hành trong các thuật toán để có thể thao tác trên các cấu trúc dữ liệu lớn. Phương pháp này bao gồm 2 bước. Trong bước 1, dữ liệu trong bước tính tóan sẽ được phân ra thành từng phần, và trong bước 2, phần dữ liệu này sẽ được chuyển thành các tác vụ. Những thao tác mà các tác vụ thực hiện trên các phần dữ liệu khác nhau thường là tương tự nhau hay được chọn từ tập hợp các thao tác nhỏ hơn. Chúng ta sẽ xem xét cụ thể các cách phân chia dữ liệu có thể ở phần bên dưới. Nhìn chung, thì người thiết kế phải tự tìm ra và đánh giá các cách phân chia dữ liệu để quyết định xem cách nào phân họach “tự nhiên” và hiệu quả nhất. ™ Phân chia dữ liệu xuất Trong nhiều phần tính toán, từng phần xuất có thể được xử lý độc lập với các phần khác. Trong nhiều phần tính toán như vậy, việc phân chia dữ liệu xuất tự động dẫn đến việc phân họach những vấn đề thành các tác vụ, với mỗi tác vụ được kết gán cho công việc tính toán một phần của kết quả xuất. vd: nhân ma trận Hãy xem vấn đề nhân 2 ma trận nxn A và B, kết quả trả về là ma trận C. Trước tiên ta phân từng ma trận thành 4 khối hay ma trận con, bằng cách chia các chiều của ma trận theo 1 nửa. 4 ma trận con của ma trận kết quả C, mỗi phần có kích thước n/2 x n/2, có thể được tính tóan độc lập với nhau bởi 4 tác vụ. Trang 33 Hình 2-10 : (a) Phân các ma trận nhập và xuất thành các ma trận con (b) Phân hoạch phép nhân ma trận thành 4 tác vụ Hầu hết các thuật toán ma trận, bao gồm nhận ma trận với vector và nhân ma trận với ma trận, có thể được công thức hóa thành các thao tác trên khối ma trận. Trong các công thức này, từng ma trận được xem như bao gồm các khối hay các ma trận con, các phép tính toán được thực hiện trên từng phần tử và được thay thế tương ứng bởi các phép tóan trên các khối ma trận con. Kết quả có được trên từng phần tử hay trên các khối là tương tự nhau. Thuật toán ma trận khối thường được dùng để hỗ trợ cho việc phân họach. Chúng ta phải chú ý là phân họach theo dữ liệu khác với phân họach các phép tính thành các tác vụ. Mặc dù 2 khái niệm này thường có liên hệ với nhau, và cái đầu thường hỗ trợ cho cái sau, một kết quả phân họach dữ liệu đã cho không chỉ có một cách để phân chúng thành các tác vụ. ™ Phân chia dữ liệu nhập Phân chia theo dữ liệu xuất chỉ có thể được thực hiện nếu từng kết quả xuất có thể được tính toán một cách tự nhiên theo chức năng nhập. Trong nhiều thuật toán, việc phân chia theo dữ liệu xuất là điều không thể. Ví dụ như khi tìm giá trị lớn nhất, nhỏ nhất hay tổng của các số đã cho, kết quả xuất là điều không thể biết trước. Trong các thuật toán sắp xếp, từng phần tử riêng biệt của kết quả không thế được xác định một cách hiệu quả. Trong những trường hợp Trang 34 như vậy, việc phân chia theo dữ liệu nhập là hoàn toàn có thể, và sau đó dùng kết quả này để thực hiện đồng thời việc tính toán. Từng tác vụ được tạo ra cho từng phần dữ liệu nhập và tác vụ này sẽ sử dụng tối đa các phép tính có thể thực hiện trên các dữ liệu cục bộ này. Lưu ý là những giải pháp cho các tác vụ được đúc kết từ dữ liệu nhập có thể không giải quyết được một cách trực tiếp vấn đề gốc. Trong những trường hợp như vậy, thì kết quả tính toán có thể được thực hiện bằng cách “nổi bọt” lên phía trên.Ví dụ như khi tìm tổng của một chuỗi gồm N số dùng p tiến trình (p < N), chúng ta có thể phân chia phần dữ liệu nhập thành p phần con (có kích thước gần bằng nhau). Từng tác vụ thực hiện cộng các số trong từng phần con. Kết quả cuối cùng là cộng của p phần con vừa được tính. ™ Phân chia cả dữ liệu xuất và nhập Trong nhiều trường hợp việc phân chia theo cả kết quả xuất và dữ liệu nhập có thể làm tăng khả năng xử lý đồng thời. ™ Phân chia dữ liệu trung gian Các thuật toán thường có dạng xử lý gồm nhiều giai đọan khác nhau, trong đó kết quả xuất của giai đọan này là kết quả nhập của giai đọan theo sau nó. Quá trình phân họach cho những thuật toán như vậy có thể được thực hiện bằng cách phân chia theo dữ liệu nhập hay theo dữ liệu xuất của một giai đọan trung gian. Phân chia theo dữ liệu trung gian đôi khi dẫn tới khả năng xử lý đồng thời cao hơn so với khi thực hiện trên dữ liệu nhập hay xuất. Thông thường trong giải quyết một vấn đề nào đó thì dữ liệu trung gian không được phát sinh một cách tường minh và trong khi cấu trúc lại các thuật tóan ban đầu người ta có thể cần đến dữ liệu trung gian để tạo ra sự phân họach. vd: như trong ví dụ nhân ma trận bên trên, ta có thể gia tăng khả năng tính tóan song song bằng cách đưa ra một bước trung gian mà trong đó có 8 tác vụ thực hiện tính toán các ma trận con tương ứng của chúng rồi lưu kết quả trong một ma trận 3 chiều D. Ma trận con Dk,i,j là kết quả của việc nhân Ai,k và Bk,j. Trang 35 Hình 2-11 : Nhân hai ma trận A và B với phần trung gian là ma trận D Việc phân chia thành ma trận trung gian D dẫn đến phân hoạch thành 8 tác vụ. Sau bước nhân, ta thực hiện cộng các ma trận kết quả con (chi phí không cao) thành ma trận C. Tất cả các ma trận con D*,i,j được cộng lại với nhau để tạo thành Ci,j. 8 tác vụ (đánh số từ 1-8) thực hiện việc nhân các ma trận con của A và B có kích thước n/2 x n/2 với chi phí là O(n3/8). Sau đó 4 tác vụ (đánh số từ 9-12) thực hiện cộng các ma trận con trung gian D thành ma trận kết quả C với chi phí là (n2/8). Trang 36 Hình 2-12 : Phân họach bài toán nhân ma trận theo ma trận trung gian 3-chiều Phân hoạch thăm dò Phân họach thăm dò được dùng để phân họach những vấn đề mà có nội dung tính toán tương ứng với một không gian tìm kiếm của những giải pháp. Trong phân họach thăm dò, chúng ta phân chia không gian tìm kiếm thành nhiều phần nhỏ hơn, và thực hiện tìm kiếm trên từng phần đồng thời với nhau, cho đến khi tìm ra giải pháp cần tìm. Trang 37 Lưu ý là mặc dù phân hoạch thăm dò trông có vẻ tương tự như phân hoạch dữ liệu (không gian tìm kiếm có thể được xem như là dữ liệu được phân chia), về cơ bản chúng khác nhau ở những điểm sau đây. Những tác vụ có được sau khi phân hoạch dữ liệu được thực hiện hoàn toàn và từng tác vụ đều thực hiện các phép tính hữu dụng để tìm ra giải pháp cho vấn đề. Mặt khác, trong phân hoạch thăm dò, những tác vụ mặc dù chưa thực hiện xong nhưng vẫn bị kết thúc nếu đã có một giải pháp được tìm ra từ một tác vụ khác. Vì thế từng phần của không gian tìm kiếm khi được thực hiện bởi công thức song song có thể khác rất nhiều so với khi được tìm kiếm bởi thuật toán tuần tự. Cho nên số lượng công việc mà công thức song song thực hiện có thể nhiều hơn hay ít hơn so với khi thực hiện bằng thuật toán tuần tự. Trang 38 Hình 2-13 : Các bước phát sinh theo phân hoạch thăm dò Phân hoạch suy đoán Trang 39 Phân hoạch suy đoán được dùng khi một chương trình có thể lấy một trong các nhánh tính toán có thể, tùy thuộc vào kết quả xuất của những phép tính toán trước đó. Trong trường hợp này, trong khi một tác vụ đang thực hiện các phép tính mà kết quả xuất sẽ quyết định bước tính toán tiếp theo, trong khi các tác vụ khác có thể bắt đầu đồng thời các công việc tính toán của giai đoạn tiếp theo. Ngữ cảnh này trông giống với ước lượng song song một hay nhiều nhánh của câu lệnh switch trong ngôn ngữ C trước khi tồn tại giá trị vào của câu lệnh. Trong khi một tác vụ thực hiện tính toán để giải quyết switch, các tác vụ khác thực hiện song song trên các nhánh khác của switch. Khi giá trị đầu vào cuối cùng của switch được tính ra, thì nhánh có các phép tính tương ứng sẽ được thực hiện trong khi bỏ qua các nhánh còn lại. Thời gian cho việc chạy song song sẽ nhỏ hơn khi chạy tuần tự vì thời gian được sử dụng tối ưu để thực hiện song song các phép tính toán hợp lý cho giai đoạn tiếp theo. Tuy nhiên dạng song song của switch cũng bảo đảm sẽ có ít nhất một vài phép tính toán lãng phí. Nhằm làm giảm các phép tính toán này, một dạng khác nhỏ của phân họach suy đoán có thể đuợc sử dụng, đặc biệt trong những trường hợp mà một trong các kết quả xuất của switch có khả năng xảy ra hơn so với các trường hợp còn lại. Trong trường hợp này, chỉ có nhánh ‘khả thi” nhất được một tác vụ thực thi song song cùng với các phép tính toán trước đó. Nhưng nếu kết quả xuất của switch khác với những gì được mong đợi thì ta sẽ “roll back” lại việc tính toán và thực thi chính xác nhánh switch cần thực hiện. Phân hoạch suy đoán và phân hoạch thăm dò khác nhau ở một vài điểm sau. Trong phân hoạch suy đoán đầu vào là không biết, còn trong phân hoạch thăm dò kết quả đầu ra là không biết. Trong phân hoạch suy đoán, thuật toán tuần tự sẽ chỉ thực hiện nghiêm ngặt một trong các tác vụ ở giai đọan suy đoán, bởi vì khi mà nó bắt đầu thực hiện một giai đoạn nào đó, nó đã biết chính xác phải thực hiện theo nhánh nào. Một chương trình song song khi thực hiện theo phân hoạch suy đoán sẽ phải làm nhiều công việc hơn so với chương trình đó khi viết theo tuần tự. Mặt khác trong phân hoạch thăm dò, thuật toán tuần tự tìm ra nhiều hướng đi, do mỗi nhánh đều dẫn tới một giải pháp mà chưa được biết trước. Vì thế, một chương trình song song có thể thực hiện ít hơn, nhiều Trang 40 hơn hay bằng với số lượng công việc của thuật toán tuần tự tùy thuộc vào vị trí của giải pháp trong không gian tìm kiếm. Kết hợp các phép phân hoạch Cho đến bây giờ chúng ta đã xem xét một số phương pháp phân hoạch có thể được dùng để tạo ra một số mô hình song song cho các thuật toán. Những kỹ thuật này không phải là hoàn toàn tuyệt đối mà nguợc lại chúng có thể được sử dụng kết hợp với nhau. Thông thường một phép tính được phân thành nhiều bước và đội khi ta phải áp dụng nhiều cách phân hoạch cho các buớc khác nhau. Ví dụ như khi tìm giá trị nhỏ nhất của một tập hợp số n rất lớn, phương pháp phân hoạch đệ quy thuần túy có thể làm phát sinh ra nhiều tác vụ hơn là số bộ xử lý đang có. Một cách phân hoạch hiệu quả là chia dữ liệu ban đầu thành P phần bằng nhau và gán vào cho P bộ xử lý. Kết quả cuối cùng có được bằng cách tìm giá trị nhỏ nhất của các kết quả trung gian bằng cách áp dụng phân hoạch đệ quy. Hình 2-14 : Phân hoạch lai để tìm giá trị nhỏ nhất của mảng 2.4.2.2. Ánh xạ Một khi bài toán đã được phân rã thành các tác vụ, thì các tác vụ này sẽ được ánh xạ vào trong các tiến trình xử lý với mục tiêu là hoàn thành tất cả trong thời gian ngắn nhất. Để đạt được thời gian xử lý nhỏ thì chi phí cho thực thi song song các tác vụ phải được giảm đến mức tối thiểu. Với một phân họach đã cho thì có hai yếu tố chính dẫn đến chi phí là : thời gian cho giao tiếp giữa các tiến trình và thời gian khi chúng nhàn rỗi. Một tiến trình có thể nhàn rỗi vì nhiều lý do trước khi toàn bộ các phép tính được hoàn tất. Sự phân bố không đều có thể làm cho một vài tiến trình hoàn thành công việc trước những tiến trình khác. Hoặc cũng có thể do các tác vụ chưa thực hiện được ánh xạ vào Trang 41 các tiến trình đang bận thực hiện một tác vụ khác gây ra thời gian chờ. Vì thế một cách ánh xạ các tác vụ được đánh giá là tốt khi nó đạt được hai mục tiêu sau : • Giảm thiểu thời gian các tiến trình trao đổi với nhau. • Giảm thiểu tổng thời gian khi các tiến trình này nhàn rỗi trong khi các tiến trình khác phải thực thi nhiều tác vụ. Hai mục tiêu đó thường mâu thuẫn với nhau. Ví dụ, khi bạn muốn giảm đến mức tối thiểu tương tác giữa các tiến trình bằng cách kết gán một tập hợp các tác vụ vào cùng một tiến trình. Trong nhiều trường hợp như vậy, phép kết gán như vậy sẽ đem lại sự mất cân bằng tải giữa các tiến trình, gây ra thời gian nhàn rỗi cho các tiến trình khác. Trong phần này chúng ta sẽ xem xét nhiều cách thức để ánh xạ các tác vụ vào trong các tiến trình với mục tiêu chính là cân bằng tải và giới hạn đến nhỏ nhất thời gian tương tác giữa chúng. vd: trong ví dụ sau cho ta thấy cách ánh xạ 12 tác vụ vào trong 4 tiến trình, mà trong đó 4 tác vụ cuối cùng chỉ có thể được thực hiện khi 8 tác vụ trước đó đã được hoàn tất. Trong hình bên dưới thể hiện hai cách ánh xạ khác nhau, mỗi các sẽ đem lại thời gian hoàn tất khác nhau Hình 2-15 : Hai cách phân hoạch với đồng bộ hóa Các kỹ thuật ánh xạ đại khái có thể phân thành hai loại chính là ánh xạ tĩnh và ánh xạ động. Mô hình lập trình song song, tính chất của các tác vụ và sự tương tác giữa chúng sẽ quyết định nên chọn cách ánh xạ nào cho thích hợp. Trang 42 • Ánh xạ tĩnh (static): kỹ thuật ánh xạ tĩnh phân phối tác vụ giữa các tiến trình tùy thuộc tính ưu tiên trong việc thực thi các thuật toán. Đối với những tác vụ được phát sinh tĩnh thì áp dụng một trong hai kỹ thuật đều khả thi. Việc chọn ra được một cách ánh xạ tốt thì còn phụ thuộc vào nhiều yếu tố, bao gồm kích thước của tác vụ, kích thước của dữ liệu đi kèm với chúng, tính chất tương tác giữa các tác vụ, và thậm chí là mô hình lập trình song song được sử dụng. Tuy nhiên trong nhiều trường hợp thực tế phương pháp heuristic cũng đem lại giải pháp gần đúng chấp nhận được cho việc tối ưu vấn đề ánh xạ tĩnh. Các thuật toán mà sử dụng ánh xạ tĩnh thì nhìn chung dễ dàng hơn cho việc hiết kế và lập trình. • Ánh xạ động (dynamic): kỹ thuật ánh xạ động phân phối công việc giữa các tiến trình trong suốt quá trình thực thi thuật toán. Nếu các tác vụ được phát sinh động thì nó cũng sẽ được ánh xạ động. Nếu kích thước của tác vụ là chưa biết thì nếu sử dụng ánh xạ tĩnh sẽ dẫn đến sự mất cân bằng tải nghiêm trọng và trong trường này sử dụng ánh xạ động sẽ hiệu quả hơn. Nếu số lượng dữ liệu đi kèm các tác vụ là khá lớn cho việc tính toán thì khi dùng phương pháp này sẽ đưa đến việc chia sẽ dữ liệu giữa các tiến trình. Chi phí cho việc di chuyển này có thể ảnh hưởng hơn so với những ưu điểm của ánh xạ động và dẫn đến việc sử dụng ánh xạ tĩnh sẽ hiệu quả hơn. Tuy nhiên, trong mô hình chia sẽ không gian địa chỉ thì phương pháp này cũng hữu hiệu hơn thậm chí đối với các dữ liệu lớn. Các thuật toán đòi hỏi ánh xạ động thì thường là phức tạp hơn, đặc biệt là trong mô hình truyền thông điệp. Vd cách ánh xạ trong bài toán nhân ma trận Trang 43 Hình 2-16 : phân chia theo (a) 1 chiều và (b) hai chiều của ma trận xuất. Những phần màu xám là dữ liệu mà tiến trình cần để tính toán. 2.4.3. Một số phương pháp tối ưu Như đã lưu ý ở trên, làm giảm tương tác quá mức giữa các tiến trình là một điều quan trọng cho một chương trình song song hiệu quả. Nguyên nhân xảy ra điều này có thể do nhiều yếu tố, như kích thước của dữ liệu dùng trong quá trình tương tác, tần số tương tác… Trong phần này chúng ta sẽ xem xét một vài phương pháp tổng quát để làm hạn chế quá tải do tương tác xảy ra trong các chương trình song song. Tất cả các kỹ thuật này có thể không thích hợp cho mô hình lập trình song song và một vài trong số đó cần sự hỗ trợ của phần cứng bên dưới. 2.4.3.1. Tối đa hóa dữ liệu cục bộ Trong hầu hết các chương trình song song, các tác vụ được thực thi bởi các tiến trình khác nhau đòi hỏi phải được truy cập đến dữ liệu chung. Ví dụ như trong bài toán nhân ma trận và vector y=Ab , trong đó Trang 44 từng tác vụ thực hiện tính toán từng phần tử của vector y và cần phải truy cập đến các phần tử của vector nhập b. Các kỹ thuật nhằm gia tăng sử dụng dữ liệu cục bộ bao gồm một pham vi rộng lớn các cách thức nhằm giảm thiểu tối đa kích thước của các dữ liệu truyền tải, tối đa hóa việc sử dụng lại các dữ liệu vừa được truy cập, và cực tiểu số lần truy cập. • Cực tiểu dữ liệu trao đổi Một phương pháp cơ bản nhằm làm giảm sự tương tác quá mức là làm giảm đến mức tối đa dữ liệu chia sẽ cần để truy cập bởi nhiều tiến trình cùng một lúc. Điều này tương tự với việc tối đa hóa sử dụng dữ liệu cục bộ một cách tạm thời, nghĩa là thực hiện tham chiếu liên tục đến càng nhiều dữ liệu càng tốt. Rõ ràng càng nhiều bước tính toán trên dữ liệu cục bộ có sẵn sẽ góp phần xóa đi yêu cầu chuyển dữ liệu vào vùng đệm cho các tiến trình xử lý. Như đã nói ở trên để đạt được điều này cần áp dụng các phương pháp phân hoạch và ánh xạ thích hợp. Ví dụ như trong bài toán nhân ma trận nếu ta áp dụng ánh xạ 2 chiều thì kích thước dữ liệu chia sẽ cần được truy cập chỉ là p n22 , còn nếu áp dụng ánh xạ 1 chiều thì kích thước sẽ lên tới 2 2 n p n + . Nói tóm lại, phân bố với số chiều càng cao thì càng làm giảm khối lượng của dữ liệu cần chia sẽ. Một cách khác để làm giảm sự truy cập của các tiến trình đến dữ liệu chia sẽ là sử dụng dữ liệu cục bộ để lưu kết quả trung gian, và chỉ thực hiện truy cập đến dữ liệu chia sẽ tại nơi sẽ tính toán kết quả cuối cùng. • Cực tiểu tần số tương tác Đây là một phương pháp quan trọng trong việc làm giảm sự quá tải tương tác trong các chương trình song song bởi vì trong nhiều kiến trúc thì chi phí kích hoạt cho từng tương tác là khá lớn. Ta có thể làm giảm tần số tương tác bằng cách tái cấu trúc lại các thuật toán sao cho các dữ liệu chia sẽ được truy cập và sử dụng thành các phần lớn. 2.4.3.2. Giảm thiểu tối đa các điểm xung đột, tranh chấp Trang 45 Phần bàn luận của chúng ta cho đến bây giờ chỉ là tập trung làm giảm tương tác quá mức chủ yếu bằng cách trực tiếp hay gián tiếp làm giảm tần số và dụng lượng dữ liệu trao đổi. Tuy nhiên mô hình tương tác giữa các tác vụ thường dẫn đến tranh chấp làm gia tăng sự tương tác. Nói chung, tranh chấp xảy ra khi nhiều tác vụ cùng truy cập đồng thời vào tài nguyên. Nhiều luồng trao đổi dữ liệu trên cùng một đường liên kết, nhiều sự truy cập cùng lúc vào cùng một khối nhớ, hay nhiều tiến trình thực hiện gửi những thông điệp đến cùng một tiến trình vào cùng một thời điểm, tất cả có thể dẫn đến sự xung đột. Điều này bởi vì chỉ một trong nhiều thao tác có thể được thực thi tại một thời điểm còn những thao tác còn lại phải được sắp xếp và thực hiện tuần tự. Xem lại bài toán nhân hai ma trận C = AB, sử dung phương pháp phân hoạch theo 2 chiều như hình bên trên (Hình 2.16). Gọi p là số lượng các tác vụ được ánh xạ 1-1 vào trong các tiến trình. Mỗi tác vụ sẽ chịu trách nhiệm tính toán một phần tử Ci,j của ma trận kết quả C, với pji <≤ ,0 . Phần tử Ci,j được tính theo công thức (viết theo ký hiệu ma trận khối): ∑− = = 1 0 ,,, * p k jkkiji BAC Xem cách truy cập vào bộ nhớ của công thức trên, chúng ta thấy rằng bất cứ tại bước p nào, thì p các tác vụ cũng sẽ truy cập vào cùng một khối của ma trận A và B. Trong trường hợp đặc biệt, tất cả các tác vụ làm việc trên cùng một dòng của C cũng sẽ truy cập lên cùng một khối của A. Ví dụ như tất cả p tiến trình tính C0,0, C0,1, …, C0, 1−p cũng sẽ cùng đọc A0,0 cùng một lúc. Tương tự như vậy tất cả các tác vụ làm việc trên cùng một cột của C cũng sẽ truy cập lên cùng một khối của B. Nhu cầu truy cập đồng thời lên cùng các khối nhớ này của ma trận A và B sẽ tạo ra xung đột trên cả kiến trúc chia sẽ không gian bộ nhớ NUMA và kiến trúc truyền thông điệp. Trang 46 Một cách để làm giảm tranh chấp này là thiết kế lại thuật toán song song để nó truy cập vào dữ liệu theo các mẩu không xung đột. Ví dụ như thuật toán nhân ma trận, chúng ta có thể hiệu chỉnh thứ tự các khối ma trận được nhân với nhau bằng cách sử dụng công thức: ∑− = ++++ = 1 0 ,)%()%(,, * p k jpkjipkjiiji BAC Bằng cách sử dụng công thức này tất cả các tác vụ P*,j làm việc trên cùng một dòng của C sẽ truy cập vào khối nhớ A*, (*+j+k)% p , khác nhau cho từng tác vụ. Vì vậy chỉ bằng cách sắp xếp lại thứ tự nhân các khối với nhau, ta có thể loại bỏ tranh chấp. Ví dụ như trong các tiến trình tính toán khối dòng của C, thì tiến trình tính toán C0,j sẽ truy cập A0,j từ khối dòng đầu tiên của ma trận A thay vì A0,0. Việc sử dụng ánh xạ động thường là nguồn gốc của những tranh chấp trên cấu trúc dữ liệu chia sẽ hay là từ các kênh giao tiếp dẫn đến tiến trình chính. 2.4.3.3. Đan xen các phép tính và tương tác Thời gian mà các tiến trình chờ các dữ liệu chia sẽ đến hay nhận thêm một công việc sau khi tương tác có thể được làm giảm xuống, thông thường là theo từng phần, bằng cách thực hiện một số phép tính tiện ích trong suốt thời gian chờ đợi. Một cách đơn giản để đan xen là khởi gán tương tác đủ sớm để nó hoàn tất trước khi cần cho tính toán. Đề đạt được điều này, chúng ta phải có thể nhận ra các phép tính có thể trước khi thực hiện tương tác. Sau đó trong chương trình song song phải được cấu trúc sao cho thực hiện khởi gán tương tác trước thời điểm mà nó thực hiện trong thuật toán gốc. Về cơ bản, điều này là có thể nếu có nhiều tác vụ sẵn sàng thực thi có sẵn trên cùng một tiến trình sao cho nếu có một khối chờ cho việc tương tác hoàn tất thì tiến trình vẫn có thể thực thi các tác vụ khác. Trong nhiều trường hợp, đan xen các phép tính và sự tương tác đòi hỏi phải có sự hỗ trợ từ mô hình lập trình , hệ điều hành, và thiết bị Trang 47 phần cứng. Mô hình lập trình phải cung cấp một cách thức cho phép tương tác và tính toán được tiến hành đồng thời. Cách thức này phải được hỗ trợ bởi phần cứng bên dưới. Mô hình và kiến trúc không gian địa chỉ không liên kết thường cung cấp sự hỗ trợ này thông qua truyền thông điệp ưu tiên dạng non-blocking. Mô hình lập trình cung cấp các hàm cho việc gửi và nhận thông điệp cho phép trả quyền điều khiển cho chương trình người dùng trước khi nó thực sự hoàn tất. Vì thế chương trình có thể sử dụng các hàm ưu tiên này để khởi tạo những tương tác và sau đó thực hiện các phép tính toán. Nếu phần cứng cho phép tính toán được thực hiện song song với trao đổi thông điệp, thì sự tương tác có thể giảm đáng kể. 2.4.3.4. Tạo bản sao dữ liệu hay các phép tính toán Trong một vài thuật toán song song, nhiều tiến trình có thể đòi hỏi truy cập chỉ đọc thường xuyên vào một cấu trúc dữ liệu chia sẽ, như là bảng băm. Ví thế trừ khi không được phép yêu cầu thêm bộ nhớ, còn không thì nên tạo một bản sao cấu trúc dữ liệu chia sẽ cho mỗi tiến trình để sau khi khởi gán tương tác, tất cả các những truy cập tiếp theo vào cấu trúc dữ liệu này sẽ không gây quá tải do tương tác. Trong mô hình chia sẽ không gian bộ nhớ, việc tạo bản sao của các dữ liệu chỉ đọc, được truy cập thường xuyên thì thường bị chịu tác động bởi những cache mà không phải do sự can thiệp tường minh của lập trình viên. Nhân bản dữ liệu một cách tường minh thường thích hợp cho các kiến trúc và mô hình lập trình mà gặp phải những chi phí đáng kể khi truy cập vào dữ liệu chia sẽ. Vì thế mô hình truyền thông điệp là được lợi nhất khi ta thực hiện tạo bản sao dữ liệu ở các tiến trình, điều này có thể làm giảm đáng kể sự quá tải do tương tác và cũng làm đơn giản hơn khi viết các chương trình song song. Tuy nhiên tạo bản sao dữ liệu không phải là không tốn chi phí. Nó làm gia tăng bộ nhớ của chương trình song song. Dung lượng bộ nhớ yêu cầu gia tăng lũy tiến cùng với số lượng tiến trình chạy đồng thời. Điều này có thể làm giới hạn lại kích thước vấn đề có thể được giải quyết trên Trang 48 một máy tính song song đã cho. Vì lý do này mà sao lưu dữ liệu phải được sử dụng một cách lựa chọn cho số lượng dữ liệu tương đối nhỏ. Bên cạnh dữ liệu nhập, các tiến trình trong một chương trình song song cũng thường chia sẽ kết quả trung gian. Trong những trường hợp như vậy, để cho các tiến trình tự tính toán kết quả trung gian sẽ hiệu quả hơn so với lấy chúng từ những tiến trình khác. 2.4.4. Các mô hình thuật toán song song Sau khi tìm hiểu về các kỹ thuật phân hoạch, ánh xạ và giảm thiểu tối đa tần số tương tác, bây giờ chúng ta sẽ giới thiệu một vài mô hình thuật toán song song hay được sử dụng. Một mô hình thuật toán là một cách thức tiêu biểu nhằm cấu trúc hóa lại một thuật toán song song bằng cách lựa chọn ra một kỹ thuật phân hoạch và ánh xạ và áp dụng kế hoạch thích hợp để tối ưu việc tương tác. 2.4.4.1. Mô hình dữ liệu song song Đây là một trong những mô hình thuật toán đơn giản nhất, các tác vụ được ánh xạ tĩnh hay bán tĩnh vào trong các tiến trình và từng tác vụ sẽ thực hiện cùng một thao tác trên các dữ liệu khác nhau. Loại song song mà có các chỉ thị tương tự nhau được áp dụng đồng thời lên các dữ liệu khác loại nhau được gọi là loại song song dữ liệu (data parallelism). Công việc có thể được thực hiện từng bước và dữ liệu thao tác trên các bước khác nhau có thể khác nhau. Bởi vì tất cả các tác vụ đều cùng thực thi các chỉ thị giống nhau, nên phương pháp phân hoạch được sử dụng ở đây là phân hoạch theo dữ liệu do một phương pháp phân hoạch thống nhất theo sau là cách thức ánh xạ tĩnh là đủ khả năng để đảm bảo cân bằng tải. Những thuật toán song song về dữ liệu có thể được áp dụng cho cả mô hình chia sẽ không gian bộ nhớ và truyền thông điệp. Tương tác trong mô hình này có thể làm giảm thiểu tối đa bằng cách áp dụng các cách thức phân họach riêng biệt cục bộ, và nếu có thể thì bằng cách chồng lấp các phép tính và các tương tác hoặc cũng có thể bằng cách sử dụng các thủ tục tối ưu các tương tác tập thể. Tính chất cốt lõi của Trang 49 các vấn đề song song dữ liệu là trong hầu hết các vấn đề, mức độ song song của dữ liệu sẽ gia tăng cùng với kích thước của vấn đề, điều này làm tăng khả năng giải quyết các vấn đề lớn hơn bằng cách gia tăng số lượng bộ xử lý được sử dụng. 2.4.4.2. Mô hình đồ thị tác vụ Như đã nói ở trên, các phép tính toán trong bất kỳ thuật toán song song nào cũng có thể được biểu diễn theo đồ thị phụ thuộc tác vụ. Nó có thể đơn giản như trong bài toán nhân ma trận hay có thể rất phức tạp. Tuy nhiên, trong những thuật toán song song cụ thể nào đó, đồ thị phụ thuộc tác vụ cũng thể hiện cách ánh xạ vào trong các tiến trình. Trong mô hình đồ thị tác vụ, mối tương giao giữa các tác vụ được sử dụng để gia tăng tính cục bộ hay làm giảm đi chi phí tương tác. Mô hình này về cơ bản được sử dụng để giải quyết những vấn đề mà trong đó dữ liệu đi theo các tác vụ là khá lớn so với nội dung tính toán. Thông thường thì các tác vụ được ánh xạ tĩnh nhằm giúp tối ưu chi phí cho việc di chuyển giữa chúng. Các kỹ thuật làm giảm tương tác có thể áp dụng cho mô hình này là giảm kích thước dữ liệu và tần số tương tác bằng cách gia tăng sử dụng dữ liệu cục bộ, và sử dụng các phương pháp tương tác bất đồng bộ để thay tương tác bằng các phép tính có lợi. 2.4.4.3. Mô hình Work Pool Cách thức ánh xạ tĩnh các tác vụ vào trong các tiến trình nhằm cân bằng tải là một tính chất tiêu biểu của mô hình work pool hay task pool, mà trong đó nó có thể được thực hiện bởi bất kỳ tiến trình nào. Trong mô hình truyền thông điệp, mô hình work pool về cơ bản thường được sử dụng khi khối lượng dữ liệu đi theo các tác vụ là khá nhỏ so với nội dung tính toán của chúng. 2.4.4.4. Mô hình Master-Slave Trong mô hình master-slave hay manager-worker, một hay nhiều tiến trình master sẽ phát sinh công việc và phân phối nó cho các tiến trình con. Các tác vụ có thể đuợc xác định một thứ tự ưu tiên nếu tiến trình chính Trang 50 có thể ước tính được kích thước của các tác vụ đó hay nếu phương pháp ánh xạ ngẫu nhiên có thể thực hiện công việc cân bằng tải. Trong ngữ cảnh khác các tác vụ có thể được gán những phần nhỏ hơn của công việc tại các thời điểm khác nhau. Thông thường người ta sử dụng cách thứ hai nếu tiến trình chính không mất quá nhiều thời gian để phát sinh công việc khiến các tiến trình con phải chờ đợi. Trong nhiều trường hợp các công việc có thể theo nhiều bước, và công việc trong mỗi bước phải được thực hiện xong trước khi công việc của bước tiếp theo được phát sinh. Đối với những trường hợp như vậy, thì tiến trình chính yêu cầu các tiến trình con phải thực hiện đồng bộ sau mỗi bước. Mô hình manager-worker có thể được thể hiện theo cấu trúc phân nhánh hay mô hình manager-worker nhiều tầng mà trong đó manager ở cấp cao hơn sẽ truyền xuống các công việc cho manager ở cấp dưới, cứ thế tiếp tục phân chia cho các worker thực hiện công việc của mình. Mô hình này nhìn chung thích hợp cho mô hình lập trình chia sẽ không gian bộ nhớ và truyền thông điệp vì thường các tương tác là theo 2 chiều, nghĩa là tiến trình chính biết mình phải phân phối công việc còn tiến trình con thì biết mình phải lấy gì từ tiến trình chủ. Trong khi sử dụng mô hình master-slave, cần phải cẩn thận để bảo đảm sao cho tại tiến trình chủ không xảy ra hiện tượng “cổ chai“, điều này có thể xảy ra nếu các tác vụ được thực thi là quá nhỏ (hay các tiến trình con làm việc quá nhanh). 2.4.4.5. Mô hình dây chuyền (pipeline) hay Producer- Consumer Trong mô hình dây chuyền, một dòng tin được truyền qua một dãy liên tiếp các tiến trình, từng tiến trình sẽ thực hiện một vài tác vụ trên đó. Quá trình thực thi đồng thời các chương trình khác nhau trên một dòng tin được gọi là song song theo dòng (stream parallelism). Ngoại trừ tiến trình khởi tạo đường ống, các dữ liệu mới tới sẽ kích hoạt một tiến trình thực thi một tác vụ trên đường ống. Các tiến trình có thể tạo những đường Trang 51 ống như vậy theo dạng tuyến tính hay mảng nhiều hướng, cây, hay các đồ thị thông thường có hay không có vòng. Một đường ống (pipeline) là một chuỗi của các producer và consumer. Từng tiến trình trong đường ống có thể được xem như là người tiêu thụ cho một dãy các phần tử dữ liệu của tiến trình trước đó và cũng là người sản xuất dữ liệu cho tiến trình tiếp theo trong đường ống. Đường ống không nhất thiết là một chuỗi tuyến tính, mà nó có thể là một đồ thị có hướng. Mô hình đường ống thường sử dụng ánh xạ tĩnh các tác vụ vào trong các tiến trình. 2.4.4.6. Mô hình lai Trong một vài trường hơp, có thể áp dụng nhiều hơn một mô hình cho một vấn đề, dẫn đến tạo ra mô hình thuật toán lai. Một mô hình lai có thể được kết hợp từ nhiều mô hình áp dụng theo dạng phân nhánh hay từ nhiều mô hình áp dụng tuần tự cho các bước khác nhau của một thuật toán song song. Trong nhiều trường hợp, một dạng biểu diễn của thuật toán có thể có nhiều tính chất của nhiều hơn một mô hình thuật toán. Ví dụ như là một phép tính chính có thể được thể hiện thành một đồ thị tác vụ, nhưng mỗi nút của đổ thị có thể là một tác vụ cha được kết hợp từ nhiều tác vụ con thích hợp cho mô hình song song dữ liệu hay dây chuyền. Thuật toán Quicksort song song là một trong những áp dụng của mô hình lai. Trang 52 Chương 3. Các môi trường hỗ trợ tính toán lưới 3.1. Giới thiệu Mục tiêu chính của lập trình Grid là nghiên cứu về các mô hình lập trình, các công cụ và các phương pháp nhằm hỗ trợ cho việc phát triển hiệu quả các thuật toán và các chương trình hiệu năng cao trên môi trường lưới. Lập trình lưới yêu cầu các kỹ năng và tính chất cao hơn so với lập trình tuần tự, và thậm chí là lập trình song song và phân tán. Bên cạnh việc sắp xếp các thao tác đơn giản trên những cấu trúc dữ liệu riêng, hay sắp xếp các thao tác phức tạp trên những cấu trúc dữ liệu chia sẽ hay phân tán, một lập trình viên tính toán lưới cần phải đảm nhiệm luôn việc quản lý tính toán trên môi trường. Bên cạnh việc chỉ thực hiện các thao tác đơn giản, người lập trình lưới cũng phải thiết kế tương tác giữa những dịch vụ từ xa, nguồn dữ liệu và tài nguyên phần cứng. Mặc dù người ta có thể xây dựng các ứng dụng Grid với các công cụ lập trình hiện tại, nhưng người ta vẫn đang đồng lòng nhất trí với nhau rằng hiện nay chúng vẫn không đáp ứng hiệu quả để hỗ trợ cho việc xây dựng mã nguồn Grid. Các ứng dụng lưới thường có xu hướng động và không đồng nhất, bởi vì chúng sẽ chạy trên các loại nguồn tài nguyên khác nhau với cấu hình thay đổi khi thực thi. Những cấu hình động này có thể được thúc đẩy bởi sự thay đổi của môi trường, ví dụ như thay đổi hiệu năng hay lỗi của phần cứng, v.v…Bất kể nguyên nhân gì thì liệu một mô hình hay một công cụ lập trình nào đó có thể làm cho các nguồn tài nguyên “hỗn tạp” ấy trở nên “gần gũi” với những người lập trình hay không? che dấu các khác biệt đó trong khi vẫn cho phép người lập trình quyền điều khiển trên các loại tài nguyên nếu có thể? Nhưng nếu có một sự trừu tượng thích hợp được sử dụng thì liệu nó có được hỗ trợ, cung cấp bởi các hệ thống thời gian thực? Grid thường được sử dụng cho tính toán hiệu năng cao với quy mô lớn. Để đạt được hiệu năng cao thì yêu cầu cần phải có một sự cân bằng giữa tính toán và thông tin giữa các nguồn tài nguyên liên quan. Hiện tại thì chúng ta có Trang 53 thể thực hiện điều này bằng cách quản lý tính toán, thông tin, và dữ liệu cục bộ sử dụng truyền thông điệp (message passing) hay gọi yêu cầu các phương thức từ xa (remote method invocation - RMI). Để giải quyết các vấn đề này, chúng ta phải biết được rằng các mô hình lập trình hiện nay đang thiếu những gì, cần thêm những khả năng mới gì, và nó sẽ được thực thi ở mức ngôn ngữ, mức công cụ hay ở hệ thống thời gian thực nào. Thuật ngữ mô hình lập trình ở đây được sử dụng không chỉ liên quan đến ngôn ngữ lập trình. Một mô hình lập trình có thể được thể hiện theo nhiều dạng khác nhau, ví dụ như một ngôn ngữ, một thư viện API, hay đơn thuần chỉ là một công cụ có các chức năng mở rộng. Một mô hình lập trình thành công nhất là mô hình có hiệu năng cao, sự kết hợp và quản lý linh hoạt các nguồn tài nguyên. Các mô hình lập trình cũng phải ảnh hưởng đến toàn bộ chu trình phát triển phần mềm : thiết kế, cài đặt, kiểm lỗi, vận hành, duy trì, v.v…Vì thế những mô hình thành công cũng phải đáp ứng việc sử dụng hiệu quả tất cả các loại công cụ phát triển, ví dụ như là trình biên dịch, trình sửa lỗi, trình theo dõi hiệu năng… Trước tiên ta sẽ tìm hiểu các vấn đề chính khi lập trình lưới, sau đó chúng ta sẽ tìm hiểu một vài mô hình lập trình phổ biến đang được sử dụng và đề xuất trên môi trường Grid. Tiếp theo chúng ta sẽ thảo luận các phương pháp và kỹ thuật lập trình nhằm giải quyết các vấn đề phức tạp bằng cách sử dụng các công cụ đang có hiện nay. 3.2. Các vấn đề khi lập trình luới 3.2.1. Tính mang chuyển, tính khả thi và khả năng thích ứng Các ngôn ngữ lập trình cấp cao hiện nay cho phép người dùng viết mã nguồn hoàn toàn độc lập với bộ xử lý. Các mô hình lập trình lưới cũng nên có khả năng như vậy. Điều này đối với các máy ảo thông dịch nghĩa là độc lập về kiến trúc, nhưng nó cũng có nghĩa là khả năng sử dụng các đoạn mã nguồn hay dịch vụ ở nhiều nơi khác nhau để cung cấp thành một chức năng tương tự. Tính Trang 54 khả chuyển như vậy là một điều kiện tiên quyết cho việc sao chép các cấu hình động và không đồng nhất. Việc sử dụng những đoạn mã nguồn và dịch vụ khác nhau nhưng có chức năng tương tự nhau thể hiện tính cộng tác trong việc thi hành các mô hình lập trình. Khái niệm về một kiến trúc Grid mở và có tính mở rộng ngụ ý là một môi trường phân tán có thể hỗ trợ cho các giao thức, dịch vụ, giao diện lập trình ứng dụng và các công cụ phát triển phần mềm. Cuối cùng tính mang chuyển và tính cộng tác sẽ dẫn đến khả năng thích ứng. Một chương trình Grid phải có khả năng thích ứng với các cấu hình khác nhau dựa trên nguồn tài nguyên sẵn có. Điều này có thể xảy ra vào thời điểm bắt đầu, hay tại thời điểm thực thi nguyên do sự thay đổi các yêu cầu của ứng dụng hay do khả năng phục hồi lỗi. Khả năng thích ứng như vậy có thể liên quan đến một bước khởi động lại đơn giản ở đâu đó hay là một sự tích hợp thật sự giữa tiến trình và dữ liệu. 3.2.2. Khả năng phát hiện tài nguyên Tìm ra các tài nguyên hiện có trên mạng là một phần quan trọng của tính toán lưới. Mã nguồn của chương trình lưới sẽ chỉ ra rõ ràng những máy (host) thích hợp nào để chạy chương trình. Tuy nhiên bởi vì Grid chứa đựng nhiều dịch vụ cố định, nên chúng cũng vẫn phải có khả năng tìm ra các dịch vụ này và các giao diện mà chúng hỗ trợ. Cách sử dụng các dịch vụ này phải có khả năng tái lập trình và kết hợp lại theo một cách thống nhất. Vì thế môi trường và công cụ lập trình phải chú ý tìm ra các dịch vụ hiện có và cung cấp cho người dùng các cách thức tường minh hay ngầm ẩn để khai thác chúng trong quá trình xây dựng và triển khai các ứng dụng Grid. 3.2.3. Hiệu năng Rõ ràng đối với nhiều ứng dụng Grid, vấn đề hiệu năng là điều rất đáng quan tâm. Bởi vì Grid sử dụng băng thông hỗn tạp và các hệ thống phân cấp ẩn cho nên điều này gây khó khăn cho việc đạt được hiệu năng tốt nhất và cách sử dụng hiệu quả các nguồn tài nguyên. Trang 55 Tuy nhiên đối với nhiều ứng dụng, để đạt hiệu năng đáng tin cậy cũng là một vấn đề khá quan trọng. Một môi trường động và không đồng nhất có thể tạo ra nhiều khả năng thực thi khác nhau mà có thể sẽ không được chấp nhận trong nhiều tình huống. Vì thế trong môi trường chia sẽ, chất lượng dịch vụ sẽ trở nên càng cần thiết nhằm đạt được hiệu năng đáng tin cậy trên một cấu hình tài nguyên đã cho. Trong khi người dùng có thể yêu cầu mô hình theo một hiệu năng nào đó, tuy nhiên sẽ hợp lý hơn nếu hiệu năng cung cấp nằm bên trong một khoảng giới hạn nào đó. 3.2.4. Dung lỗi Việc cần có nhiều cấp độ dung lỗi trong môi trường Grid là hoàn toàn cần thiết. Điều này đặc biệt đúng khi các ứng dụng khởi tạo hàng ngàn các công việc độc lập tương tự với nhau trên hàng ngàn máy trạm (host). Rõ ràng khi số lượng các tài nguyên tham gia tính toán ngày càng tăng thì cũng làm gia tăng xác suất bị hỏng. Các chương trình Grid phải có khả năng kiểm tra các lỗi khi đang thực thi, và bên cạnh đó cũng phải cung cấp khả năng phục hồi và phản ứng khi có lỗi xảy ra ở cấp độ chương trình. Tại thời điểm đó các công cụ cũng phải bảo đảm cho các phép tính cũng được thực thi ở cấp độ tối thiểu khi có lỗi xảy ra. 3.2.5. Bảo mật Chúng ta sẽ còn tiếp tục chứng kiến sự phát triển của tính toán lưới trên nhiều domain chia sẽ, như là các mạng. Trong khi việc cung cấp một chức năng chứng thực mạnh giữa hai site là cực kỳ quan trọng, thì bên cạnh đó việc quản lý chương trình trên nhiều site cũng là điều không đơn giản. Vì thế, một phương pháp bảo mật có cấp khả năng xác thực người dùng phải được tích hợp vào trong các mô hình lập trình lưới. 3.2.6. Các siêu mô hình Phương pháp lập trình truyền thống với các ngôn ngữ lập trình cổ điển dựa vào trình biên dịch để thực hiện việc chuyển đổi giữa 2 mô hình lập trình, như là giữa ngôn ngữ cấp cao C hay Fortran, với tập các chỉ thị phần cứng thể Trang 56 hiện bởi việc thực thi tuần tự các hàm trên dữ liệu trong bộ nhớ. Quá trình chuyển đổi này có thể là sự xây dựng của một số các mô hình liên quan đến ngữ nghĩa của mã nguồn và sự áp dụng một số tính năng cải tiến như tối ưu, dọn dẹp bộ nhớ, và kiểm tra phạm vi. Sự kết hợp các siêu mô hình tương tự sẽ góp phần xây dựng chương trình Grid. 3.3. Tổng quát về các môi trường hỗ trợ 3.3.1. Một số môi trường Grid 3.3.1.1. NetSolve NetSole là một ứng dụng client/server đuợc thiết kế để giải quyết những vấn đề tính toán khoa học trong môi trường phân phối. Agent Agent Network of servers Client Client MPP servers Scalar serverrequest choice reply Hình 3-1 : Mô hình NetSolve Hệ thống Netsolve dựa trên những hệ thống phân phối, được kết nối thông qua mạng LAN hay WAN. Những chương trình từ máy khách Netsolve có thể được viết bằng C hay FORTRAN, và sử dụng Web để giao tiếp với Server. Một server Netsolve có thể sử dụng một số gói phần mềm liên quan đến khoa học để cung cấp cho những phần mềm tính toán. Những giao tiếp truyền thông bên trong Netsolve thông qua những socket. Netsolve đáp ứng những khả năng cho việc tìm kiếm những tài nguyên máy tính trên một mạng máy Trang 57 tính, chọn những tài nguyên sẵn dùng tốt nhất, giải quyết một vấn đề, và trả kết quả cho người sử dụng. 3.3.1.2. Legion Là một hệ thống trên cơ sở đối tượng được phát triển ở đại học Virginia (Hoa Kỳ). Legion cung cấp kiến trúc phần mềm để hệ thống những máy tính phân phối khắp nơi, với số lượng khổng lồ có thể giao tiếp với nhau một cách dễ dàng. Trong hệ thống Legion, có những đặc điểm sau sau: - Mọi thứ là một đối tượng. Những đối tượng đặc trưng cho tất cả các phần cứng và phần mềm. Mỗi đối tượng là một xử lý hoạt động, đáp ứng những yêu cầu giải pháp cho những đối tượng khác bên trong hệ thống. Legion định nghĩa một tập API cho việc giao tiếp đối tượng. Nhưng không phải là ngôn ngữ lập trình hay giao thức truyền thông. - Những lớp quản lý những trường hợp. Mọi đối tượng Legion được định nghĩa và quản lý bởi chính đối tượng hoạt động .Những lớp đối tượng có những khả năng như sau: tự tạo một trường hợp thể hiện (instance), lập biểu cho việc thực thi, làm cho một đối tượng khác hoạt động, hay không hoạt động, và cung cấp thông tin về trạng thái cho những đối tượng thuộc về các máy tính khác. Những người dùng có thể định nghĩa thêm các lớp mới. Giống ngôn ngữ lập trình hướng đối tượng, người dùng có thể định nghĩa lại hay viết lại những chức năng của một lớp. Đặc điểm này cho phép những chức năng này có thể thêm, hay xoá tùy theo nhu cầu của người dùng. Hệ thống Legion hỗ trợ một tập các dạng đối tượng cốt lõi : • Những lớp và lớp tự định nghĩa • Những đối tượng chủ : Những đối tượng chủ là sự trừu tượng hóa của việc xử lý những tài nguyên, chúng có thể thể hiện một bộ xử lý đơn hay nhiều máy tính hay mhiều bộ xử lý. 3.3.1.3. Globus Trang 58 Globus cung cấp một cơ sở hạ tầng phần mềm, làm cho những ứng dụng có thể quản lý phân phối những tài nguyên tính toán khổng lồ như một máy tính đơn ảo. Một Grid, là một cở sở hạ tầng phần cứng và phần mềm, cung cấp truy xuất các tài nguyên khắp nơi dùng cho tính toán cấp cao, dù cho sự phân phối thuộc về địa lý của tài nguyên và người sử dụng có sự cản trở. Globus cung cấp những dịch vụ cơ bản và những khả năng được yêu cầu để cấu trúc một mạng tính toán lưới. Bộ công cụ bao gồm một tập hợp các thành phần bổ sung cho những dịch vụ cơ bản, chẳng hạn như bảo mật, định vị tài nguyên, quản lý tài nguyên, và dịch vụ truyền thông. Mạng tính toán lưới được hỗ trợ một số lượng lớn những ứng dụng và mô hình lập trình, đó là một điều thiết yếu.Vì thế, việc cung cấp hơn một mô hình lập trình chuẩn, chẳng hạn như mô hình lập trình hướng đối tượng là điều thiết yếu. Globus cung cấp một số dịch vụ cho phép những nhà phát triển công cụ đặc biệt hay những ứng dụng có thể sử dụng để tạo ra những yêu cầu cụ thể cho chính họ. Phương pháp này chỉ khả thi khi những dịch vụ có sự khác biệt và được định nghĩa tốt thông qua những tập API của nó, Globus được kiến tạo như một tầng kiến trúc với những dịch vụ cấp cao được xây dựng trên những dịch vụ cốt lõi ở tầng thấp hơn. Bộ công cụ Globus được phân thành những mô đun, và một ứng dụng có thể khai thác những đặc điểm này của từng mô đun của Globus, chẳng hạn như sự quản lý tài nguyên hay hạ tầng thông tin, mà không sử dụng những thư viện truyền thông của Globus. Bộ công cụ Globus hỗ trợ những dịch vụ sau : • GSI (Grid Security Infrastructure): kiến trúc bảo mật • GridFTP: giao thức truyền tập tin • GRAM (Globus Resource Allocation Manager): quản lý các tài nguyên trên môi trường Grid. • Metacomputing Directory Service • Globus Access to Secondary Storage • Data catalogue và replica management Trang 59 • Advanced Resource Reservation và Allocatoin(GARA) Hình 3-2 : Các thành phần của Globus Globus có thể được nhìn nhận như một hệ thống cơ bản cho tính toán lưới, ngoài việc cung cấp cho nhà phát triển ứng dụng một tập thư viện API đặc trưng cho các dịch vụ Globus mà cung cấp. Globus còn cung cấp cho những nhà phát triển ứng dụng một phương tiện hiện thực cho việc bổ sung các dịch vụ để cung ứng cho môi trường thực thi ứng dụng trên một vùng rộng lớn. 3.3.2. Những mô hình lập trình và công cụ hỗ trợ Cho đến lúc này, gần 20 năm nghiên cứu và phát triển trong ngành lập trình song song và phân bố. Việc thiết kế hệ thống phân bố đã hướng nền phát tiển kỹ thuật phần cứng lên một tầm cao mới và ước hẹn có thể xây dựng được hệ thống tốt, cải thiện được trạng thái hiện thời và sử dụng lại hệ thống. Sự phát triển Grid computing cũng lấy gốc từ việc tính toán song song và phân bố này, bởi vì chúng đã xác lập được những phương pháp lập trình nền tảng cho sự phân bố và song song hoá .Chúng em sẽ đưa ra một số mô hình lập trình và công cụ mà ngày nay đã được thực nghiệm trên thế giới 3.3.2.1. Mô hình chia sẽ trạng thái Trang 60 Mô hình lập trình Shared-state đặc trưng cho sự liên kết chặt chẽ ,những ngôn ngữ đồng bộ và những mô hình thực thi cho những máy tính chia sẻ bộ nhớ và hệ thống mạng chia sẻ vùng nhớ giữa các máy tình, với băng tầng truyền thông cao và độ trễ trong việc truyền thông thấp. Việc này quyết định môi trường Grid và sẽ làm tác động đến các công cụ lập trình khác trở nên không hiệu quả, vì thế cần có một số mô hình lập trình thiết yếu dựa trên hình thức chia sẻ trạng thái, và như thế trình sản xuất và tiêu thụ dữ liệu giữa các tiến trình được phân chia rõ ràng hơn trên môi trường Grid. • JavaSpaces Javaspaces là một sự bổ sung dựa trên Java với khái niệm không gian biến (tuplespace) Linda, điều này được minh hoạ bằng một tập biến được thể hiện bởi một tập các đối tượng. Sử dụng Java có đặc điểm là nhiều client và server tương tác với nhau mà không liên quan đến những kiến trúc của bộ xử lý và hệ điều hành. Sử dụng JavaSpaces nhìn nhận một ứng dụng như một tập những xử lý giao tiếp với nhau bằng cách nhận và đưa những đối tượng vào một hay nhiều vùng không gian (space). Một không gian (space) là một kho chứa đối tượng cụ thể và được chia sẻ và được truy xuất thông qua mạng máy tí

Các file đính kèm theo tài liệu này:

  • pdfUnlock-[LVIT013] - NC tính toán lưới & thử nghiệm 1 số thuật toán lí thuyế đồ thị.pdf
Tài liệu liên quan