Thực tế có nhiều bài toán phức tạp đòi hỏi cần các siêu máy tính có kiến trúc phần cứng khổng lồ để giải quyết, điều này gây tốn kém về mặt kinh tế và thời gian thực hiện, trong khi đó c
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
BÀI THU HOẠCH MÔN TÍNH TOÁN LƯỚI
Tên đề tài :
TÍNH TOÁN SONG SONG VÀ BÀI TOÁN TÍNH
SỐ PI TRÊN MÔI TRƯỜNG PVM
Giảng viên hướng dẫn : PGS.TS Nguyễn Phi Khứ Học viên thực hiện : Trần Thị Kiều Diễm (CH1101074) Lớp : CH-CNTT K6
TP HCM, Tháng 7 - 2013
Trang 2PHẦN 4 NHẬN XÉT ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN 24
Trang 3Công nghệ thông tin từ lâu đã được ứng dụng rộng rãi vào các hoạt động nghiên cứu khoa học và tin học hóa xã hội Thực tế có nhiều bài toán phức tạp đòi hỏi cần các siêu máy tính có kiến trúc phần cứng khổng lồ để giải quyết, điều này gây tốn kém về mặt kinh tế và thời gian thực hiện, trong khi đó các máy tính thông thường thì không thể giải quyết được vì lí do bộ nhớ hạn chế chẳng hạn Vì lí do này mà một ý tưởng đã được hiện thực hóa là tận dụng nguồn tài nguyên nhàn rỗi từ nhiều máy bằng cách ghép nối các máy tính đơn với nhau thành một hệ thống và cài đặt các phần mềm đặc biệt để có thể tính toán như một máy tính song song Hệ thống này dần thay thế vai trò những siêu máy tính đắt tiền
Ngày nay, các bài toán nghiên cứu ngày càng nhiều và mức độ phức tạp ngày càng cao, do đó việc phát triển mô hình tính toán song song trong bối cảnh này là rất thiết thực, vượt qua các trở ngại của nó như phân công giữa các tiến trình, làm việc với HĐH Linux, cài đặt cấu hình môi trường PVM…để hướng tới hệ thống tính toán thế giới – Grid Computing.
Em xin chân thành cảm ơn Thầy Nguyễn Phi Khứ đã hướng dẫn tận tình giúp chúng em hoàn thành tốt bài thu hoạch cho môn học.
Trang 4Hình 1 Mô hình tính toán tuần tự trang 5Hình 2 Mô hình tính toán song song trang 5Hình 3 Mô hình kiến trúc máy tính Von Newmann trang 7Hình 4 Mô hình các loại kiến trúc máy tính của Flynn trang 8Hình 5 Minh họa tiến trình thực thi trong kiến trúc SISD trang 9Hình 6 Minh họa tiến trình thực thi với kiến trúc máy tính SIMD trang 9Hình 7 Minh họa tiến trình thực thi với kiến trúc máy tính MISD trang 10Hình 8 Minh họa tiến trình thực thi với kiến trúc máy tính MIMD trang 11Hình 9 Kiến trúc Uniform Memory Access (UMA) trang 11Hình 10 Kiến trúc Nonumiform Memory Access (NUMA) trang 11Hình 11 Kiến trúc MIMD bộ nhớ phân tán trang 12Hình 12 Mô hình đa luồng (Thread) trang 13Hình 13 Mô hình truyền thông điệp (Message Passing) trang 14Hình 14 Mô hình song song dữ liệu (Data Parallel Model) trang 16Hình 15 Mô hình lai (Hybrid Model) trang 16Hình 16 Mô hình SPMD và MPMD trang 16Hình 17 Mô hình minh họa máy ảo song song trang 21Hình 18 Mô hình minh họa trao đổi giữa các máy ảo song song trang 21
Trang 5PHẦN 1 TÍNH TOÁN SONG SONG
1.1 Khái niệm tính toán song song
— Theo cách lập trình từ trước tới nay, thông thường phần mềm được viết theo cách tính toán tuần tự, nghĩa là chương trình chạy trên một máy tính đơn có 1 CPU, một tiến trình thực hiện tại một thời điểm, tiến trình này xong sẽ tới tiến trình khác
Hình 1 Mô hình tính toán tuần tự
— Tính toán song song (Parallel Computing): Sử dụng đồng thời nhiều nguồn tính toán để giải quyết một vấn đề duy nhất, cụ thể là một vấn đề có thể:
o Được chạy bằng cách sử dụng nhiều CPU
o Được chia ra thành nhiều phần rời rạc có thể giải quyết một cách đồng thời
o Mỗi phần được tiếp tục phân chia thành một chuỗi các câu lệnh
o Những câu lệnh của mỗi phần được thi hành một cách đồng thời trên các CPU khác nhau
Hình 2 Mô hình tính toán song song
— Nguồn tài nguyên trong tính toán song song có thể là:
o Nhiều máy tính kết nối nhau qua mạng LAN hoặc WAN
o Một máy tính có nhiều CPU
o Kết hợp cả hai loại trên
1.2 Vì sao phải tính toán song song
Trang 6— Trong thực tế có nhiều bài toán đòi hỏi các phép tính phức tạp hoặc số lượng phép tính lớn với khoảng thời gian rất ngắn, hoặc những bài toán cần xử lý mà bộ nhớ một máy tính không thể đáp ứng được chẳng hạn như trong các lĩnh vực khoa học, kỹ thuật, công nghệ sinh học,…do đó việc kết hợp các máy tính lại để giải quyết các bài toán lớn và phức tạp như thế sẽ mang lại nhiều lợi ích như:
o Tiết kiệm chi phí, thay vì mua một siêu máy tính thì có thể mua nhiều máy tính với cấu hình thấp hơn nhưng khả năng giải quyết được
o Tiết kiệm thời gian khi thực hiện tính toán cùng lúc nhiều bài toán trên các máy tính được kết nối qua mạng
o Tận dụng được nhiều nguồn tài nguyên trên mạng diện rộng thậm chí cả trên Internet khi nguồn tài nguyên tại chỗ không đáp ứng được
o Khắc phục được nhược điểm của việc tính toán tuần tự
Trang 7PHẦN 2 KIẾN TRÚC HỆ THỐNG TÍNH TOÁN SONG SONG
2.1 Phân loại các kiểu kiến trúc song song
2.1.1 Kiến trúc máy tính Von Newmann
— Các máy tính hiện nay đều xây dựng theo mô hình Von Newmann (tên nhà bác học John Von Newmann) Máy tính Von Newmann sử dụng khái niệm chương trình đã được lưu trữ sẵn
— CPU chạy một chương trình đã được lưu trữ sẵn, trong đó chỉ rõ các chuỗi thao tác đọc và ghi trên bộ nhớ
— Theo Von Newmann, một máy tính bao gồm 4 thành phần chính: bộ nhớ (Memory), bộ xử lý số học (Arithmetic Logic Unit), bộ điều khiển (Control Unit), thiết bị nhập/xuất
Hình 3 Mô hình kiến trúc máy tính Von Newmann
o Bộ nhớ đọc ghi ngẫu nhiên lưu trữ các lệnh chương trình và dữ liệu khi thực thi, lệnh chương trình (Program Instruc8on) được mã hóa dữ liệu để yêu cầu máy tính làm điều gì đó, còn dữ liệu (Data) đơn giản chỉ là thông tin được sử dụng bởi chương trình
o Control Unit: lấy các lệnh chương trình và dữ liệu từ bộ nhớ, giải mã câu lệnh rồi phối hợp một cách tuần tự các phép toán, các thao tác để hoàn thành nhiệm vụ được lập trình sẵn
o Arithmetic Logic Unit: thực hiện các phép toán số học và luận lý cơ bản
o Input/Output: nhằm giao tiếp với người sử dụng hoặc thiết bị ngoại
Trang 8— Kiến trúc máy tính song song vẫn giữ nguyên kiến trúc cơ bản này, chỉ nhân số bộ phận Unit lên nhiều lần, những phần kiến trúc nền tảng vẫn giữ nguyên như kiến trúc máy tính tuần tự
2.1.2 Phân loại kiến trúc máy tính của Flynn
— Có nhiều cách để phân loại máy tính song song, một trong những phân loại được sử dụng rộng rãi từ năm 1966 đó là phân loại Flynn
— Phân loại Flynn phân biệt kiến trúc máy tính song song theo cách phân lớp theo số trạng thái có thể của câu lệnh và dữ liệu Số trạng thái là Single hay Multiple
Hình 4 Mô hình các loại kiến trúc máy tính của Flynn
a) Kiến trúc đơn lệnh- đơn dữ liệu (Single Intruction- Single Data)
• Là một máy tính tuần tự (non - Parallel) Là loại máy tính lâu đời
và cũng là loại máy tính phổ biến nhất ngày nay chẳng hạn như các máy tính PC dùng cho cá nhân, máy trạm,…
• Single Intruction: một dòng câu lệnh được tác động bởi CPU trong suốt một chu kỳ đồng hồ
Trang 9Hình 5 Minh họa tiến trình thực thi trong kiến trúc SISD
• Single Data: chỉ một dòng dữ liệu được dùng như đầu vào trong suốt một chu kỳ đồng hồ
b) Kiến trúc đơn lệnh- đa dữ liệu (Single Instruction-Multiple Data)
• Là máy tính song song phù hợp để giải quyết những bài toán chuyên đòi hỏi tốc độ xử lý cao như bài toán đồ thị, xử lý ảnh,…
• Single Instruction: tất cả các đơn vị xử lý thực hiện cùng lệnh ở bất
cứ chu kỳ nhất định nào
• Multiple Data: mỗi đơn vị xử lý có thể hoạt động trên một phần tử
dữ liệu khác nhau
Hình 6 Minh họa tiến trình thực thi với kiến trúc máy tính SIMD
• Có hai loại biến thể của loại kiến trúc này là Proccesor Arrays (Connection Machine CM-2,MasPar MP-1 & MP-2, ILLIAC IV) và Vector Pipelines (IBM 9000, Cray X-MP, Y-MP & C90, Fujitsu VP, NEC SX-2, Hitachi S820, ETA10)
c) Kiến trúc đa lệnh – đơn dữ liệu (Multiple Instruction, Single Data)
• Là loại máy tính song song, tuy nhiên không tồn tại loại máy tính này bao giờ mà nó chỉ dừng ở mức thử nghiệm, một trong số đó là máy tính Carnegie-Mellon C.mmp (1971)
• Multiple Instruction: mỗi đơn vị xử lý hoạt động trên dữ liệu độc lập thông qua dòng câu lệnh riêng biệt
• Single Data: dòng dữ liệu duy nhất được đưa vào nhiều đơn vị xử lý
Trang 10Hình 7 Minh họa tiến trình thực thi với kiến trúc máy tính MISD
d) Kiến trúc đa lệnh - đa dữ liệu (Multiple Instruction- Multiple Data)
• Là loại máy tính song song
• Multiple Instruction: mỗi bộ xử lý có thể thi hành dòng câu lệnh khác nhau
• Multiple Data: mỗi bộ xử lý có thể làm việc với dòng dữ liệu khác nhau
• Hiện tại, đây là loại máy tính song song hiện đại nhất, phổ biến nhất, bao gồm các loại siêu máy tính hiện đại, các máy tính kết nối mạng theo cụm và lưới (clusters and grids), máy tính đa xử lý đối xứng (multi-processor SMP), các máy tính multi-core PCs Ngoài ra, kiến trúc máy tính này còn bao gồm nhiều kiến trúc con SIMD
Hình 8 Minh họa tiến trình thực thi với kiến trúc máy tính MIMD
• Kiến trúc MIMD chia sẻ bộ nhớ: Việc truy cập có thể đồng bộ (Uniform Memory Access) hay không đồng bộ (Nonumiform Memory Access), xác định hay không xác định
Uniform Memory Access (UMA): phổ biến trong loại máy này là các máy đa bộ xử lý đối xứng (Symmetric Multi Processor: SMP), các bộ xử lý đồng
Trang 11nhất, độ ưu tiên và thời gian truy cập tới bộ nhớ là như nhau.
Hình 9 Kiến trúc Uniform Memory Access (UMA)
Nonumiform Memory Access (NUMA): một máy tính loại NUMA thường được tạo ra bằng cách liên kết về mặt vật lý hai hoặc nhiều máy SMP
Hình 10 Kiến trúc Nonumiform Memory Access (NUMA)
Hệ thống phân phối bộ nhớ đòi hỏi phải có mạng truyền thông để kết nối bộ nhớ liên xử lý
Ưu điểm: bộ nhớ có thể mở rộng với số bộ xử lý, không có nhiễu
sóng bộ nhớ hoặc chi phí để duy trì sự liên lạc giữa các bộ nhớ cache, chi phí hiệu quả
Nhược điểm: lập trình viên chịu trách nhiệm về dữ liệu truyền
thông giữa các bộ vi xử lý, khó để lập bản đồ cấu trúc dữ liệu hiện có để tổ chức bộ nhớ này
• Kiến trúc MIMD bộ nhớ phân tán: được sử dụng cho máy tính lớn nhất và nhanh nhất hiện nay Hệ thống bộ nhớ phân tán đòi hỏi có một mạng giao tiếp
để kết nối giữa bộ nhớ của các bộ xử lý, mỗi bộ nhớ có một địa phương riêng, hoạt động độc lập, khi một bộ xử lý muốn truy cập tới dữ liệu trong bộ xử lý khác, nhiệm
vụ người lập trình là chỉ ra cách để truyền dữ liệu bằng cách nào và khi nào và thực hiện đồng bộ hóa các task Nó cũng có một một số ưu điểm và nhược điểm như sau:
Ưu điểm: khi tăng bộ xử lý thì cũng tăng bộ nhớ tương ứng, mỗi bộ
xử lý nhanh chóng truy cập tới bộ nhớ riêng mà không cần được can thiệp và chi phí
Nhược điểm: người lập trình phải can thiệp nhiều vào quá trình
Trang 12truyền dữ liệu, dữ liệu từ bộ nhớ toàn cục phải được ánh xạ vào bộ nhớ cục bộ, thời gian truy cập bộ nhớ không đồng nhất.
Hình 11 Kiến trúc MIMD bộ nhớ phân tán
2.2 Các mô hình lập trình song song (Parallel Programming Model)
2.2.1 Mô hình Shared Memory (không có Threads)
— Trong mô hình lập trình này, các task chia sẻ không gian địa chỉ chung
mà các task đọc ghi dữ liệu bất đồng bộ, người lập trình không cần chỉ định việc truyền
dữ liệu giữa các task mà sử dụng các cơ chế khác nhau như locks/semaphores để kiểm soát việc truy cập đến các Share Memory, sử dụng các trình biên dịch có sẵn của hệ thống, các phần cứng và phần mềm được đặc tả toàn cục còn bộ nhớ thì được chia sẻ một cách vật lý thông qua mạng Một nhược điểm trong mô hình này là do nhiều bộ xử
lý dùng chung dữ liệu nên khó giữ được tính nguyên thủy của dữ liệu
2.2.2 Mô hình đa luồng (Thread)
— Trong mô hình lập trình song song đa luồng, một tiến trình có thể có rất nhiều luồng xử lý Mỗi luồng có thể được coi là một thủ tục con của chương trình chính và được thực hiện song song cùng các luồng khác, các luồng giao tiếp với nhau thông qua vùng nhớ toàn cục Điều này đòi hỏi có một cơ chế đồng bộ giữa các luồng nhằm tránh xung đột trong truy cập bộ nhớ, các luồng có thể sinh ra hay kết thúc nhưng chương trình chính thì vẫn tồn tại cho đến khi hoàn thành công việc Mô hình này thường gắn với các kiến trúc chia sẻ bộ nhớ (SMP) Mỗi Thread có thể có dữ liệu địa phương nhưng cũng có thể chia sẻ toàn bộ dữ liệu của chương trình chính nhằm tiết kiệm chi phí liên quan đến việc sử dụng lại tài nguyên cho mỗi Thread Người lập trình theo mô hình này thường sử dụng các thư viện lập trình đa luồng như Open MP hoặc
Trang 13sử dụng các chỉ thị trực tiếp trong chương trình.
Hình 12 Mô hình đa luồng (Thread)
2.2.3 Mô hình truyền thông điệp (message passing)
— Truyền thông điệp là mô hình được sử dụng rộng rãi trong tính toán song song hiện nay Thường áp dụng cho hệ thống phân tán, một chương trình theo mô hình này bao gồm nhiều chương trình chạy trên các nút với chuỗi lệnh và bộ nhớ riêng Mỗi chương trình con có một định danh duy nhất và chúng tương tác với nhau bằng việc gửi và nhận thông điệp trên các định danh Việc truyền dữ liệu thường yêu cầu có
sự hợp tác giữa các tiến trình, sử dụng các hàm thư viện có sẵn để hiện thực thao tác chuyển thông điệp, các hàm này được gọi trong chương trình, người lập trình chịu trách nhiệm xác định sự song song của giải thuật Phương pháp này được sử dụng rất rộng rãi trên thế giới, hiện nay có hai thư viện truyền thông điệp được sử dụng là PVM
và MPI
Trang 14Hình 13 Mô hình truyền thông điệp (Message Passing)
2.2.4 Mô hình song song dữ liệu (Data Parallel Model)
— Các phần việc song song tập trung vào việc thực hiện xử lý trên một tập dữ liệu Tập dữ liệu thường được tổ chức theo cấu trúc thông thường như mảng một chiều hay mảng nhiều chiều Tập các tác vụ (task) cùng làm việc trên một cấu trúc
dữ liệu, tuy nhiên mỗi tác vụ làm việc với một phần khác nhau của cấu trúc dữ liệu đó Với kiến trúc bộ nhớ chia sẻ, các tác vụ có thể truy cập vào cùng một cấu trúc dữ liệu thông qua bộ nhớ toàn cục, trên kiến trúc bộ nhớ phân tán, cấu trúc dữ liệu này được chia ra thành từng phần và nằm trên phần bộ nhớ cục bộ của mỗi tác vụ Lập trình với
mô hình song song dữ liệu thường được thực hiện bằng cách viết một chương trình với một cấu trúc song song dữ liệu (Data Parallel Construct) Cấu trúc này có thể gọi đến thư viện chương trình con song song hoặc những chỉ thị biên dịch được chấp nhận bởi trình biên dịch song song Việc song song hoá dữ liệu được thực hiện với sự hỗ trợ của các trình dịch
Hình 14 Mô hình song song dữ liệu (Data Parallel Model)
2.2.5 Mô hình lai (Hybrid Model)
— Là sự kết hợp các mô hình đã mô tả trước đây chẳng hạn như kết hợp
mô hình chuyển thông điệp MPI và mô hình Threads (OpenMP) Các Thread thực hiện tính toán dùng dữ liệu địa phương của node tính toán và khi truyền dữ liệu giữa các tiến trình trên những node khác nhau thì dùng MPI
Trang 15Hình 15 Mô hình lai (Hybrid Model)
2.2.6 Mô hình SPMD và MPMD
Hình 16 Mô hình SPMD và MPMD
— Mô hình SPMD – Single Program Multiple Data: đây là mô hình lập trình cấp cao, có thể được xây dựng dựa trên tổ hợp tùy ý của các mô hình lập trình trên Trong mô hình này, tất cả các task thi hành bản sao của cùng chương trình một cách đồng thời và có thể sử dụng dữ liệu khác nhau Chương trình này có thể là Thread, message passing, data parallel hay hybrid
— Mô hình MPMD – Multiple Program Multiple Data: các task có thể thi hành các chương trình khác nhau một cách đồng thời cũng giống như SPMD, nó tốt hơn SPMD ở chỗ giải quyết các bài toán mà có sự phân ly các task theo chức năng
2.3 Thiết kế chương trình song song
2.3.1 Việc song song hóa
— Việc thiết kế và phát triển các chương trình song song là một quá trình thực hiện thủ công, người lập trình thường phải chịu trách nhiệm cho việc nhận và hiện