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ị
Trang 1NGHIÊN CỨU TÍNH TOÁN LƯỚI VÀ THỬ NGHIỆM MỘT SỐ THUẬT TOÁN LÝ
THUYẾT ĐỒ THỊ
KHOÁ LUẬN CỬ NHÂN TIN HỌC
TP HCM, NĂM 2005
Trang 2NGHIÊ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
Trang 3NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Trang 4
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Trang 5
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
Trang 6LỜ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 nghà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 nghà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 là rất lớ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ể 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
Trang 7Hình ảnh minh họa cho các tài nguyên phân phối
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 tìm hiểu được về tính toán lưới 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 trê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
Trang 8• 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 Kết luận – Hướng phát triển : 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
Trang 9Mục lục
Chương 1 Giới thiệu 14
1.1 Các khái niệm 14
1.2 Những thách thức đối với tính toán lưới 17
Chương 2 Tính toán song song và phân bố 18
2.1 Khái niệm 18
2.2 Nền tảng tính toán song song và phân bố 19
2.2.1 Kiến trúc xử lý song song và phân bố 19
2.2.2 Tổ chức vật lý của các nền tảng song song và phân bố 26
2.3 Một số mô hình lập trình song song thông dụng 27
2.3.1 Mô hình chia sẽ không gian bộ nhớ 27
2.3.2 Mô hình truyền thông điệp 28
2.4 Cách thức xây dựng một chương trình song song và phân bố 30
2.4.1 Các thuật ngữ căn bản 31
2.4.2 Thiết kế thuật toán song song 33
2.4.3 Một số phương pháp tối ưu 46
2.4.4 Các mô hình thuật toán song song 50
Chương 3 Các môi trường hỗ trợ tính toán lưới 55
3.1 Giới thiệu 55
3.2 Các vấn đề khi lập trình luới 56
3.2.1 Tính mang chuyển, tính khả thi và khả năng thích ứng 56
3.2.2 Khả năng phát hiện tài nguyên 57
3.2.3 Hiệu năng 57
3.2.4 Dung lỗi 58
3.2.5 Bảo mật 58
3.2.6 Các siêu mô hình 59
3.3 Tồng quát về các môi trường hỗ trợ 59
Trang 103.3.1 Một số môi trường Grid 59
3.3.2 Những mô hình lập trình và công cụ hỗ trợ 63
3.3.3 Môi trường cài đặt 69
3.4 Những kỹ thuật nâng cao hỗ trợ lập trình 81
3.4.1 Các kỹ thuật truyền thống 81
3.4.2 Các kỹ thuật hướng dữ liệu 82
3.4.3 Các kỹ thuật suy đoán và tối ưu 83
3.4.4 Các kỹ thuật phân tán 83
3.4.5 Nhập xuất hướng Grid 84
3.4.6 Các dịch vụ giao tiếp cấp cao 84
3.4.7 Bảo mật 86
3.4.8 Dung lỗi 86
3.4.9 Các siêu mô hình và hệ thống thời gian thực hướng Grid 88
3.5 Kết luận 89
Chương 4 Mô hình lập trình truyền thông điệp - MPI 91
4.1 Các khái niệm cơ bản 92
4.2 Cấu trúc chương trình MPI 95
4.3 Trao đổi thông tin điểm-điểm 96
4.3.1 Các thông tin của thông điệp 97
4.3.2 Các hình thức truyền thông 97
4.3.3 Giao tiếp blocking 99
4.3.4 Giao tiếp non-blocking 103
4.4 Trao đổi thông tin tập hợp 109
4.4.1 Đồng bộ hóa 109
4.4.2 Di dời dữ liệu trong nhóm 109
4.4.3 Tính toán gộp 113
4.5 Các kiểu dữ liệu 118
4.5.1 Những kiểu dữ liệu đã được định nghĩa 118
Trang 114.5.3 Pack và UnPack 123
4.6 Quản lý nhóm và communicator 124
4.6.1 Tổng quan 124
4.6.2 Nguyên tắc sử dụng 126
Chương 5 Thử nghiệm các thuật toán lý thuyết đồ thị 129
5.1 Các khái niệm cơ bản 129
5.2 Dijkstra 130
5.2.1 Tuần tự 130
5.2.2 Song song 134
5.2.3 Thực nghiệm chương trình 136
5.3 Prim 138
5.3.1 Tuần tự 138
5.3.2 Song song 141
5.3.3 Thực nghiệm chương trình 143
5.4 Bellman – Ford 143
5.4.1 Tuần tự 143
5.4.2 Song song 147
Chương 6 Kết luận – Hướng phát triển 151
6.1 Kết luận 151
6.2 Hướng phát triển 151
Tài liệu tham khảo 153
Trang 12Danh sách hình
Hình 1-1 : 3 tầng của Grid 16
Hình 2-1 : Phân lọai hệ thống máy tính theo Flynn-Johnson 20
Hình 2-2 : Kiến trúc SISD 20
Hình 2-3 : Kiến trúc SIMD 21
Hình 2-4 : Kiến trúc MISD 23
Hình 2-5 : Kiến trúc MIMD 24
Hình 2-6 : Mô hình chía sẽ không gian bộ nhớ 28
Hình 2-7 : Mô hình truyền thông điệp 29
Hình 3-1 : mô hình NetSolve 60
Hình 3-2 : Các thành phần của Globus 63
Hình 4-1 : Các tiến trình tạo lập trên mô hình lập trình MPI 92
Hình 4-2 : Cách thức truyền thông của các process 94
Hình 4-3 : Blocking và non-blocking 94
Hình 4-4 : Group, communicator và rank 95
Hình 4-5 : Cấu trúc của chương trình MPI 96
Hình 4-6 : Giao tiếp blocking 99
Hình 4-7 : Thứ tự các xử lý 102
Hình 4-8 : Cách thức xử lý tiến trình 103
Hình 4-9 : Giao tiếp non-blocking 103
Hình 4-10 : Broadcast dữ liệu 110
Hình 4-11 : Ví dụ hàm Scatter 111
Hình 4-12 : Hàm MPI_Gather 112
Hình 4-13 : Hàm MPI_Allgather 112
Hình 4-14 : Hàm MPI_Alltoall 113
Hình 4-15 : Hàm MPI_Reduce 114
Hình 4-16 : Sử dụng 8 xử lý để tính giá trị tuyệt đối 116
Hình 4-17 Hàm Mpi-Allreduce 117
Hình 4-18 : Hàm MPI_Reduce_scatter 117
Trang 13Hình 4-20 : MPI_Type_contiguous 120
Hình 4-21 : MPI_Type_vetor 121
Hình 4-22 : MPI_Type_indexed 122
Hình 4-23 : MPI_Type_struct 122
Hình 5-1 Thuật toán Dijkstra tuần tự 134
Hình 5-1.1 131
Hình 5-1.3 132
Hình 5-1.4 133
Hình 5-1.5 133
Hình 5-1.6 134
Hình 5-2 : Thuật toán Dijkstra song song 135
Hình 5-3 Thuật toán Prim tuần tự 141
Hình 5-3 : Thuật toán Prim song song 142
Hình 5-4: Thuật toán Bellman-Ford tuần tự 145
Hình 5-5 : Thuật toán Bellman-Ford song song 149
Trang 14dự á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
Trang 15toá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
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 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
Trang 16kiế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
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ẽ 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 sử dụng điện hiện nay
Trang 171.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ạpbê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 18Ngoà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
Trang 192.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 20Hình 2-1 : Phân lọai hệ thống máy tính theo Flynn-Johnson
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.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
Trang 21tiế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 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
Trang 22đ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 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.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 23Hì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.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
Trang 24Hình 2-5 : Kiến trúc MIMD
Trang 25Bê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ý 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ộ
Trang 263 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 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ó
Trang 27thao 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ự
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
Trang 28đượ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 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ề
Trang 29khô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)
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
Trang 30đồ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 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
Trang 31toá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 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
Trang 32Hì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
Hình 2-9 :Đồ thi tương tác trong bài toán nhân ma trận với vector
Trang 332.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
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à
Trang 34chú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 35Hì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
Trang 36trướ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 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
Trang 38Hình 2-12 : Phân họach bài toán nhân ma trận theo ma trận trung gian chiều
3-• 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
Trang 39phầ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
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 40http://etrithuc.vnHình 2-13 : Các bước phát sinh theo phân hoạch thăm dò