đều dẫn đến các bài toán xử lý một khối lượng dữ liệu rất lớn dẫn tới yêu cầu cần phải có những hệ thống máy tính thật mạnh mới thực hiện được những yêu cầu của thực tế.. Chương 3: Trên
Trang 1Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Trang 2Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
LỜI CẢM ƠN
Trong quá trình học tập và nghiên cứu tại lớp Cao học khóa 9 chuyên ngành Khoa học máy tính tại Trường Đại học Công nghệ thông tin và Truyền thông - Đại học Thái Nguyên, Tôi đã nhận được rất nhiều sự giúp đỡ nhiệt tình của các thầy, cô giáo trong Trường Đại học Công nghệ thông tin và Truyền thông; Viện công nghệ thông tin thuộc Viện khoa học và Công nghệ Việt Nam Các thầy, cô luôn giúp đỡ, tạo điều kiện cho tôi trong quá trình học tập Tôi xin bày tỏ lời cảm ơn chân thành tới tập thể các thầy, cô giáo trong Trường Đại học Công nghệ thông tin và Truyền thông; Viện công nghệ thông tin thuộc Viện khoa học và Công nghệ Việt Nam
Đặc biệt Tôi xin gửi lời cảm ơn sâu sắc tới thầy giáo TS Vũ Vinh Quang đã định
hướng và tận tình hướng dẫn tôi hoàn thành nội dung bản luận văn này
Tôi xin cảm ơn các bạn đồng nghiệp và người thân đã động viên, giúp đỡ tôi trong quá trình nghiên cứu và thực hiện luận văn
Trong một khoảng thời gian ngắn, với kiến thức của bản thân còn hạn chế nên luận văn không tránh khỏi những thiếu sót về mặt khoa học, tôi rất mong nhận được những đóng góp ý kiến của các Thầy cô giáo cùng bạn bè để bản luận văn được hoàn chỉnh hơn
Thái Nguyên, ngày tháng năm 2013
Học viên
Võ Quang Huy
Trang 3Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
MỤC LỤC
LỜI CẢM ƠN i
MỤC LỤC iii
DANH MỤC CÁC HÌNH VẼ v
LỜI NÓI ĐẦU 1
Chương 1: MỘT SỐ KIẾN THỨC CƠ BẢN VỀ XỬ LÝ SONG SONG 2
1.1 Khái niệm cơ bản về xử lý song song 2
1.2 Các mô hình máy tính song song 5
1.2.1 Mô hình SISD: Đơn luồng lệnh, đơn luồng dữ liệu 5
1.2.2 Mô hình SIMD: Đơn luồng lệnh, đa luồng dữ liệu 6
1.2.3 Mô hình MISD: Đa luồng lệnh, đơn luồng dữ liệu 7
1.2.4 Mô hình MIMD: Đa luồng lệnh, đa luồng dữ liệu 7
1.3 Khái niệm về thuật toán song song 9
1.3.1 Định nghĩa 9
1.3.2 Các cách tiếp cận trong thiết kế 10
1.4 Đánh giá các chương trình song song 10
1.5 Phân tích và đánh giá thuật toán song song 12
1.6 Khái niệm chương trình dịch, hệ điều hành 15
1.7 Một số ngôn ngữ lập trình song song 17
1.7.1 Lập trình song song với OCCAM 17
1.7.2 Lập trình song song với PVM 21
Chương 2: CÁC THUẬT TOÁN TỐI ƯU TRÊN MÔ HÌNH ĐỒ THỊ 25
2.1 Một số khái niệm đồ thị 25
2.1.1 Mô hình đồ thị 25
2.1.2 Các khái niệm cơ bản 27
2.1.3 Đường đi, chu trình Đồ thị liên thông 29
2.1.4 Cây và cây khung của đồ thị 29
2.2 Mô hình các bài toán tối ưu 29
Trang 4Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
2.2.1 Bài toán cây khung nhỏ nhất 29
2.2.2 Bài toán xác định đường đi ngắn nhất 34
2.2.3 Bài toán tô màu đồ thị 38
Chương 3:THIẾT KẾ CÁC THUẬT TOÁN SONG SONG TRÊN ĐỒ THỊ 47
3.1 Một số thuật toán sắp xếp song song 47
3.1.1 Thuật toán sắp xếp đánh số 47
3.1.2 Thuật toán sắp xếp so sánh và đổi chỗ 48
3.1.3 Thuật toán sắp xếp MergeSort 51
3.2 Song song hóa một số thuật toán tối ưu trên đồ thị 54
3.2.1 Song song hóa thuật toán Kruskal 54
3.2.2 Song song hóa thuật toán Prim 56
3.2.3 Song song hóa thuật toán Floyd 59
3.2.4 Song song hóa thuật toán tô màu đồ thị 61
PHẦN KẾT LUẬN 63
TÀI LIỆU THAM KHẢO 64
Trang 5Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
DANH MỤC CÁC HÌNH VẼ
Hình 1.1 Mô tả kiến trúc Von Neumann 2
Hình 1.2 Mô hình của kiến trúc SISD 6
Hình 1.3 Mô hình của kiến trúc SIMD 6
Hình 1.4 Mô hình của kiến trúc MISD 7
Hình 1.5 Mô hình của kiến trúc MIMD 8
Hình 1.6 Các mẫu hình kiến trúc xử lý song song 8
Hình 1.7 Mô hình tính toán của PVM 22
Hình 1.8 Một kiến trúc của PVM 22
Hình 2.1 Sơ đồ mạng máy tính với đa kênh thông báo 26
Hình 2.2 Mạng máy với các kênh thoại một chiều 26
Hình 2.3 Đồ Thị có hướng G 28
Hình 2.4 28
Hình 2.5. 28
Hình 2.6. 28
Hình 3.1 Quá trình phân rã và hòa nhập trong Mergesort 52
Hình 3.2 Thuật toán tô màu đồ thị song song trên PRAM 62
Trang 6Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
LỜI NÓI ĐẦU
Trong thực tế, có rất nhiều lĩnh vực như xử lý đồ họa, trí tuệ nhận tạo, lý
thuyết đồ thị, lý thuyết nhận dạng, dự báo thời tiết đều dẫn đến các bài toán xử lý
một khối lượng dữ liệu rất lớn dẫn tới yêu cầu cần phải có những hệ thống máy tính thật mạnh mới thực hiện được những yêu cầu của thực tế Hầu hết những bài toán này, những máy tính xử lý tuần tự kiểu von Neumann là không đáp ứng yêu cầu Trong thời gian gần đây, vấn đề nghiên cứu xử lý song song là một hướng nghiên cứu đang được quan tâm trong lĩnh vực toán học và Công nghệ thông tin Một trong những bài toán nổi bật là các bài toán tối ưu trên mô hình lý thuyết đồ thị
Với mục đích nghiên cứu vấn đề thiết kế các thuật toán song song dựa trên các thuật toán tuần tự, luận văn đặt vấn đề nghiên cứu về lý thuyết xử lý song song và ứng dụng trên một số bài toán trong mô hình đồ thị
Cấu trúc của luận văn gồm phần mở đầu và 3 chương nội dung như sau
Phần mở đầu giới thiệu về hướng nghiên cứu và các mục đích nghiên cứu Chương 1: luận văn trình bày các khái niệm về vấn đề xử lý song song, mô hình máy tính song song, thuật toán song song cùng một số ngôn ngữ song song Đây là các khái niệm quan trọng làm cơ sở cho các vấn đề được đưa ra trong các chương tiếp sau
Chương 2: luận văn đưa ra các khái niệm cơ bản về lý thuyết đồ thị, mô hình các bài toán tối ưu và mô tả các thuật toán tuần tự kinh điển giải các bài toán tương ứng, đánh giá độ phức tạp của các thuật toán tuần tự
Chương 3: Trên cơ sở các thuật toán đã trình bày trong chương 2 kết hợp với
lý thuyết xử lý song song, luận văn đưa ra một số hướng thiết kế các thuật toán song song giải các bài toán tối ưu trên mô hình đồ thị, đánh giá độ phức tạp của các thuật toán tương ứng
Kèm theo luận văn là các phần mềm thử nghiệm các thuật toán tuần tự được viết bằng ngôn ngữ C++
Trang 7Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Chương 1 MỘT SỐ KIẾN THỨC CƠ BẢN VỀ XỬ LÝ SONG SONG
1.1 Khái niệm cơ bản về xử lý song song
Trong những thập niên 60, nền tảng để thiết kế máy tính đều dựa trên mô hình
của John Von Neumann (Xem 0), với một đơn vị xử lý được nối với một vùng lưu
trữ làm bộ nhớ và tại một thời điểm chỉ có một lệnh được thực thi
Hình 1.1 Mô tả kiến trúc Von Neumann
Với những bài toán yêu cầu về khả năng tính toán và lưu trữ lớn thì mô hình kiến trúc này còn hạn chế Để tăng cường sức mạnh tính toán giải quyết các bài toán lớn có độ tính toán cao, người ta đưa ra kiến trúc mới, với ý tưởng kết hợp nhiều bộ
xử lý vào trong một máy tính, mà hay gọi là xử lý song song (Multiprocessor) hoặc kết hợp sức mạnh tính toán của nhiều máy tính dựa trên kết nối mạng (gọi là máy tính song song - multicomputer)
Trong thời đại thông tin bùng nổ, con người càng ngày càng trở nên bận rộn thì nhu cầu của xử lý song song ngày càng được nâng cao nhằm xử lý được một lượng dữ liệu lớn nhất trong thời gian nhanh nhất có thể Xử lý song song ngày càng được quan tâm trên thế giới vì 2 lý do chính sau đây:
- Đạt được hiệu năng cao hơn trong khi tiết kiệm được thời gian và tiền bạc
Về lý thuyết, càng đầu tư nhiều tài nguyên cho một nhiệm vụ nào đó thì càng rút ngắn được thời gian thực hiện nhiệm vụ đó, đồng thời tiết kiệm được càng nhiều chi
Trang 8Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
phí Hơn nữa, nhiều hệ thống xử lý song song có thể được xây dựng từ những thành phần rẻ tiền và phổ biến
- Khả năng xử lý các bài toán lớn Nhiều bài toán trong thực tế đòi hỏi tài nguyên tính toán lớn đến mức không một máy tính đơn lẻ nào có thể đáp ứng nổi Nhiều lĩnh vực mới như đồ họa máy tính, trí tuệ nhận tạo, phân tích số, v.v đòi hỏi phải xử lý một khối lượng dữ liệu rất lớn do đó cần phải có những hệ thống máy tính thật mạnh mới thực hiện được những yêu cầu của thực tế Những vấn đề về xử
lý ngôn ngữ tự nhiên, nhận dạng, xử lý ảnh ba chiều (3-D), dự báo thời tiết, mô hình
và mô phỏng những hệ thống lớn, v.v đều đòi hỏi phải xử lý dữ liệu với tốc độc rất cao, với khối lượng dữ liệu rất lớn Hầu hết những bài toán này, những máy tính xử
lý tuần tự kiểu von Neumann là không đáp ứng yêu cầu
Mặc dù tốc độ xử lý của các BXL tăng nhiều trong những năm qua, nhưng do giới hạn về vật lý nên khả năng tính toán của chúng không thể tăng mãi được Điều này dẫn tới là muốn tăng được khả năng tính toán của các hệ thống máy tính thì đích cuối cùng là phải khai thác được khả năng xử lý song song của chúng
Xét về mặt công nghệ, việc xây dựng, quản trị và ứng dụng một hệ thống xử lý song song cũng không phải dễ dàng Thông thường, chi phí phải trả cho việc quản trị một hệ thống xử lý song song trong 1 năm còn cao hơn nhiều so với chi phí bỏ ra
để mua cả hệ thống Ví dụ, một cluster có tốc độ tính toán 1 TeraFlops có chi phí vào khoảng 100 nghìn USD, gần bằng chi phí phải trả cho một người quản trị hệ thống trong một năm
Nghiên cứu về xử lý song song vì vậy không chỉ mang ý nghĩa khoa học, mà còn có ý nghĩa thực tiễn rất lớn Việc nghiên cứu về xử lý song song, từ lý thuyết cho đến ứng dụng, không chỉ giúp chúng ta nắm được nền tảng công nghệ, mà còn giúp chúng ta nhìn thấy tiềm năng to lớn của xử lý song song trong công nghệ nói riêng và các lĩnh vực kinh tế quốc dân nói chung
Trang 9Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Định nghĩa: Xử lý song song là quá trình xử lý gồm nhiều tiến trình được
kích hoạt đồng thời và cùng tham gia giải quyết một vấn đề, nói chung là thực hiện trên những hệ thống đa bộ xử lý
Sự khác nhau giữa song song với tuần tự:
+ Trong tính toán tuần tự với một BXL thì mỗi thời điểm chỉ thực hiện được một phép toán
+ Trong tính toán song song thì một số BXL cùng kết hợp với nhau để giải quyết cùng một vấn đề cho nên giảm được thời gian xử lý vì mỗi thời điểm có thể
có nhiều phép toán được thực hiện đồng thời
Ba yếu tố chính dẫn đến việc xử lý song song:
1 Hiện nay giá thành của phần cứng (CPU) giảm mạnh, tạo điều kiện để xây dựng những hệ thống có nhiều BXL với giá thành hợp lý
2 Sự phát triển của công nghệ mạch tích hợp VLSI cho phép tạo ra những
hệ phức hợp có hàng triệu transistor trên một chip
3 Tốc độ xử lý của các BXL theo kiểu von Neumann đã dần tiến tới giới hạn, không thể cải tiến thêm được do vậy dẫn tới đòi hỏi phải thực hiện xử lý song song
Vấn đề xử lý song song liên quan trực tiếp đến kiến trúc máy tính, phần mềm
hệ thống (hệ điều hành), thuật toán và ngôn ngữ lập trình, v.v
Các máy tính song song có thể phân thành nhiều loại dựa vào các đặc trưng của các kiến trúc và thể thực thao tác khác nhau Cụ thể là có thể dựa vào các chỉ tiêu về kiểu và số lượng các BXL, sự kết nối giữa chúng, dựa vào sơ đồ truyền thông và các thao tác vào/ra, v.v
Phần lớn các hệ điều hành ngày nay đều đã hỗ trợ đa xử lý / đa nhiệm và cho phép nghiên cứu, khai thác các phương pháp lập trình song song Vấn đề là chúng ta phải có nhiều BXL (các đơn vị tính toán độc lập) cùng hoạt động Nhưng điều quan
Trang 10Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
trọng là chúng phải tham gia "cùng giải một bài toán" Nói cách khác, những tiến trình thực hiện trên mỗi BXL phải kết hợp, trao đổi với nhau để giải quyết một bài toán cho trước
1.2 Các mô hình máy tính song song
Định nghĩa: Một máy tính song song là tuyển tập các BXL, thường là cùng
một loại, kết nối với nhau theo một cách nào đó để có thể hợp tác với nhau trong hoạt động và trao đổi dữ liệu được với nhau
Dựa vào các đặc tính về số lượng BXL, số chương trình thực hiện, cấu trúc bộ nhớ, v.v., Michael Flynn (1966) đã đưa ra cách phân loại nổi tiếng được nhiều người chấp nhận
1 Mô hình SISD (Single Instruction, Single Data Stream - Đơn dòng lệnh, đơn dòng dữ liệu) Đây thực chất chính là kiến trúc Von Neumann
2 SIMD (Single Instruction, Multiple Data Stream - Đơn dòng lệnh, đa dòng
dữ liệu) Kiến trúc này bao gồm các bộ xử lý kiểu vectơ cũng như các bộ xử lý song song cực lớn (MPP)
3 Mô hình MISD (Multiple Instruction, Single Data Stream - Đa dòng lệnh, đơn dòng dữ liệu)
4 Mô hình MIMD (Multiple Instruction, Multiple Data Stream - Đa dòng lệnh, đa dòng dữ liệu) Kiến trúc này bao gồm các hệ đa vi xử lý truyền thống cũng như các mạng máy trạm
Sau đây chúng ta nghiên cứu chi tiết các mô hình trên:
1.2.1 Mô hình SISD: Đơn luồng lệnh, đơn luồng dữ liệu
Máy tính loại SISD chỉ có một CPU, ở mỗi thời điểm thực hiện một chỉ lệnh và chỉ đọc, ghi một mục dữ liệu Tất cả các máy tính SISD chỉ có một thanh ghi register được gọi là bộ đếm chương trình (program counter) được sử dụng để nạp địa chỉ của lệnh tiếp theo khi xử lý tuần tự và kết quả là thực hiện theo một thứ tự xác định của các câu lệnh Hình 1.2 mô tả hoạt động của máy tính theo mô hình SISD
Trang 11Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Hình 1.2 Mô hình của kiến trúc SISD
Mô hình SISD còn được gọi là SPSD, đơn chương trình và đơn luồng dữ liệu Đây chính là mô hình máy tính truyền thống kiểu von Neumann
1.2.2 Mô hình SIMD: Đơn luồng lệnh, đa luồng dữ liệu
Máy tính loại SIMD có một đơn vị điều khiển để điều khiển nhiều đơn vị xử
lý (nhiều hơn một đơn vị) thực hiện theo một luồng các câu lệnh CPU phát sinh tín hiệu điều khiển tới tất cả các phần tử xử lý, những BXL này cùng thực hiện một phép toán trên các mục dữ liệu khác nhau, nghĩa là mỗi BXL có luồng dữ liệu riêng Đây là kiểu tính toán lặp lại các đơn vị số học trong CPU, cho phép những đơn vị khác nhau thực hiện trên những toán hạng khác nhau, nhưng thực hiện cùng một lệnh Máy tính SIMD có thể hỗ trợ xử lý kiểu vector, trong đó có thể gán các phần
tử của vector cho các phần tử xử lý để tính toán đồng thời Máy tính vector và các BXL mảng là mô hình chủ yếu thuộc loại này Hình 1-3 mô tả hoạt động của máy tính theo mô hình SIMD, còn được gọi là SPMD
Hình 1.3 Mô hình của kiến trúc SIMD
Mô hình SIMD còn được gọi là SPMD, đơn chương trình và đa luồng dữ liệu Đây chính là mô hình máy tính phổ biến có trên thị trường như: ILLIAC IV, DAP
và Connection Machine CM-2
Đơn vị điều khiển
h
BXL số học
Tín hiệu điều khiển
Đơn vị điều khiển (CU)
Phần tử
xử lý 1
Tín hiệu điều khiển
Trang 12Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
1.2.3 Mô hình MISD: Đa luồng lệnh, đơn luồng dữ liệu
Máy tính loại MISD là ngược lại với SIMD Máy tính MISD có thể thực hiện nhiều chương trình (nhiều lệnh) trên cùng một mục dữ liệu, nên còn được gọi là MPSD (đa chương trình, đơn luồng dữ liệu) Kiến trúc kiểu này có thể chia thành hai nhóm:
Lớp các máy tính yêu cầu những đơn vị xử lý (PU) khác nhau có thể nhận được những chỉ lệnh khác nhau để thực hiện trên cùng một mục dữ liệu Đây là kiến trúc khó và hiện nay chưa có loại máy tính nào được sản xuất theo loại này
Lớp các máy tính có các luồng dữ liệu được chuyển tuần tự theo dãy các
CPU liên tiếp Đây là loại kiến trúc hình ống thực hiện xử lý theo vector thông qua
một dãy các bước, trong đó mỗi bước thực hiện một chức năng và sau đó chuyển kết quả cho PU thực hiện bước tiếp theo Hoạt động của máy tính theo kiến trúc loại này giống như hệ tuần hoàn nên còn được gọi là hệ tâm thu
Hình 1.4 Mô hình của kiến trúc MISD 1.2.4 Mô hình MIMD: Đa luồng lệnh, đa luồng dữ liệu
Máy tính loại MIMD còn gọi là đa BXL, trong đó mỗi BXL có thể thực hiện những luồng lệnh (chương trình) khác nhau trên các luồng dữ liệu riêng Hầu hết các hệ thống MIMD đều có bộ nhớ riêng và cũng có thể truy cập vào được bộ nhớ chung (global) khi cần, do vậy giảm thiểu được sự trao đổi giữa các BXL trong hệ
CU 2
CU n
Trang 13
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
thống Đây là kiến trúc phức tạp nhất, nhưng nó là mô hình hỗ trợ xử lý song song cao nhất và đã có nhiều máy tính được sản xuất theo kiến trúc này, ví dụ: BBN Butterfly, Alliant FX, iSPC của Intel, v.v
Mô hình của kiến trúc MIMD được mô tả như hình 1.5
Hình 1.5 Mô hình của kiến trúc MIMD
Theo sự phân loại của Flynn thì có hai họ kiến trúc quan trọng cho các máy tính song song đó là SIMD và MIMD Những kiến trúc khác có thể xếp theo hai mẫu đó Mẫu hình các kiến trúc xử lý song song có thể phân chia như hình 1.6
Hình 1.6 Các mẫu hình kiến trúc xử lý song song
CU 1
Phần tử
xử lý 2 Luồng lệnh 1
CU 2
CU n
Luồng lệnh 2
Luồng lệnh n
Luồng dữ liệu 1
Luồng dữ liệu 2
Luồng dữ liệu n
MIMD
SIMD
Hybrid MISD
Multiprocessor Multicomputer Data Flow Machine Array Processor Pipelined Vector Processor Pipelined Vector Processor Systolic Array
SIMD-MIMD MIMD-SIMD
Trang 14Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Những kiến trúc khác nhau có thể tạo ra những khả năng khác nhau cho việc
xử lý song song Ngay trong kiến trúc tuần tự chúng ta cũng có thể tận dụng đốc độ cực nhanh của các BXL để thực hiện xử lý song song theo nguyên lý chia sẻ thời gian và chia sẻ tài nguyên Tất nhiên đối với những kiến trúc máy tính song song thì mục đích chính là khai thác triệt để khả năng của kiến trúc song song để viết các chương trình song song
1.3 Khái niệm về thuật toán song song
Một trong các mục đích chính của xử lý song song là nghiên cứu và xây dựng những thuật toán thích hợp để cài đặt trên các máy tính song song, nghĩa là phát triển các thuật toán song song Câu hỏi tự nhiên là việc thiết kế một thuật toán song song như thế nào được gọi là thích hợp cho xử lý song song? Đối với thuật toán tuần tự thì chúng ta có thể thống nhất cách đánh giá dựa vào thời gian thực hiện thuật toán, không gian bộ nhớ và khả năng lập trình, v.v việc đánh giá thuật toán song song thì phức tạp hơn nhiều, ngoài những tiêu chuẩn trên còn phải bổ sung thêm những tham số về số BXL, khả năng của các bộ nhớ cục bộ, sơ đồ truyền thông, và các giao thức đồng bộ hoá, v.v
Để cài đặt các thuật toán song song trên các máy tính song song chúng ta phải
sử dụng những ngôn ngữ lập trình song song Nhiều ngôn ngữ lập trình song song đang được sử dụng như: Fortran 90, nCUBE C, Occam, C-Linda, PVM với C/C++, CDC 6600, v.v
Để thiết kế được các thuật toán song song cần phải trả lời các câu hỏi sau:
Việc phân chia dữ liệu cho các tác vụ như thế nào?
Dữ liệu được truy cập như thế nào, những dữ liệu nào cần phải chia sẻ?
Phân các tác vụ cho các tiến trình (bộ xử lý) như thế nào?
Trang 15Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Các tiến trình được đồng bộ ra sao?
Các nguyên lý chính trong thiết kế thuật toán song song:
1 Các nguyên lý lập lịch: Sử dụng các thuật toán lập lịch cho các bộ xử lý để
giảm tối thiểu thời gian tính toán
2 Nguyên lý hình ống: Nguyên lý này được áp dụng khi bài toán xuất hiện
một dãy các thao tác {T T1 , 2 , ,T n}, trong đó T i+1 thực hiện sau khi T i kết thúc
3 Nguyên lý chia để trị: Chia bài toán thành những phần nhỏ hơn tương đối
độc lập với nhau và giải quyết chúng một cách song song
1.3.2 Các cách tiếp cận trong thiết kế
Có ba cách tiếp cận để thiết kế thuật toán song song:
1 Thực hiện song song hoá những thuật toán tuần tự, biến đổi những cấu trúc tuần tự để tận dụng được những khả năng song song tự nhiên của tất cả các thành phần trong hệ thống xử lý
2 Thiết kế những thuật toán song song mới phù hợp với kiến trúc song song
3 Xây dựng những thuật toán song song từ những thuật toán song song đã được xây dựng cho phù hợp với cấu hình tôpô và môi trường song song thực tế Như vậy, cách làm thông dụng là biến đổi các thuật toán tuần tự về song song, hay chuyển từ một dạng song song về dạng song song phù hợp hơn sao vẫn bảo toàn được tính tương đương trong tính toán Do đó, khi biến đổi chúng ta cần trả lời hai câu hỏi:
1 Kiến trúc nào phù hợp cho bài toán?
2 Những bài toán loại nào sẽ xử lý hiệu quả trong kiến trúc song song cho trước?
1.4 Đánh giá các chương trình song song
Sau đây chúng ta đưa ra cơ sở của phương pháp đánh giá độ phức tạp của thuật toán song song
Thời gian thực hiện song song
Để đánh giá được độ phức tạp tính toán của các thuật toán song song, ngoài số bước tính toán chúng ta còn cần đánh giá thời gian truyền thông của các tiến trình
Trang 16Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trong một hệ thống truyền thông, thời gian truyền thông cũng phải được xem trong thời gian thực hiện của thuật toán
Thời gian thực hiện song song, ký hiệu là tp gồm hai phần
đảm bảo do vậy, việc đánh giá thời gian tính toán của những hệ như thế là rất phức tạp
Thời gian truyền thông t comm lại phụ thuộc vào kích cỡ của các thông điệp, vào cấu hình kết nối mạng đường truyền và cả cách thức truyền tải thông điệp, v.v Công thức ước lượng thời gian truyền thông được xác định như sau:
at a
comm startup d
t = t + n * t
Trong đó
+tstartup là thời gian cần thiết để gửi những thông điệp không phải là dữ liệu
Nó bao gồm cả thời gian để đóng gói thông điệp ở nơi gửi và thời gian mở gói ở nơi nhận Để đơn giản chúng ta giả thiết thời gian này là hằng số
+
at a
d
t là thời gian cần thiết để chuyển một từ dữ liệu (một mục dữ liệu) từ nơi
gửi tới nơi nhận, được giả thiết là hằng số và n là số từ dữ liệu được trao đổi trong
Trang 17Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
máy tính thứ hai khi được tính xong sẽ được chuyển về máy tính thứ nhất để nó cộng hai kết quả bộ phận với nhau Bài toán này được phát biểu như sau:
3 Máy tính thứ hai chuyển kết quả tính được về máy tính thứ nhất
4 Máy tính thứ nhất cộng hai kết quả để có kết quả cuối cùng
Thời gian tính toán (ở bước 2 và 4):
Độ phức tạp tính toán là O n ( ) và độ phức tạp truyền thông cũng là O n ( ),
do vậy độ phức tạp nói chung của thuật toán trên cũng là O n ( )
1.5 Phân tích và đánh giá thuật toán song song
Đánh giá thuật toán tuần tự có thể căn cứ chủ yếu vào thời gian thực hiện được tính theo hàm của kích cỡ dữ liệu vào (input) Hàm này được gọi là độ phức tạp tính toán thời gian f(n) của thuật toán và được ký hiệu là O f n( ( )) Một cách hình thức ( ( ))
O g x được định nghĩa như sau:
Định nghĩa: Một thuật toán có độ phức tạp tính toán f x( )= O g x( ( )) Û ( )f x =
= O g x( ( )) Tồn tại số C dương và số nguyên x0 sao cho 0 ≤ f x( ) ≤ C * g(x), với mọi số lượng dữ liệu vào x ≥ x0
Hiển nhiên g x( ), f x( ) là hai hàm có giá trị dương O(1) ký hiệu cho một hằng
số bất kỳ
Trang 18Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Độ phức tạp tính toán của thuật toán song song không chỉ phụ thuộc vào kích
cỡ của dữ liệu đầu vào mà còn phụ thuộc vào kiến trúc máy tính song song và số lượng các bộ xử lý được phép sử dụng trong hệ thống
Độ phức tạp thời gian là thước đo quan trọng nhất đánh giá mức độ hiệu quả
của thuật toán song song Chúng ta giả thiết rằng mô hình tính toán có p bộ xử lý
Nghĩa là mức độ song song là có giới hạn Ngược lại, mức độ song song không bị giới hạn khi số các bộ xử lý là không bị chặn
Độ phức tạp thời gian của thuật toán song song sử dụng p bộ xử lý để giải một
bài toán có kích cỡ n là hàm f(n,p) xác định thời gian cực đại trôi qua giữa thời điểm
bắt đầu thực hiện thuật toán bởi một bộ xử lý và thời điểm kết thúc của các bộ xử lý đối với bộ dữ liệu vào bất kỳ Có hai loại thao tác khác nhau trong các thuật toán song song:
1 Các phép toán cơ sở như +, -, *, /, AND, OR, v.v
2 Các phép toán truyền dữ liệu trên các kênh truyền
Độ phức tạp thời gian của thuật toán song song được xác định bởi số các phép toán cơ sở và số các bước truyền tải dữ liệu giữa các bộ xử lý với nhau Từ đó suy
ra, độ phức tạp thời gian của thuật toán song song không chỉ phụ thuộc vào mô hình tính toán mà còn phụ thuộc vào số bộ xử lý được sử dụng
Nói chung, chương trình tính toán song song thường bắt đầu bằng việc nhập
dữ liệu vào bộ nhớ và kích hoạt một phần tử xử lý Mỗi bước tính toán, phần tử xử
lý này có thể đọc một số dữ liệu từ bộ nhớ, thực hiện một số phép toán cơ sở và ghi kết quả vào bộ nhớ riêng hoặc bộ nhớ chung Đồng thời mỗi bước tính toán, một phần tử xử lý có thể kích hoạt một hay một số phần tử xử lý khác Thực tế thì các máy tính đều có số bộ xử lý là hữu hạn, nên những thuật toán song song không bị giới hạn chỉ có nghĩa sử dụng khi chúng có thể chuyển đổi về thuật toán song song
bị giới hạn
Có ba cách định nghĩa khái niệm liên quan đến độ phức tạp của thuật toán song song:
Trang 19Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Định nghĩa 1: Một thuật toán song song có độ phức tạp tính toán O T( ) với P
bộ xử lý khi nó thực hiện nhiều nhất là O T( *P) phép toán cơ sở (định lý Brent)
Định nghĩa 2: Một thuật toán song song có độ phức tạp tính toán O T( ) sử dụng rất nhiều bộ xử lý để thực hiện O e( ) phép toán cơ sở khi cài đặt với P bộ xử lý
O p T
Định nghĩa 2 chỉ ra rằng khi số bộ xử lý được sử dụng giảm xuống trong một phạm vi nhất định thì thuật toán tiếp tục làm việc nhưng thời gian thực hiện sẽ tăng lên Định nghĩa 3 khẳng định rằng có cách để cài đặt thuật toán song song khi số các bộ xử lý được sử dụng bị giảm xuống
Mức độ hiệu quả của thuật toán được thể hiện ở mức độ song song của thuật toán Mức độ song song của thuật toán là số lượng cực đại các phép toán độc lập có thể thực hiện đồng thời ở mỗi thời điểm thực hiện của thuật toán
Ký hiệu P(W) là độ song song của thuật toán, thì thuật toán hiệu quả giải để giải bài toán có cỡ W là những thuật toán chỉ cần sử dụng nhiều nhất P(W) bộ xử lý
Ngoài ra, để đánh giá được thuật toán song song chúng ta còn phải xét tới hệ
+ T s là thời gian thực hiện tính toán trên một bộ xử lý
+ T p là thời gian thực hiện tính toán trên p bộ xử lý
Với giả thiết là bộ xử lý tuần tự và bộ xử lý song song là như nhau
Trang 20Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
1.6 Khái niệm chương trình dịch, hệ điều hành
Đối với các hệ thống song song thì một thành phần rất quan trọng là chương trình dịch song song Chương trình dịch làm giảm được thời gian thực hiện chương trình (song song) bằng cách chia nhỏ bài toán thành các khối công việc và những khối này được xử lý đồng thời bởi nhiều đơn vị xử lý Một số chương trình chỉ làm nhiệm vụ phát hiện những khối công việc thực hiện được song song và thực hiện phân chia các đơn vị chức năng, một số khác tinh tế hơn, có thể lập lịch cho cả bài toán Có
ba cách tiếp cận để xây dựng chương trình dịch cho các máy tính song song:
1 Run Time Partitioning and Run Time Scheduling Cách tiếp cận này khá
phù hợp với một số ứng dụng thực tế Tuy nhiên, nó có hạn chế là việc lập lịch và phân hoạch được thực hiện lúc chạy chương trình sẽ làm giảm hiệu xuất của hệ thống
2 Compile Time Partitioning and Run Time Scheduling Đây là mô hình
chung để xây dựng chương trình dịch cho những đa bộ xử lý Lập lịch phân việc được thực hiện lúc chương trình chạy, nhưng việc phân hoạch công việc thành các khối được thực hiện bởi người lập trình và chương trình dịch Theo cách tiếp cận này, sự đồng bộ hóa các tiến trình và truyền thông phải được xác định rõ trong hệ thống
3 Compile Time Partitioning and Compile Time Scheduling Phân hoạch
công việc và lập lịch được thực hiện ở giai đoạn dịch chương trình Do vậy, chương trình dịch loại này đòi hỏi phải rất hoàn hảo Nhưng điều này khá khó, bởi vì rất khó đánh giá được thời gian thực hiện chương trình, đặc biệt
là vấn đề lập lịch trước sẽ không thể thực hiện tối ưu được
Nói chung, cho đến hiện nay khá nhiều chương trình dịch cho các máy tính song song được xây dựng là cho ngôn ngữ lập trình Fortran
Ví dụ chương trình dịch Paraphrase (do Kuck viết năm 1984) cho máy tính
Cedar Multiprocessor được phát triển ở Đại học Illinois, sử dụng đồ thị độc lập dữ liệu để biến đổi chương trình Fortran từ dạng tuần tự sang dạng thích hợp để thực hiện song song Chương trình dịch này thực hiện theo hai giai đoạn:
Trang 21Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
1 Giai đoạn 1: thực hiện biến đổi độc lập với máy tính, chuyển chương
trình sang dạng trung gian thể hiện được dạng song song của mã chương trình
2 Giai đoạn 2: thực hiện ánh xạ để chuyển từ dạng trung gian sang kiến
trúc song song của máy tính
Chương trình dịch Paraphrase được sử dụng khá thành công trên máy tính máy tính các bộ xử lý vector như Cray X/MP, khai thác tốt các khả năng song song
của chương trình Fortran
Một ví dụ khác là chương trình dịch song song Fortran D (Fox xây dựng năm
1991, Hiranandani cải tiến 1992, 1993) Fortran D mở rộng của Fortran, trong đó cho phép người lập trình xác định được sự phân rã dữ liệu của chương trình song song Hai vấn đề: ánh xạ sử dụng phương pháp gán mảng và ánh xạ sử dụng phân
rã, phân tán dữ liệu đã được giải quyết hiệu quả trong Fortran D
Hệ điều hành là một chương trình làm nhiệm vụ phối hợp các hoạt động của máy tính Hệ điều hành thực hiện các chức chính sau:
Khởi động hệ thống
Phân đoạn chương trình và lập lịch cho các tiến trình
Trao đổi và đồng bộ hóa các tiến trình
Quản lý và điều hành hệ thống, v.v
Về mặt khái niệm, mục đích chính của hệ điều hành cho máy tính đơn bộ xử lý
có một chút khác với những hệ cho máy tính đa bộ xử lý Trong hệ điều hành tập
trung (đơn bộ xử lý), mọi quyết định được thực hiện dựa trên sự hiểu biết về trạng
thái tổng thể và tức thời của cả hệ thống Ngược lại, hệ điều hành đa bộ xử lý có thể thực hiện mà không cần thiết phải biết trước về trạng thái của hệ thống phân tán Nhiệm vụ chính của hệ điều hành đa bộ xử lý là tích hợp các tài nguyên tính toán và các bộ xử lý trao đổi với nhau thông qua mạng liên kết để tạo thành một hệ thống nhất làm việc cho hiệu quả
Nói chung, hệ điều hành đa bộ xử lý cũng giống như hệ điều hành tập trung, phải chứa các thành phần quản trị hệ thống như: quản trị các tiến trình, quản trị bộ
Trang 22Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
nhớ, quản trị tài nguyên và quản trị các tệp (file) Người ta phân các hệ điều hành cho các máy tính song song thành ba loại:
1 Những hệ điều hành mở rộng và phát triển từ những hệ đơn bộ xử lý để chạy được trên những kiến trúc song song, như VMS, UNIX
2 Những hệ điều hành được thiết kế riêng cho những kiến trúc song song, như: hệ Hydra cho C.mmp, Medusa cho Cm*, cả hai đều được phat triển ở Carnegie-Mellon University
3 Những hệ điều hành tổng hợp được thiết kế để cài đặt được trên những kiến trúc song song khác nhau, ví dụ MACH Multiprocessor
Hầu hết các version mới của hệ điều hành UNIX đều thực hiện trên các hệ đa
bộ xử lý Trong số đó có thể kể ra như Solaris của Sun, HP UNIX của HP, Digital UNIX của Digital, AIX của IBM, v.v Những hệ điều hành mới nhất như Window
NT của Microsoft cũng được thiết kế để chạy trên những hệ thống đa bộ xử lý
1.7 Một số ngôn ngữ lập trình song song
1.7.1 Lập trình song song với OCCAM
Occam là ngôn ngữ lập trình song song được Inmos Company phát triển năm
1988, mục đích chính là để thiết kế và cài đặt các chip được gọi là transputer
Transputer là một máy tính một chip đơn với một bộ xử lý, bộ nhớ riêng và bốn kênh vào/ra Transputer có hai loại 16 bit hoặc 32 bit với tốc độ 10 triệu phép tính /giây và mỗi kênh có khả năng truyền tải 10 megabit/giây
Chương trình Occam thường nhiều tiến trình và chúng có thể được ánh xạ sang một số các transputer bất kỳ để thực hiện song song và trao đổi dữ liệu với nhau thông qua các kênh vào/ra Nói chung số lượng các transputer trong mạng có thể tăng, hoặc giảm và chương trình có thể thực hiện mà không cần có sự thay đổi nào cả
Occam là ngôn ngữ lập trình bậc cao, được sử dụng để lập trình cho những
hệ thống gồm nhiều máy tính kết nối với nhau, hoặc các hệ phân tán Tuy nhiên, so với các ngôn ngữ lập trình bậc cao khác thì Occam còn thiếu một số đặc tính như hỗ trợ cơ chế đệ qui, định nghĩa kiểu dữ liệu hay con trỏ
Trang 23Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trong Occam, một hành động có thể thực hiện song song được gọi là một tiến trình và mỗi câu lệnh cần phải khai báo như một tiến trình Khi lập trình chúng
ta phải chỉ rõ là các tiến trình sẽ kết hợp với nhau một cách tuần tự hay song song Các tiến trình cơ bản trong Occam
Có ba tiến trình nguyên thuỷ trong Occam:
Tiến trình gán: thay đổi giá trị của các biến
Tiến trình Input: nhận dữ liệu vào từ các kênh vào (cổng vào)
Tiến trình Output: gửi dữ liệu ra các kênh ra
Ví dụ: Giả sử hai tiến trình A và B nhận các dữ liệu vào, tính bình phương của
chúng và gửi cho tiến trình C
user ? x Tiến trình A đọc dữ liệu vào cho x từ kênh user
C ! x * x Tiến trình A gửi x2 cho C
user ? y Tiến trình A đọc dữ liệu vào cho y từ kênh user
C ! y * y Tiến trình A gửi y2
cho C
Các cấu trúc điều khiển
Tiến trình trong Occam còn được xây dựng từ tổ hợp ba cấu trúc điều khiển sau để tạo ra những tiến trình phức hợp hơn
SEQ: cấu trúc tuần tự, các thành phần của các tiến trình trong đó thực hiện
lần lượt theo thứ tự và tiến trình này kết thúc khi thành phần cuối cùng kết thúc
PAR: cấu trúc song song, các thành phần của các tiến trình trong đó thực
hiện đồng thời và tiến trình này kết thúc khi tất cả các thành phần của nó kết thúc
ALT: cấu trúc tuyển chọn, chọn một trong các thành phần của các tiến
trình để thực hiện nếu nó thoả mãn điều kiện lựa chọn và tiến trình này kết thúc khi thành phần được lựa chọn kết thúc
Ngoài ra, còn có những cấu trúc điều khiển IF, gọi là tiến trình điều kiện để chọn một tiến trình thành phần khi biểu thức Boolean có giá trị true và cấu trúc lặp
Trang 24Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
WHILE, gọi là tiến trình lặp để thực hiện lặp lại tiến trình thành phần cho đến khi biểu thức điều kiện Boolean nhận giá trị true
Ví dụ: Giả sử có hai tiến trình giống nhau cùng nhận dữ liệu vào và cộng
dồn vào tổng
CHAN In1, In2:
CHAN Out1, Out2:
VAR Sum1, Sum2:
SEQ
Sum1:= 0 Sum2:= 0 PAR
Tiến trình thứ nhất While TRUE
VAR Item1:
SEQ
In1 ? Item1 Sum1:= Sum1 + Item1 Out1 ! Sum1
Tiến trình thứ hai While TRUE
VAR Item1:
SEQ
In2 ? Item2 Sum2:= Sum2 + Item2 Out2 ! Sum2
Sự trao đổi giữa các tiến trình
Trong ví dụ trên, các tiến trình không cần trao đổi với nhau vì mỗi tiến trình đều sử dụng các biến cục bộ của riêng mình Khi có nhiều tiến trình muốn trao đổi
dữ liệu với nhau thì phải trao đổi với nhau trên cùng một kênh truyền dữ liệu Một
Trang 25Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
tiến trình gửi dữ liệu ra một kênh truyền và tiến trình kia nhận dữ liệu từ kênh đó Trong chương trình Occam, mỗi tiến trình thực hiện trên một bộ xử lý và truyền thông điệp tới những bộ xử lý lân cận theo kiến trúc hình khối (hình 2-8)
Ví dụ: chương trình đơn giản trong Occam để tính số sử dụng tích phân của đường cong 4/(1+x2) trong khoảng 0 và 1 Các dòng 1-3 định nghĩa các hằng N
là số các đoạn con tối đa để tính tích phân, PROCESS là số các tiến trình được tạo
ra và CHUNK lá số đoạn giao cho mỗi tiến trình Trong các dòng 6-17 thì các tiến trình thực hiện song song và sau đó, tiến trình cuối cùng thực hiện các lệnh từ 18-31
6 PAR i = [0 FOR PROCESS]
7 REAL64x, localsum, width:
9 localsum:= 0.0
10 width:= 1.0 / N
11 x:= ((i * CHUNK) + 0.5) * width
12 SEQ i = [0 FOR CHUNK]
Trang 26Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
27 ALT i = [0 FOR PROCESS]
28 (got[i] = FALSE) & sum’i]? Y
30 pi:= pi + y
31 output ! “So Pi gần đúng là: “; pi
1.7.2 Lập trình song song với PVM
Phần này chúng ta giới thiệu tóm tắt cách phát triển các chương trình song song thực hiện trên những máy tính nối mạng trong môi trường UNIX, hoặc mạng LAN PVM là hệ thống cho phép một tuyển tập các trạm máy tính không thuần nhất
và các máy tính kết nối với nhau để xử lý song song Nó có những đặc tính chính:
Thực hiện theo mô hình truyền thông điệp tường minh
Hỗ trợ sự kết nối không thuần nhất: PVM hỗ trợ sự kết hợp của các máy tính, mạng máy tính và nhiều loại chương trình ứng dụng
Hỗ trợ đa bộ xử lý: PVM sử dụng những khả năng truyền thông điệp trong
hệ đa bộ xử lý để khai thác hết khả năng của phần cứng
Tính toán dựa trên tiến trình: Đơn vị điều khiển thực hiện song song trong PVM là một tác vụ, đó là một luồng (Thread) làm nhiệm vụ điều khiển sự truyền thông và tính toán
Thay đổi cấu hình theo yêu cầu: Các chương trình có thể thực hiện trên tập các máy được lựa chọn theo yêu cầu của NSD
PVM xử lý tất cả các vấn đề định tuyến truyền thông điệp, chuyển đổi dữ liệu, lập lịch trong mạng máy tính Hệ thống PVM gồm hai thành phần chính:
Khối pvmd hoặc pvm3 đặt thường trú trên tất cả các máy tính để tạo ra máy ảo
Trang 27Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Thư viện các chương trình con giao diện của pvm: chứa các chương trình con để truyền thông điệp, quản lý các tiến trình, phối hợp các tác vụ và thay đổi các máy ảo
Mô hình tính toán của PVM được xác định như hình 1.7 và một dạng kiến trúc
Nhập dữ liệu và phân đoạn
Xuất dữ liệu và hiển thị kết quả
Trang 28Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Phương thức thực hiện chương trình trong PVM như sau:
Những chương trình viết bằng C/C++, Fortran 77 có thể chứa những lời gọi các hàm thự viện của PVM Đây là những ngôn ngữ lập trình được PVM hỗ trợ
Các chương trình được dịch theo kiến trúc của hệ thống (host pool), các tệp
mã đích (object file) được đặt vào những nơi mà mọi máy tính đều truy cập được
NSD tạo ra một bản sao của tác vụ chủ (master) hoặc khởi động một tác
vụ Một tiến trình được bởi động bởi một tiến trình khác được gọi là tiến
trình tớ (slave) Những tiến trình này thực hiện một số tính toán cục bộ và
trao đổi với nhau để giải quyết bài toán đặt ra
Ví dụ: Chương trình in ra màn hình định danh của tác vụ (số nguyên) nhận được từ pvm_myid(), sau đó sử dụng:
pvm_spawn() để tạo ra một bản sao và gọi chương trình hello_other
pvm_recv() để nhận thông điệp
pvm_exit() để kết thúc chương trình trong PVM
pvm_parent() nhận một tác vụ của tiến trình tớ từ tiến trình chủ
pvm_initsend() khởi tạo buffer để gửi
pvm_pkstr() đặt một xâu vào buffer để gửi đi
pvm_upkstr() đọc một xâu vào buffer
pvm_send() chuyển dữ liệu ở buffer tới tiến trình nhận được xác định bởi ptid
/* Chương trình chủ có tên Hello.c */
#include “pvm3.h”
main(){
int cc, tid, msg;
char buf[100];
printf(“Master ID number %x\n”, pvm_mytid());
cc = pvm_spawn(“Hello_other”, (char**)0, 0, “”, 1, &tid);
if(cc== 1){
msg = 1;
Trang 29Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
pvm_recv(tid, msg);
pvm_upkstr(buf);
printf(“From master %x: %s\n”, tid, buf);
} else printf(“Cannot start hello_other\n”);
Kết luận: Nội dung chính của chương 1 đã giới thiệu các kiến thức cơ bản
nhất về vấn đề xử lý song song, các mô hình của máy tính song song cũng như khái niệm về thuật toán song song và nguyên tắc đánh giá độ phức tạp thuật toán Các
kiến thức này làm nền tảng cho việc nghiên cứu các chương tiếp sau của luận văn
Trang 30Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Chương 2 CÁC THUẬT TOÁN TỐI ƯU TRÊN MÔ HÌNH ĐỒ THỊ
2.1 Một số khái niệm đồ thị
2.1.1 Mô hình đồ thị
Giả sử V là tập hữu hạn, không rỗng các phần tử nào đó Bộ G = (V,E) được gọi là đồ thị hữu hạn Mỗi phần tử của V gọi là một đỉnh và mỗi phần tử u = (x,y) của E được gọi là một cạnh của đồ thị G = (V,E)
Xét một cạnh u của E khi đó tồn tại hai đỉnh x, y của V sao cho u = (x,y), ta nói rằng x nối với y hoặc x và y phụ thuộc u
- Nếu u = (x,x) thì u là cạnh có hai đỉnh trùng nhau ta gọi đó là một khuyên
- Nếu u = (x,y) mà x, y là cặp đỉnh có phân biệt thứ tự hay có hướng từ x đến y thì u là một cung, khi đó x là gốc còn y là ngọn hoặc x là đỉnh ra, y là đỉnh vào
Trong thực tế ta có thể gặp nhiều vấn đề mà có thể dùng mô hình đồ thị để biểu diễn, như sơ đồ mạng máy tính, sơ đồ mạng lưới giao thông, sơ đồ thi công một công trình
Định nghĩa 1 Đơn đồ thị vô hướng là tập G = (V,E) trong đó V là các tập
đỉnh và E là các tập các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi
là các cạnh
Định nghĩa 2 Đa đồ thị vô hướng G = (V,E) bao gồm V là tập các đỉnh, và E
là họ các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh Hai cạnh e 1 và e 2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh
Rõ ràng mỗi đơn đồ thị là đa đồ thị, nhưng không phải đa đồ thị nào cũng là đơn đồ thị, vì trong đa đồ thị có thể có hai (hoặc có nhiều hơn) cạnh nối một cặp đỉnh nào đó
Trang 31Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Hình 2.1 Sơ đồ mạng máy tính với đa kênh thông báo
Trong thực tế, các mạng máy tính có thể có những kênh thoại nối một máy nào
đó với chính nó (chẳng hạn với mục đích thông báo) Mạng như vậy được cho trong hình 4 Khi đó đa đồ thị không thể mô tả được mạng như vậy, bởi vì có những khuyên (cạnh nối một đỉnh với chính nó) Trong trường hợp này chúng ta cần sử
dụng đến khái niệm giả đồ thị vô hướng, được định nghĩa như sau
Định nghĩa 3 Giả đồ thị vô hướng G = (V,E) bao gồm V là các tập đỉnh, và E
là họ các cặp không có thứ tự (không nhất thiết phải khác nhau) của V gọi là các cạnh Cạnh e được gọi là khuyên nếu nó cú dạng e = (u,u)
Các kênh thoại trong mạng máy tính có thể chỉ cho phép truyền tin theo một
chiều Chẳng hạn trong hình 2.2 máy chủ ở a chỉ có thể nhận tin từ các máy ở máy
khác, có một số máy chỉ có thể gửi tin đi, còn các kênh thoại cho phép truyền tin theo cả hai chiều được thay thế bởi hai cạnh có hướng ngược chiều nhau
Hình 2.2 Mạng máy với các kênh thoại một chiều
Trang 32Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Ta đi đến định nghĩa sau
Định nghĩa 4 Đơn đồ thị có hướng G = (V,E) bao gồm V là các tập đỉnh và E
là các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung
Nếu trong mạng có thể có đa kênh thoại một chiều, ta sẽ phải sử dụng đến khái
niệm đa đồ thị có hướng:
Định nghĩa 5 Đa đồ thị có hướng G = (V,E) bao gồm V là các tập đỉnh và E
là họ các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung Hai cung
e 1 , e 2 tương ứng cùng với một cặp đỉnh được gọi là cung lặp
Trong các phần tử tiếp theo chủ yếu chúng ta sẽ làm việc với đơn đồ thị vô hướng và đơn đồ thị có hướng Vì vậy, để ngắn gọn, ta bỏ qua tính từ đơn khi nhắc đến chúng
2.1.2 Các khái niệm cơ bản
Trong phần này chúng ta sẽ trình bày một số thuật ngữ cơ bản của lý thuyết đồ thị
Định nghĩa 1 Hai đỉnh u và v của đồ thị vô hướng G được gọi là kề nhau nếu
(u,v) là cạnh của đồ thị G Nếu e = (u,v) là cạnh của đồ thị thì ta nói cạnh này là liên thuộc với hai đỉnh u và v, hoặc cũng nói là cạnh e là nối đỉnh u và đỉnh v, đồng thời các đỉnh u và v sẽ được gọi là các đỉnh đầu của cạnh (u,v)
Định nghĩa 2 Ta gọi bậc của đỉnh v trong đồ thị vô hướng là số cạnh liên
thuộc với nó và sẽ ký hiệu là deg(v)
Đỉnh bậc 0 gọi là đỉnh cô lập Đỉnh bậc 1 gọi là đỉnh treo
Định lý 1 Giả sử G = (V,E) là đồ thị vô hướng với m cạnh Khi đó:
Chứng minh Rõ ràng mỗi cạnh e = (u,v) được tính một lần trong deg(u) và
một lần trong deg(v) Từ đó suy ra tổng tất cả các bậc của các đỉnh bằng hai lần
Trang 33Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Chứng minh Thực vậy gọi V 1 và V 2 tương ứng là tập chứa các đỉnh bậc lẻ và tập chứa các đỉnh bậc chẵn của đồ thị Ta có
Do deg(v) chẵn với v là đỉnh trong U nên tổng thứ hai trong vế phải ở trên là
số chẵn Từ đó suy ra tổng thứ nhất (chính là tổng bậc của các đỉnh lẻ) cũng phải là
số chẵn, do tất cả các số hạng của nó sẽ là số lẻ nên tổng này phải gồm một số chẵn các số hạng Vì vậy số đỉnh bậc lẻ phải là số chẵn
Ta xác định thuật ngữ tương tự cho đồ thị có hướng
Định nghĩa 3 Nếu e = (u,v) là cung của đồ thị có hướng G thì ta nói hai đỉnh
u và v là kề nhau, và nói cung (u,v) nối đỉnh u với đỉnh v hoặc cũng nói cung này là
đi ra khỏi đỉnh u và đi vào đỉnh v Đỉnh u(v) sẽ được gọi là đỉnh đầu (cuối) của cung (u,v)
Định nghĩa 4 Ta gọi bán bậc ra (bán bậc vào) của đỉnh v trong đồ thị có
hướng là số cung của đồ thị đi ra khỏi nó (đi vào nó) và ký hiệu là deg +
(v)(deg - (v))
Hình 2.3 Đồ Thị có hướng G
Thí dụ 3 Xét đồ thị cho trong hình 2.3 Ta có
deg - (a) = 1, deg - (b) = 2, deg - (c) = 2, deg - (d) = 2, deg - (e) = 2
deg + (a) = 3, deg + (b) = 1, deg + (c) = 1, deg + (d) = 2, deg + (e) = 2
Do mỗi cung (u,v) sẽ được tính một lần trong bán bậc vào của đỉnh v và một lần trong bán bậc ra của đỉnh u nên ta có:
Định lý 2 Giả sử G = (V,E) là đồ thị có hướng Khi đó
Trang 34Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
2.1.3 Đường đi, chu trình Đồ thị liên thông
Định nghĩa 1 Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên
dương, trên đồ thị vô hướng G = (V E, )là dãy x x0, 1, ,x n-1,x n trong
đó u = x v0, = x v n, = ( ,x x i i+1) Î E i, = 0,1, 2, ,n - 1
Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cạnh:
( ,x x ),( ,x x ), ,(x n- ,x n)
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi có
đỉnh đầu trùng với đỉnh cuối (tức là u = v) được gọi là chu trình Đường đi hay chu
trình được gọi là đơn nếu như không có cạnh nào bị lặp lại
Khái niệm đường đi và chu trình trên đồ thị có hướng được định nghĩa hoàn toàn tương tự như trường hợp đồ thị vô hướng, chỉ khác là ta có chú ý đến hướng trên các cung
2.1.4 Cây và cây khung của đồ thị
Định nghĩa 1: Cây là một đồ thị vô hướng liên thông, không chứa chu trình và
có ít nhất hai đỉnh
Định nghĩa 2: Trong đồ thị liên thông G, nếu ta loại bỏ cạnh nằm trên chu
trình nào đó thì ta sẽ được đồ thị vẫn là liên thông Nếu cứ loại bỏ các cạnh ở các chu trình khác cho đến khi nào đồ thị không còn chu trình (vẫn liên thông) thì ta thu
được một cây nối các đỉnh của G Cây đó gọi là cây khung hay cây bao trùm của đồ thị G
Định nghĩa 5: Một cây có gốc T được gọi là cây m-phân nếu mỗi đỉnh của T
có nhiều nhất là m con Với m=2, ta có một cây nhị phân
2.2 Mô hình các bài toán tối ƣu
2.2.1 Bài toán cây khung nhỏ nhất
Bài toán cây khung nhỏ nhất của đồ thị là một trong số những bài toán tối ưu trên đồ thị tìm được ứng dụng trong nhiều lĩnh vực khác nhau trong đời sống Trong mục này chúng ta sẽ trình bày những thuật toán cơ bản để giải bài toán này Trước hết chúng ta phát biểu nội dung của bài toán