Tài liệu tham khảo công nghệ thông tin 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ị
Trang 1TRƯỜ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
Trang 2NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Trang 3NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Trang 4LỜ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 5LỜ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
Trang 6quyế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
Trang 7• 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.
Trang 8Mụ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
Trang 93.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
Trang 11Hì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
Trang 12Hì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 13Chươ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
Trang 14Trong 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 15Hì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ể
Trang 161.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 17Chương 2 Tính toán song song và phân bố
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 …
Trang 182.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 19Hì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
Trang 20tế 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 21chươ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.
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 22Hì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 23chuyể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
Trang 24mạ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
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 25ngữ 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
Trang 264 Đồ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 27như 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
Trang 28Hì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 29viế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
Trang 30kiệ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 31Hì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
Trang 32Phâ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 33Hì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ả
Trang 34như 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 35Hì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 36Hì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 37Lư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 38Hì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 39Phâ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
Trang 40hơ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