MỤC LỤC
Mục Lục
Lời nói đầu
Phần 1 Tổng quan về tính toán song song
Giới thiệu về tính toán song song……………………… 5
Định nghĩa tính toán song song…………………………………. 5
Nhu cầu về tính toán song song…………………………………. 5
Sự phát triển của lập trình song song ngày nay……………….. 6
Phân loại kiến trúc máy tính song song………………………… 7
Các giải thuật song song……………………………………….. 10
Mô hình lập trình…………………………………………. 11
Kiến trúc siêu máy tính của Beowulf………………………….. 12
Thư viện lập trình……………………………………………….
54 trang |
Chia sẻ: huyen82 | Lượt xem: 1667 | Lượt tải: 0
Tóm tắt tài liệu Hệ quản lý tài nguyên & phân tải, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
13
Thư viện truyền thông MPI…………………………….. 13
Cấu trúc chương trình………………………………………….. 13
Một số kiểu dữ liệu được dùng………………………………… 14
Các hàm cơ bản…………………………………………………. 14
Phần 2 Hệ quản lý tài nguyên và phân tải
Mục đích và nhiệm vụ của hệ quản lý tài nguyên và phân tải ………………………………………………… 19
Hệ thồng quản lý tài nguyên và phân tải …………. 21
Một số khái niêm cơ bản …………………………………… 21
Một số dặc trưng cơ bản …………………………………… 22
Các phân hệ trong PBS ……………………………………… 23
Phân hệ quản lý công việc PBS_Server …………………... 23
Phân hệ lập lịch PBS_Sheduler …………………………… 24
Phân hệ quản lý tài nguyên và thực thi công việc PBS_Mom 26
Hoạt động của hệ thống ………………………………………… 29
Giao tiếp giữa PBS_Server và PBS_Sheduler …………… 30
Giao tiếp giữa PBS_Sheduler và PBS_Mom ……………. 31
Giao tiếp giữa PBS_Server và PBS_Mom ……………. 31
Sự đóng gói dữ liệu và truyền thông ……………………… 32
5.1 Các đặc tả của chuẩn ASN.1 về định dạng dữ liệu …..… 33
5.2 Phương pháp mã hoá DIS ………………………………. 38
Một số kết quả đã đạt được và định hướng phát triển
40
Một số kết quả trung tâm đã đạt được ………………………………... 41
Định hướng phát triển …………………………………………………... 41
Phần 3 Tìm hiểu về chương trình debugger
Debugger Interface………………………………………. 43
Khái niêm Parallel Debugger………………………………….. 43
Cách thức hoạt động của chương trình debugger……………. 44
Giao diện………………………………………………………… 45
Debugger Output……………………………………………….. 45
Hiệu ứng của sự song song trong quá trình debugger
Tên của các tiến trình và các luồng……………………………. 46
Tập các tiến trình và các luồng………………………………… 47
Tập tên…………………………………………………………... 48
High Performance Debugger Version 1……………… 48
Giới thiệu về nhóm HPDF……………………………………… 48
High Performance Debugger Version 1……………………….. 49
Giao diên………………………………………………….. 49
Khởi tạo…………………………………………………… 50
ActionPoints………………………………………………. 51
Đặc tả lệnh………………………………………………... 51
LỜI NÓI ĐẦU
Công nghệ tính toán song song phân cụm là một trong những công nghệ hàng đầu đuợc sử dụng trong môi trường tính toán phân tán hiệu năng cao. Đặc biệt, trong thời đại bùng nổ của khoa học kỹ thuật với nhiều công nghệ tiên tiến liên tục ra đời, công nghệ tính toán song song phân cụm ngày càng chứng tỏ ưu thế so với các công nghệ tính toán cổ điển. Các bài toán khoa học kỹ thuật ngày nay, có quy mô ngày một lớn, đòi hỏi phải có sức mạnh tính toán cực lơn mới có thể đáp ứng được. Điều đó có thấy rõ khi điểm qua danh sách các siêu máy tính hàng đầu thế giới. Trong số 500 siêu máy tính thì phần lớn được xây dựng dựa trên công nghệ phân cụm .
Trong đợt thực tập này em đã có điều kiện làm quen với môi trường tính toán song song phân cụm. Và báo cáo này chính là kết quả tổng hợp những kiến thức em đã thu nhận được sau đợt thực tập này. Yêu cầu của đợt thực tập là tìm hiểu về tính toán song phân cụm từ đó xây dựng chương trình debugger cho hệ thông tính toán song song phân cụm. Báo cáo được chia làm ba phần
Phần 1 Tông quan về tính toán song song. Đây là kết quả của tuân làm việc đầu tiên trên trung tâm. Phần này trình bày những khái niệm cơ bản về hệ thống tính toán song song phân cụm, đồng thời cũng giới thiệu về cách thức lập trình song song và các thư viện hỗ trợ
Phần 2 Hệ quản lý tài nguyên và phân tải. Nội dung của phần này trình bày về hệ thống quản lý tài nguyên và phân tải công việc PBS được dử dụng trong hệ thông tính toán song song phân cụm
Phần 3 Tìm hiểu về chương trình debugger. Trên cở sở những kiến thức đã thu được từ các phần trước, phần này em tiến hành tìm hiểu cách thức xây dựng một chương trình debugger cho hệ thống, đây cũng chính là mục đích chính của nhóm HPCK45.
Qua đợt thực tập em đã bước đầu làm quen với môi trường lập trình song song cả về lý thuyết lãn thực hành. Ngoài ra đợt thực tập này cũng cung cấp thêm cho em rất nhiều kinh nghiệm về làm việc theo nhóm cũng như những kinh nghiệm về cách làm việc trong thực tế sau này
Phần 1 TỔNG QUAN VỀ TÍNH TOÁN SONG SONG
Giới thiệu về tính toán song song
Định nghĩa tính toán song song
Một chương trình truyền thống được viết cho một máy tính tuần tự, chương trình nay khi chạy sẽ gồm một chuỗi các lệnh được viết liên tiếp được thực hiện tuần tự do máy tính chỉ có một bộ xử lý trung tâm nên tại một thời điểm chỉ có một lệnh được thực hiện.
Khác với lập trình tuần tự, theo dạng đơn giản nhất, tính toán song song là việc sử dụng nhiều tài nguyên tính toán để giải quyết một bài toán.Các tài nguyên tính toán có thể bao gồm một máy tính với nhiều bộ vi xử lý, một tập các máy tính kết nối mạng hay là một sự kết hợp của hai dạng trên. Đặc điểm của bài toán có thể giải quyết được bằng hệ thống tính toán song song là có thể phân ra làm nhiều bài toán con có khả năng chay song song cùng một lúc, chính vì vậy nhờ việc thực hiện song song hoá sẽ làm cho bài toán được giải quyết nhanh hơn
Nhu cầu về tính toán song song
Ngày nay nhu cầu về lập trìmh song song ngày càng trở nên cần thiết trong các vấn đề về kỹ thuật
Nếu các bạn đã từng lập trình trong với thư viện lập trình của Matlab thì chúng ta có thể thấy matlab hỗ trở rất tốt cho các thao tác làm việc với ma trận ,do đó chúng ta sẽ không gặp bất kỳ một khó khăn nao khi làm việc với các ma trận có kích thước nhỏ. Nhưng vấn đề sẽ nảy sinh khi chúng ta càn làm việc với các ma trận có kích thước lớn hay rất lớn, lúc đó các thao tác với ma trận của matlab có thể sẽ không còn tác dụng nữa do hạn chế về bộ nhớ hoặc làm việc với tốc độ rất chậm do khối lượng phép tính quá lớn.
Mọi việc cũng tương tự khi chúng ta tiến hành lập trình tuần tự theo phương pháp truyền thống.
Ngoài ra trong thực tế chúng ta còn bắt gặp các bài toán về mô phỏng thế giới thực khi đấy lượng dữ liệu vào và số lượng các phép tính là rất lớn và giải pháp sử dụng mô hình lập trình tuần tự truyền thống là hầu như không thể chấp nhận được. Trong khi đó các bài toán này nếu mô phỏng được trên máy tính sẽ tiết kiệm được rất nhiều tiền của cho việc thử nghiệm đôi khi còn rất nguy hiểm nếu tiến hành trong thực tế..
Vậy có giải pháp nào cho các vấn đề đã được nêu ở trên. Chúng ta có hai giải pháp cho vấn đề trên. Cách thứ nhất là chúng ta có thể sử dụng các siêu máy tính với rất nhiều bộ nhớ để giải quyết các thực hiện các bài toán trên, cách này tỏ ra đơn giản nhưng rất khó thực hiện trong điều kiện của đại đa số các nược trên thế giới vì giá thành của các siêu máy tính là rất cao. Cách thứ hai là chúng ta sẽ lợi dụng việc sự phát triển mạnh mẽ của mạng hiện nay để giải quyết các bài toán trên bằng cách kết nối các máy tính lại với nhau và cùng thực hiên bài toán đặt ra đây chính là ý tưởng chính của tính toán song song .
Vậy chúng ta có thể thấy rõ tính toán song song vừa giúp chúng ta giải quyết được các bài toán có số lượng phép tính lớn đồng thời cũng giải quyết được vấn để về giá thành của hệ thống phần cứng bởi vì khi sử dụng việc kết nối các máy tính chúng ta có thể sử dụng được tài nguyên của nhiều máy tính cùng một lúc và với việc các máy tính được nối mạng ngày càng rộng dãi thì việc thực hiện kết nối là tương đối dễ dàng. Ngoài ra việc lập trình song song còn giúp chúng ta khai thác được tối đa các tài nguyên của mang máy tính trên toàn thế giới .
Sự phát triển của lập trình song song ngày nay
Do lợi ích của việc sử dụng ứng dụng tính toán song song nên các nhà khoa học trên thế giới đã bắt tay vào nghiên cứu các vấn đề về lập trình song song từ những năm 60 của thế kỷ trước và cho đến nay đã đạt được những kết quả nhất định .
Ngày nay chúng ta đã có thể sử dụng tính toán song song vào bài toán xử lý và nhận dạng vân tay. Ơ bài toán này các dữ liệu về vân tay sẽ được lưu trữ trên các máy tính khác nhau, khi có yêu cấu nhân dạng một mẫu vân tay nào đó thì mẫu vân tay ấy phải được gửi đi đến tất cả các máy trạm và tại các máy trạm sẽ tiến hành tìm kiếm mẫu vân tay phù hợp với mẫu vân tay ban đầu đưa vào và sau đó sẽ trả kết quả về cho máy server. Như vậy việc giải quyết như trên sẽ đảm bảo việc tìm kiếm trên một nguồn dữ liệu rông lớn nhưng vẫn đảm bảo về vấn đề tốc độ tìm kiếm .
Ưng dụng thứ hai mà chúng ta sẽ đề cập đến chính là bài toán khai phá dữ liệu. Đặc điểm của bài toán này là dữ liệu vào đồng loạt với số lượng lớn và nhiều thuộc tính, chính điều này sẽ dẫn đến một bất lợi khi thực hiện trên một máy tính đơn là có thể dẫn đến việc thiếu bộ nhớ do bùng nổ tổ hợp hay do có nhiều thuộc tính ở mỗi phần tử dữ liệu vì vậy sẽ sinh có nhiều thao tác cần xử lý nên nếu chay trên một máy tính đơn thì sẽ rất chậm và có thể là không thực hiện được do đó cần phải sử dụng tính toán song song để giải quyết bài toán trên để tận dụng tài nguyên bộ nhớ của toàn bộ hệ thống cũng như tài nguyên về bộ xử lý của hệ thống.
Ngoài hai ứng dụng trên ngày nay tính toán song song còn được sử dụng trong các bài toán mô phỏng lại thế giới thực cũng như trong nghiên cứu khoa học, chúng ta đã ứng dụng tính toán song song vào việc mô phỏng lại các vụ thử hạt nhân hay việc mô hình hoá phân tử.
Phân loại các kiến trúc máy tính song song
Phân loại kinh điển về kiến trúc máy tính của Flynn
Có nhiều cách để phân loại kiến trúc của máy tính song mà một trong các cách đó là cách phhan loại đó là cách phân loại của Flynn, được chấp nhậ rộng dãi từ những năm 1966. Nguyên tắc phân loại của Flynn là phân loại các kiến trúc máy tính đa bộ vi xử lý theo hai yếu tố độc lập là lệmh và dữ liệu, mỗi yếu tố có thể phân làm hai trạng thái là : một hoặc nhiều. Như vậy ta có bốn cách phân loại như sau :
Đơn lệnh đơn dự liệu (Single intruction, single data) : đây chíng là kiểu máy tính tuần tự.
Đơn lệnh đa dữ liệu (Single intruction, multiple data) : đây là kiểu máy tính song song mả tại mọi chu kỳ đồng hồ tất cả các bộ xử lý đều chạy chung một lệnh nhưng trên các phần dữ liệu khác nhau.
Đa lệnh đơn dữ liệu (Multiple intruction, single data) : đây là kiểu máy tính song song hầu như không xuất hiện trong thực tế .
Đa lệnh đa dữ liệu (Multiple intruction, multiple data) : đây là mô hình máy tính song song phổ biến nhất hiện nay .
Phân loạitheo mô hình bộ nhớ
Mô hình bộ nhớ chia sẻ :đặc điểm của máy tính song loại này là các nút tính toán đều có thể truy nhập vào bộ nhớ dùng chung như là bộ nhớ toàn cục. Nhiều bộ xử lý hoạt động độc lập nhưng cùng sử dụng chung một bộ nhở, mỗi sự thay đổi nội dung các ngăn nhớ đều được các bộ vi xử lý biết .
Ưu điểm chính của mô hình này là cung cấp một vùng nhớ toàn cục do đó dễ dàng cho việc lập trình về mặt sử dụng bộ nhớ đồng thời việc trao đổi thông tin giữa các modun tính toán là tương đối nhanh chóng và dễ dàng
Nhược điểm của mô hình này chính là sự mất cân đối giữa CPU và bộ nhớ. Việc tăng CPU sẽ làm tăng thêm lưu lưọng trên đường dẫn từ bộ nhớ tới CPU.
Mô hình bộ nhớ chia sẻ
Mô hình bộ nhớ phân tán :
Kiến trúc máy tính theo mô hình bộ nhớ phân tán
Mô hình này yêu cầu một mạng truyền thông để kết nối các bộ nhớ của các bộ vi xử lý. Mỗi CPU đều gắn với một bộ nhớ riêng và các thao tác của mỗi CPU trên bộ nhớ cảu mình thì không được các CPU khác biết tới.
Ưu diểm của mô hình này là kích thước bộ nhớ cân bằng với số lượng các bộ vi xử lý
Nhườcđiếm chính của mô hình này chính là người lập trình phải tự thiết lập lấy phương thức trao đổi thông tin giữa các CPU trong quá trình tính toán mà việc này đôi khi là rất khó khăn.
Trong thực tế các máy tính nhanh nhất hiện nay sử dụng kiến trúc bộ nhớ lai giứa bộ nhớ chia sẻ và bộ nhớ phân tán
Kiến trúc máy tính theo mô hình lai
Các giải thuật song song
Ở trên chúng ta đã cùng tìm hiểu về tính toán song song và các úng dụng cảu tính toán song song nhưng chúng ta chuă thực sự đi sâu vào tìm hiểu làm thế nào chúng ta có thể tiến hành song song hoá bài toán và cách đánh giá độ phức tạp của thuật toán trong tính toán song song.
Các cơ chế song song hoá
Song song về dữ liệu : đây là phương pháp thực hiện băng cách chia dữ liệu thành nhiề phần mỗi phần sẽ do một nút quản lý và như vậy khi thao tác với dữ liệu thì mỗi máy chỉ thao tac với phần dữ liệu mà mình quản lý. Cách quản lý như tthế này chính là phân nhỏ bài toán ban đầu thành các bài toán trên các đoạn dữ liệu khác nhau.
Song song hoá chức năng :chia bài toán ban đầu thành các bài toán con đảm nhiệm các chức năng khác nhau và có thể chạy đồng thời có thể cần có sự truyền tin giữa các chức năng và cần có cơ chế đồng bộ hoá
Đánh giá độ phức tạp của các giải thuật song song
Trong lập trình tuần tự truyền thống thì việc đánh giá độ phức tạp của thuật toán dựa vào số lệnh mà chương trình phải thực, thực chất là đánh giá về thời gian chạy của chương trình bởi vì trong lập trình tuần tự mỗi thời điểm nhất định CPU chỉ thực hiện một dòng lệnh duy nhất mà thôi
Trong lập trình song song thì mọi việc lại khác hẳn vì tại một thời điểm có thể có nhiều lệnh cùng chạy đồng thời trên nhiều CPU vì vậy cho nên có khi một chương trình gồm nhiều lệnh nhưng được thiết kế song song hoá tốt vẫn có thể chạy nhanh hơn một chưong trình với số dòng lệnh ít hơn nhưng lại tận dụng các tài nguyên của mạng kém hơn. Vì vậy chúng ta đánh giá độ phức tạp của thuật toán theo hai cách
Lớp bài toán NC : đây là các bài toán có thể giải quyết trên máy Turing với nhiều nhất bộ vi xử lý có thể. Cách đánh giá này là không khả thi trên thực tế và ngày nay hầu như không được sử dụng.
Độ phức tạp Kolmagrov :cách đánh giá này được áp dụng khá phổ biến để đánh giá độ phức tạp của một bài toán song song. Theo cách đánh giá này thì độ phức tạp chỉ phụ thuộc vào số dữ liệu vào và số kết quả cân đưa ra. Cách đánh giá này không đưa ra được độ phức tạp tuyệt đối mà chỉ đưa các ngưỡng của độ phức tạp của bài toán
Ơ trên chúng ta đã cùng tìm hiểu sơ bộ về tính toán song song tuy nhiên để phục vụ cho quá trình thực tập đạt hiệu quả trong phần tiếp theo em xin trình bầy về hệ thống tính toán bó, đây cũng là một hệ thống tính toán song rất phát triển hiện nay vầ cũng chính là đề tài nghiên cứu chính của em trong đợt thực tập này .
Mô hình lập trình
Mô hình lập trình trong tính toán song song gồm có sáu mức. Mức đơn giản nhất là mức user đây là mức không phải làm gì cả, hệ thống là trong suốt với người dung ở mức này. Mức phức tạp nhất là mức phải tự lo lấy tất cả hay còn gọi là DIY (Do it yourself)
Các bước lập trình :
Phân rã bài toán : ở bước này chúng ta tiến hành phân rã bài toán ban đầu thành các bài toán con có thể chạy song song trên các máy, có hai cách phân rã là phân chia về dữ liệu và phân chia về chức năng.
Phân chia công việc : từ kết quả nhận được từ việc phân rã bài toán ban đầu đến đây chúng ta sẽ tiến hành phân chia các công việc cho từng máy để sao cho hiệu quả thực hiện là cao nhất.
Trao đổi thông tin, đây chính là việc thiết lập các cơ chế trao đổi thông tin giữa các tiến trình trong quá trình tính toán
Đồng bộ hoá, đây là yêu cầu không thể thiếu trong quá trình các máy tính làm việc song song. Bởi vì dù bài toán đã được phân thành các bài toán con chạy song song nhưng giữa các bài toán này luôn có sự trao đổi thông tin với nhau, có khi còn sử dụng lại kết quả của nhau vì vậy việc đồng bộ háo sẽ tránh được những sai sót khi nhận tin.
Tiếp theo chúng ta sẽ cùng tìm hiểu kỹ về kiến trúc của hệ thống tính toán bó(hay hệ thống tính toán phân cụm)
Hệ thống tính toán bó chính là một hệ thống máy tính cục bộ(nằm cùng trong một pham vi nhỏ)và được kết nối với nhau bằng một mạng cục bộ. Khi có yêu cầu về một công việc cần htực thi thì hệ thống sẽ sử dụng tài nguyên của cả hệ thống để giải quyết bài toán. Qua đấy chúng ta có thể thấy rằng hệ thống tính toán bó có ưu điểm là việc thiết lập các giao thức truyền thông là khá dễ dàng tuy nhiên hệ thống sẽ bị hạn chế về số nút trong mạng. Trong kiến trúc của hệ thống tính toán phân cụm có ba loại chính là : beowulf, pbs và not. Sau đây chúng ta sẽ cùng tìm hiểu xâu về kiến trúc beowulf vì đây là kiến trúc khá mạnh và phổ biến trên thế giới
Kiến trúc siêu máy tính Beowulf
Đã có rất nhiều định nghĩa khác nhau về Beowulf, có nhiều người cho rằng một hệ thống máy tính được gọi là beowulf khi và chỉ khi nó được tổ chức tương tự như hệ thống máy tính của Nasa nhưng cũng có những quan điểm khác lại cho răng một hệ thống được gọi là beowulf thì chỉ các máy trạm của nó làm việc theo các giải thuật song song là đủ.
Thực tế thì beowulf là kiến trúc hệ thống gồm nhiều máy tính có thể được sử dụng cho tính toán song song. Hệ thống này bao gồm một nút server và một hay nhiều nút client, các nút được nối với nhau qua một mạng Ethernet hoặc một mang network nào đó. Beowulf chỉ yêu cầu về các phần mềm hết sức bình thường như hệ điều hành Linux và các thư viện lập trình song song PVM( Parallel Vitual Machine), MPI( Message Passing Interface), đồng thời điểm mạnh của mô hình này là các máy trạm chỉ cần là các máy tính cá nhân hết sức bình thường chứ không yêu cầu bất kỳ một máy tính chuyên dụng đặc biệt nào. Chính những điểm này đã tạo nên thế mạnh của hệ thống tính toán bó nhờ vào giá thành rẻ. Máy server có nhiệm vụ điều khiển toàn bộ tiến trình tính toán, nó điều khiển tất cả các bó tin và các server file đến các client, ngoài ra server còn có nhiệm vụ giao tiếp với thế giới bên ngoài để thu thập các yêu cầu cũng như trả lại kết quả của bài toán sau khi đã được tính toán. Một hệ thông beowulf lớn có thể có hơn một server và mỗi server sẽ điều khiển việc thực hiện một công việc con khác nhau.
Thư viện lập trình
Có thể nói, lập trình song song cho hệ thống tính bó là khó khăn hơn các hệ thống máy tính khác.Hệ thống tính toán bó là một hệ thống đa máy tính nên các bài toán song song có thể chạy trên các hệ đa máy tính khác cũng có thể chạy trên hệ thống này tuy nhiên đôi khi hiệu năng đạt được là không cao vì hệ thống bó có một số đặc điểm riêng biệt.
Hệ thống bó là hệ thống các máy tính có bộ nhớ phân tán, vì vậy việc truyền thông giữa các nút trong quá trình tính toán thường là truyền thông điệp. Các thư viện truyền thông điệp hiện nay cho hệ thồng bó có thể kể đến là MPI, PVM, Active Message, CMMD, trong đó MPI với nhiều ưu điểm vượt trội có thể coi là sự lựa chọn tốt cho các hệ tính toán bó.
Thư viện truyền thông điệp MPI
Cơ chế truyền thông điệp là cơ chế được sử dụng rộng rãi trong tính toán song song. Các chương trình theo mô hình truyền thông điệp sẽ có một trong hai dạng là đơn lệnh đa dữ liệu hay đa lệnh đa dữ liệu. Truyền thông điệp được sử dụng nhiêù vì nó là cơ chế song song đơn giản, sử dụng các trình biên dịch thông thường như C\C++, Java, Fotran... không cần hổ trợ một trình biên dịch đặc biệt nào cả. Hơn nữa thư viện truyền thông điệp rất linh hoạt và sẵn dùng.
MPI là một chuẩn về thư truyền thông điệp được phát triển bởi MPIF( Message Passing Interface Forum). Nó định ra giao diện lập trình thích hợp cho việc viết các chương trình theo mô hình truyền thông điệp với mục tiêu hoạt động linh hoạt và hiệu quả. MPIF, với sự tham gia của hơn 40 tổ chức, bắt đầu đưa ra chuẩn này từ năm 1992 với phiên bản 1.0, đến năm 1997 đã dưa ra phiên bản 2.0 với nhiều tính năng mới. Sau đây chúng ta sẽ cùng tìm hiểu về thư viện truyền thông điệp phát triển dựa trên chuẩn MPI.
Cấu trúc chương trình
Một chương trình MPI có cấu trúc chung như sau:
include mpi header file
khai báo các biến
khởi tạo môi trường MPI để các tiến trình giao tiếp với nhau
. . .các câu lệnh tính toán và truyền nhận dữ liệu giữa các tiến trình. . .
kết thúc môi trường MPI.
Một số kiểu dữ liệu được dùng
Kiểu dữ liệu MPI_Datatype có các giá trị hàng số như sau:
MPI_CHAR signed char
MPI_SHORT signed short
MPI_INT signed int
MPI_LONG signed long
MPI_UNSIGNED_CHAR unsigned char
MPI_UNSIGNED_SHORT unsigned short
MPI_UNSIGNED unsigned int
MPI_UNSIGNED_LONG unsigned long
MPI_FLOAT float
MPI_DOUBLE double
MPI_LONG_DOUBLE long double
MPI_BYTE a raw byte
MPI_Comm
MPI_Status
MPI_Request
Các hàm cơ bản
Nhóm các hàm khởi tạo, kết thúc và lấy thông tin về môi trường
Hàm khởi tạo
int MPI_Init(int *argc, char **argv)
Hàm kết thúc tiến trình MPI
int MPI_Finalize()
Hàm này dùng để giải phóng các cấu trúc dữ liệu huỷ bỏ các thao tác mà không thể kết thúc. Hàm này được gọi bởi tất cả các tiến trình. Nếu có 1 tiến trình nào đó không thể đạt đến hàm này thì chương trình bị treo.
Mỗi tiến trình có thể lấy thông tin về định danh của mình thông qua hàm.
int MPI_Comm_rank(MPI_Comm comm, int *rank)
Giá trị định danh của tiến trình được đưa vào biến rank.
Mỗi tiến trình cũng có thể biết được có bao nhiêu tiến trình thực hiện song song trong ứng dụng MPI thông qua hàm.
int MPI_Comm_size(MPI_Comm comm, int *size)
Giá trị số tiến trình được đưa vào biến size.
Chú ý: Định danh này của các tiến trình không phải là định danh của tiến trình mà hệ điều hành quản lý, nó chỉ dùng để phân biệt các tiến trình với nhau.
Nếu một chương trình MPI được khởi tạo với n tiến trình thì định danh của các tiến trình được gán từ 0 đến n-1.
Nhóm các hàm gửi nhận dữ liệu giữa hai tiến trình
Có hai chế độ truyền thông giao tiếp với nhau là Blocking và NonBlocking. Các hàm gửi, nhận dữ liệu theo Blocking sẽ kết thúc khi điều kiện kết thúc của nó xảy ra.Các hàm gửi, nhận dữ liệu theo NonBlocking sẽ kết thúc ngay mà không cần bất cứ kiện điện nào, nó không quan tâm đến việc dữ liệu đã thực sự được truyền đi hoặc nhận về hay chưa. Việc dữ liệu đã thực sự được truyền đi hay nhận về được kiểm tra bằng lời gọi các hàm khác trong thư viện truyền thông.
Các hàm trong chế độ Blocking
int MPI_Send(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm)
Trong đó
buf là con trỏ trỏ đến đầu mảng dữ liệu cần truyền đi.
count là số lượng phần tử dữ liệu của mảng cần truyền đi.
dtype là kiểu dữ liệu của mỗi phần tử trong mảng dữ liệu.
dest là định danh của tiến trình đích.
tag là thẻ được gán cho mảng dữ liệu.
comm là giá trị xác định kiểu giao tiếp với 3 giá trị được định nghĩa trước
Hàm trả về 0 nếu thao tác thành công và mã lỗi trong trường hợp ngược lại
int MPI_Recv(void *buf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_Status *status)
Trong đó
buf là con trỏ trỏ đến đầu vùng nhớ mà dữ liệu sẽ được nhận vào.
count là số phần tử
source là định danh của tiến trình gửi. Giá trị MPI_ANY_SOURCE xác định việc nhận dữ liệu từ bất cứ tiến trình nào.
tag là thẻ của khổi dữ liệu cần nhận về. Giá trị MPI_ANY_TAG xác định việc nhận dữ liệu với giá trị thẻ bất kỳ.
Lỗi sẽ xảy ra nếu kích thước dữ liệu nhận về lớn hơn kích thước vùng đệm chứa nó. Thông thường kích thước cùng đệm chứa dữ liệu nhận về cần phải lớn hơn hoặc bằng kích thước của khối dữ liệu sẽ nhận về. Khi kích thước của khối dữ liệu nhận về nhở hơn kích thước của vùng đệm chứa nó thì hàm sau cho phép xác định số phần tử nhận được
int MPI_Get_count(MPI_Status *status, MPI_Datatype dtype, int *count)
Hàm sau dùng để đồng bộ dữ liệu
int MPI_Probe (in source, int tag, MPI_Comm comm, MPI_Status *status)
Hàm này không trả về cho đến khi dữ liệu được đồng bộ.
Hàm sau dùng để chờ đợi cho các thao tác Send hoặc Receive hoàn thành
int MPI_Wait( MPI_Request *request, MPI_Status *status )
Các hàm NonBlocking
int MPI_Isend(void *buf, int count, MPI_Datatype dtype,int dest, int tag, MPI_Comm comm, MPI_Request *request)
int MPI_Irecv(void *buf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_Request *request)
Nhóm hàm giao tiếp giữa nhiều tiến trình
Thao tác Broadcast : là quảng bá một khối dữ liệu từ tiến trình này sang tất cả các tiến trình khác
int MPI_Bcast(void *buf, int count,MPI_Datatype dtype,int root, MPI_Comm comm)
Thao tác Gather và Scatter : đây là hai thao tác tập hợp dữ liệu từ nhiều tiến trình về một tiến trình và phân tán dữ liệu từ một tiến trình đến nhiều tiến trình.
Thao tác Reduction : Thao tác này thực hiện 1 phép tính trên các biến của các tiến trình trong nhóm và kết quả sẽ được truyền về 1 biến trên vùng nhớ cục bộ của 1 tiến trình. Thao tác này được thực hiện qua hàm sau:
int MPI_Reduce(void *sbuf, void *rbuf, int count, MPI_Datatype dtype,MPI_Op op, int root, MPI_Comm comm)
trong đó
sbuf : địa chỉ đầu của mảng các phần tử trên vùng nhớ cục bộ của các tiến trình trong nhóm, phép tính op sẽ tác động lên nhóm từng phần tử tương ứng của các tiến trình và kết quả được truyền về tiến trình root
rbuf : địa chỉ đầu của mảng kết quả trên vùng nhớ nhận dữ liệu của tiến trình root
count : số lượng phần tử của mỗi mảng trên vùng nhớ cục bộ của các tiến trình
dtype : kiểu dữ liệu của từng phần tử trong mảng.
op : phép toán thực, hiện có thể nhận 1 trong các giá trị sau
MPI_MAX maximum
MPI_MIN minimum
MPI_SUM sum
MPI_PROD product
MPI_LAND logical and
MPI_BAND bitwise and
MPI_LOR logical or
MPI_BOR bitwise or
MPI_LXOR logical exclusive or
MPI_BXOR bitwise exclusive or
root : định danh của tiến trình nhận kết quả
comm : xác định nhóm các tiến trình thực hiện.
Phần 2 Hệ quản lý tài nguyên và phân tải
Mục đích và nhiệm vụ của hệ quản lý tài nguyên và phân tải
Ngày nay yêu cầu về việc tính toán song ngày cang trở nên phổ biến và được áp dụng rộng dãi trong các bài toán có yêu cầu số lượng phép tính lớn, như vậy dẫn đến tình trạng số nút tính toán sẽ rất lớn, số tài nguyên lớn và môi trường không đồng nhất do đó việc quản lý tài nguyên và phân tải tạo ra một môi trường tính toán ổn định không chỉ do hệ điều hành đảm nhân nữa mà cần tạo ra một môi trường tính toán ổn định và hiệu quả. Để đáp ứng yêu cầu này hệ quản lý tài nguyên và phân tải ra đời (Portable Batch System-PBS )
Hệ thống quản lý tài nguyên và phân tải có hai nhiệm vụ chính là :
Quản lý tài nguyên : đưa ra một “bức tranh” về toàn bộ hệ thống
Tài nguyên tính toán : CPU, RAM …
Phân tải : phân bổ công việc trong các điều kiện về tài nguyên của hệ thống sao cho hiệu quả đạt được là tối ưu
Như đã nói ở trên chúng ta thấy rằng ngày nay hệ thống tính toán bó đã trở nên khá phổ biến, các thư viện và các ngôn ngữ lập trình song song tạo cho người lập trình môi trường lập trình trên hệ thống tính toán bó, các phần mềm quản lý và phân tải lại tạo ra một môi trường tính toán ổn định và hiệu quả. Các phần mềm này có ý nghĩa càng lớn khi số lượng các nút càng lớn và số lượng các chương trình thực hiện càng nhiều. Để hệ thống hoạt động tối ưu thì các phần mầm phân tải phải sử dụng các phần mềm quản lý tài nguyên và lập lịch. Phần mềm quản lý tài nguyên còn được người dùng sử dụng để quản lý hệ thống và đánh giá hiệu năng của hệ thống.
PBS là hệ thống quản lý tài nguyên và phân tải rất mạnh do NASA phát triển. Hệ thống này được sử dụng rất nhiều trong các hệ thống tính toán hiệu năng cao. Chức năng chính của hệ thống là tiếp nhận bảo vệ công việc đó cho đến khi nó được thực hiện, thực hịên công việc và trả lại kết quả cho người sử dụng.PBS có thể được cấu hình để chạy trên một hệ thống đơn hoặc một hệ thống đa máy tính, chính sự linh hoạt này đã giúp cho PBS có thể thích hợp với nhiều hệ thống tính toán khác nhau. PBS ngày nay đã trở thành một hệ phân tải hang đầu trong các hệ siêu máy tính và trở thành chuẩn cho các hệ thống bó trên Linux, PBS cung cấp rất nhiều lợi ích cho các hệ thống tính toán hiệu năng cao. Sau đây là một số chức năng quan trọng của PBS :
Chia sẻ tài nguyên cung cấp một cơ chế lập lịch cho các công việc một cách trong suốt trên bất kỳ một hệ thống PBS nào. Công việc được yêu cầu từ một máy client bất kỳ, cục bộ hay từ xa.
Giao diện dử dụng đồ hoạ giúp người sử dụng chuyển các yêu cầu tính toán ở chế độ lô( Batch ) hay chế độ tương tác(interative), truy vấn các công việc, hàng đợi công việc và tình trạng hệ thống và theo doi dự tiến triển của công việc. Ngoài ra PBS cũng hỗ trợ giao diện dòng lệnh cho những người sử dụng chuyên nghiệp.
Cơ chế bảo mật cho phép người quản trị có thể thiết lập hoặc huỷ bỏ việc truy cập đến PBS của một người nào đó, một nhóm người, một máy hay một mạng nào đó.
Nhật ký cho phép ghi lại tất cả các hoạt động trên của hệ thống theo từng người, từng nhóm người hoặc từng máy.
Tự động chuyển tập là cơ chế sao chép các tệp cần thiết cho việc thực hiện một công việc trên các máy trạm tính toán. Các tệp cần chuyển có thể là các tệp dữ liệu hoặc các tệp thực thi.
Hỗ trợ các công việc song song cho phép hoạt động cùng với các thư viện lập trình song song như MPI,PVM va HPF. Các chương trình có thể dựoc lập lịch để chạy trên các thống đa bộ xử lý hoặc đa máy tính.
Hỗ trợ tính toán lưới cung cấp hệ thống siêu tính toán và tính toán lưới, bao gồm việc hỗ trợ cho GGT( Globuls Grid Toolkit )
Giao diện lập trình được PBS cung cấp cho phép người lâp trình có thể tự viết lệnh mới cho PBS, tích hợp PBS vào các ứng dụng của họ hoặc cài đặt các cơ chế lập trình riêng.
Tự động phân tải là cơ chế phân tỉ công việc trên tài nguyên của hệ thống bó.
PBS gồm ba phân hệ chính là:
PBS_SERVER : phân hệ quả lý công việc.
PBS_Scheduler : phân hệ lập lịch
PBS_Mom : phân hệ quản lý tài nguyên và thực thi
Vị trí các phân hệ :
Hệ thống quản lý tài nguyên và phân tải PBS
Một số khái niệm cơ bản
Công việc : là một tập hợp các thao tác (xử lý) nào đó được hệ thống xử lý.
Nút : đối với hệ thống PBS thì một nút là một đơn vị tính toán, một công việc có thể được chạy trên 1 nút hoặc trên nhiều nút.
Chuyển tệp vào (Stage in) : Đây là quá trinh chuyển 1 hoặc nhiều tệp vào các nút thực thi để bắt đầu công việc
Chuyển tệp ra (Stage out) : Đây là quá trình chuyển 1 hoặc nhiều tệp ra khỏi các nút sau khi công việc đã hoàn thành
Hàng đợi công việc : là nơi chứa các chứa các công việc đang chờ được thực hiện ở bên trong server. Có hai loại hàng đợi là routing và excution. Routing queue là hàng đợi dùng để dịch các công việc đến một hàng đợi khác. Excution queue chứa các công việc sẽ được thực hiện.
Một số đặc trưng cơ bản
PBS có khá nhiều đặc trưng cần quan tâm đến khi tim hiểu, một số đặc trưng nổi bật được đề cập đến sau đây:
Các lệnh người dùng: đây là các lệnh cung cấp cho người dùng khả năng thao tác làm việc với hệ thống PBS, đặc biệt là các thao tác đối với công việc như: đệ trình, thay thế, xóa bỏ, yêu cầu thông tin công việc v.v..
Các lệnh thao tác: đây là các lệnh phục vụ cho việc thiết lập, khởi động và dừng hệ thống PBS
Các lệnh quản trị hệ thống: đây là các lệnh phục vụ cho việc quản trị hệ thống PBS
Thư viên API: cung cấp gia._.
Các file đính kèm theo tài liệu này:
- DAN074.doc