Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.64 MB, 102 trang )
Đang xem: Microsoft mpi là gì
Giao diện truyền thông điệp chuẩn MPI (MessagePassing Interface) là một giao diện
chuẩn cho phép nhiều máy tính giao tiếp với nhau, được sử dụng trong các cụm máy tính
và siêu máy tính. MPI là giao thức độc lập ngôn ngữ sử dụng cho các máy tính song song.
MPI là một giao diện lập trình ứng dụng truyền thông điệp với mục đích là đem lại hiệu
năng cao, khả năng mở rộng và linh hoạt.
MPI không được chính thức thừa nhận bởi bất cứ tiêu chuẩn nào, tuy nhiên nó lại trở
thành một chuẩn thực tế cho giao tiếp giữa các tiến trình để một chương trình song song
có thể chạy trên hệ thống bộ nhớ phân tán. Các siêu máy tính với bộ nhớ phân tán thực sự
thường sử dụng các chương trình này. Thông thường, các chương trình MPI chạy trên các
máy tính có bộ nhớ chia sẻ, mô hình MPI có lợi trên kiến trúc NUMA do MPI khuyến
khích tính cục bộ của bộ nhớ.
Hầu hết cài đặt MPI bao gồm tập hợp đặc tả các hàm để có thể gọi trực tiếp từ
Fortran, C/C++ và bất cứ ngôn ngữ nào khác tương thích với thư viện hàm (như C#, Java
và Python). Lợi ích của việc sử dụng MPI so với các thư viện cũ là tính khả chuyển (vì
MPI được cài đặt cho hầu hết các kiến trúc bộ nhớ phân tán) và tốc độ (vì mỗi cài được
được tối ưu hoá về nguyên lý cho phần cứng mà nó thực thi trên đó).
MPI sử dụng đặc tả độc lập ngôn ngữ (LIS) cho các lời gọi hàm. Hiện nay, các
chuẩn MPI có hai phiên bản phổ biến là 1.2 (gọi tắt là MPI-1) chủ yếu là truyền thông
điệp và có môi trường hoạt động tĩnh, và phiên bản MPI-2.1 (gọi tắt là MPI-2) bao gồm
nhiều đặc điểm mới như vào/ra song song, quản lý tiến trình động và truy cập bộ nhớ từ
xa. MPI-2 gần như bao hàm toàn bộ MPI-1, mặc dù có một số hàm đã bị loại bỏ. Vì thế,
các chương trình viết theo MPI-1.2 vẫn có thể tương thích với chuẩn MPI-2.
Chức năng của MPI
Giao diện MPI là một phương tiện để cung cấp các chức năng topo ảo, sự đồng bộ
hoá và giao tiếp giữa tập hợp các tiến trình (các nút/máy chủ/máy tính) theo cách độc lập
với ngôn ngữ, với cú pháp đặc tả ngôn ngữ, cộng thêm một số đặc điểm khác. Các
chương trình MPI luôn làm việc với tiến trình, nhưng các lập trình viên thường xem các
28
tiến trình như các bộ xử lý. Thông thường, để tối ưu hoá hiệu năng, mỗi CPU (hoặc lõi
trong các máy đa lõi) sẽ được chỉ định một tiến trình đơn lẻ.
Chức năng của thư viện MPI bao gồm (nhưng không hạn chế) các hoạt động gửi
nhận điểm-điểm, lựa chọn topo tiến trình logic dạng hình học phẳng hay đồ thị, trao đổi
dữ liệu giữa các cặp tiến trình, phối hợp kết quả từng phần của quá trình tính toán, các nút
đồng bộ cũng như các thông tin về mạng …
Một số khái niệm về MPI
MPI cung cấp nhiều khả năng thực hiện. Các khái niệm sau đây sẽ cho chúng ta hiểu
rõ hơn, giúp chúng ta quyết định cần sử dụng chức năng nào cho chương trình của mình.
Có 8 khả năng cơ bản, và 4 trong số đó chỉ có ở MPI-2. Một số khả năng đó là:
Bộ truyền thông: Bộ truyền thông chịu trách nhiệm kết nối các tiến trình sử dụng
MPI. Trong truyền thông, mỗi tiến trình có một bộ nhận diện độc lập và các tiến trình
được sắp xếp theo một thứ tự topo nhất định. MPI cũng có các nhóm, nhưng chủ yếu
phục vụ cho tổ chức và tái tổ chức các tiến trình con, trước khi các bộ truyền thông khác
được tạo ra. MPI hiểu được các hoạt động nhóm truyền thông nội bộ đơn, và hoạt động
truyền thông liên nhóm. Trong MPI-1, hoạt động truyền thông của nhóm đơn là phổ biến
nhất, còn truyền thông liên nhóm giữ vai trò quan trọng nhất trong MPI-2 để mở rộng cho
quản lý tiến trình động và truyền thông tập thể.
Cơ sở điểm-điểm: Các hoạt động điểm-điểm, thực sự hữu ích trong truyền thông
không đồng đều, mỗi tiến trình lặp đi lặp lại trao đổi các vùng dữ liệu với tiến trình khác
giữa các bước tính toán, trong kiến trúc chủ-tớ, tiến trình chủ thường xuyên gửi dữ liệu
cho tiến trình kia mỗi khi có một tác vụ hoàn thành.
MPI-1 đặc tả cơ chế truyền thông điểm-điểm không khoá và có khoá.
Cơ sở cộng tác tập thể: Chức năng hoạt động tập thể trong MPI liên quan đến
truyền thông giữa mọi tiến trình trong nhóm. Một hàm, hay gặp, dạng này là MPI_Bcast.
Hàm này lấy dữ liệu từ một nút đặc biệt nào đó và gửi thông điệp tới mọi tiến trình trong
nhóm. Một hàm khác đó là MPI_Reduce, hàm này dùng để lấy dữ liệu từ mọi tiến trình
khác trong nhóm. Các loại hàm này thường hữu ích khi bắt đầu hoặc kết thúc quá trình
29
tính toán phân tán lớn. Còn có một số hàm phức tạp hơn như MPI_Alltoall, hàm này tái
sắp xếp n phần dữ liệu từ mỗi tiến trình để nút thứ n lấy dữ liệu phần tử thứ n từ mỗi nút.
Các loại dữ liệu: Nhiều hàm MPI cần chúng ta đặc tả loại dữ liệu được gửi giữa
các bộ xử lý. Điều này xuất phát từ việc các tham số của hàm MPI đều là các biến, không
phải là loại được định nghĩa trước. Nếu loại dữ liệu là chuẩn như int, char, double.., thì ta
có thể sử dụng các loại dữ liệu định nghĩa của MPI như MPI_INT, MPI_CHAR,
MPI_DOUBLE… Giả sử ta có một mảng các số nguyên, và mọi bộ xử lý muốn gửi các
mảng dữ liệu đó tới nút gốc, thì có thể gọi hàm MPI_Gather. Ví dụ:
int array;
int root, total_p, *receive_array;
MPI_Comm_size(comm, &total_p);
receive_array=(int *) malloc(total_p*100*sizeof(int));
MPI_Gather(array, 100, MPI_INT, receive_array, 100, MPI_INT,
root, comm);
Truyền thông một phía (MPI-2): MPI-2 xác định ba thao tác truyền thông một
phía, bao gồm Put, Get, và Accumulate, dùng để ghi, đọc đối với bộ nhớ từ xa, và một
thao thác rút gọn một số tác vụ trên cùng một bộ nhớ đó.
Các hàm này thường được sử dụng trong các thuật toán mà việc đồng bộ là không
thuận tiện (ví dụ như nhân ma trận phân tán), hoặc ở những bài toán mà nhiệm vụ cần cân
bằng tải trong khi các bộ xử lý khác đang sử dụng dữ liệu.
Quản lý tiến trình động (MPI-2): Vấn đề cốt lõi của đặc điểm này đó là “khả năng
của một tiến trình MPI có thể tạo ra một tiến trình MPI mới hoặc để thiết lập một giao
tiếp với các tiến trình MPI để có thể khởi động rời rạc nhau”. Chuẩn MPI-2 mô tả ba giao
diện chính để các tiến trình MPI có thể thiết lập giao tiếp động, đó là:
MPI_Comm_spawn, MPI_Comm_accept/MPI_Comm_connect và MPI_Comm_join. Hàm
MPI_Comm_spawn cho phép một tiến trình MPI có thể nhân bản một số tiến trình MPI
nữa. Tập hợp các tiến trình MPI mới nhân bản này tạo thành một bộ truyền thông
MPI_COMM_WORLD
và
có
thể
giao
tiếp
với
tiến
trình
cha.
Hàm
MPI_Comm_spawn_multiple là một biến thể, nó cho phép các tiến trình nhân bản khác
nhau với các tham số khác nhau.
30
MPI vào/ra (MPI-2): Đặc điểm vào ra song song được giới thiệu với MPI-2, đôi
khi còn được gọi là MPI-IO, liên quan đến một tập các hàm cho phép có thể giảm bớt khó
khăn trong quản lý vào/ra trên các hệ thống phân tán, cũng như là cho phép các tệp có thể
được truy cập dễ dàng hơn.
1.5.2 Giới thiệu gói CCP của Microsoft
Gói CCP (gói cụm tính toán) chứa cài đặt của Microsoft về MPI dựa trên MPICH2
của Argonne National Laboratory.
Microsoft MPI cung cấp một số lợi ích sau:
–
Dễ dàng sử dụng các mã nguồn có sẵn sử dụng MPICH2.
–
Tính bảo mật cao dựa trên dịch vụ Active Directory.
–
Hiệu năng cao trên Windows.
–
Tương thích nhị phân với các loại tuỳ chọn kết nối khác nhau.
Phiên bản 32-bit của thư viện Msmpi.dll sử dụng các lời gọi hàm __stdcall() tiện
dụng đối với các hàm C/C++. Các ứng dụng C/C++ sử dụng MSMPI có thể sử dụng các
MPIAPI macro. Đối với các hàm Fortran, phiên bản 32-bit của Msmpi.dll sử dụng lời gọi
hàm dạng __cdecl. Phiên bản 64-bit của các hàm này thì sử dụng lời gọi __fastcall.
Kiến trúc cụm tính toán
Cụm tính toán là một đơn vị có tổ chức bao gồm một tập hợp các nút, một hàng đợi,
các ứng dụng và các tác vụ.
Một nút là một máy tính đơn lẻ với một hoặc nhiều bộ xử lý. Quản trị hệ thống sẽ
chịu trách nhiệm thêm hay bớt các nút. Các ứng dụng có thể liệt kê, phê duyệt, tạm dừng,
và giành lại các nút thông qua giao diện ICluster. Các ứng dụng có thể yêu cầu tính chất
nút thông qua giao diện Inode.
Mọi nút trong một cụm tính toán là một phần của cùng một domain. Các nguồn dữ
liệu như cơ sở dữ liệu hay tệp được truy cập tại từng nút. Các License servers cũng được
truy cập từ mỗi nút để xác nhận các nút đó chạy ứng dụng và có giấy phép cho ứng dụng
đó.
31
Hình 1.5 Mô phỏng kiến trúc một cụm tính toán
Nút trưởng nhóm quản lý toàn bộ cụm và các tài nguyên.
Xem thêm: Đạo Phật Tiếng Anh Là Gì – Bộ Từ Vựng Tiếng Anh Chuyên Ngành Phật Giáo
Xem thêm: Enter Your Credentials To Connect To Là Gì, Cách Gỡ Bỏ Mật Khẩu Khi Chia Sẻ Trong Win 10
Các tác vụ được gửi đăng
kí tới và lập lịch bởi nút này.
Cụm chứa một hàng đợi đơn, nó là một tổ chức để chứa các tác vụ xếp hàng, đang
chạy và đã hoàn thành. Tác vụ đã hoàn thành sẽ được tuần hoàn gỡ bỏ khỏi hàng đợi này.
Kiến trúc bộ lập lịch tác vụ
Dịch vụ lập lịch tác vụ là dịch vụ lập lịch chủ yếu cho gói cụm tính toán. Bộ lập lịch
tác vụ kiểm soát cấp phát tài nguyên, hoạt động của tác vụ và phục hồi khi bị lỗi.
Bộ quản lý nút thực hiện quản lý các nút tính toán. Quản trị hệ thống thực hiện phê
duyệt, tạm dừng, giành lại và gỡ bỏ các hoạt động. Bộ theo dõi lập lịch cung cấp truyền
thông giữa quản lý nút và bộ lập lịch nút. Nó được gọi ra khi nút tính toán bắt đầu làm
việc hoặc một tác vụ được hoàn thành trên nút tính toán.
Dịch vụ lập lịch tác vụ là dịch vụ lập lịch cơ bản. Các tài nguyên cụm được cấp phát
dựa theo mức ưu tiên tác vụ. Điều này đảm bảo rằng các tác vụ có mức ưu tiên cao sẽ
được thêm vào dãy đầu của hàng đợi. Nếu các tác vụ có mức ưu tiên ngang nhau thì tài
32
Công cụ lệnh
(command-line)
Ứng dụng
Cộng tác COM
Quản lý tác vụ
Mức
giao
diện
C# API
Dịch vụ cụm
Dịch vụ lập
lịch tác vụ
Mức dữ
liệu
Bộ theo dõi
lập lịch
Mức
lập
lịch
DB
Quản lý nút
Mức
thực
thi
Hình 1.6 Mô hình kiến trúc lập lịch
nguyên được cấp phát cho tác vụ được đăng kí trước. Không có mức ưu tiên công việc
bên trong một nhiệm vụ. Các tài nguyên được cấp phát tới tác vụ theo thứ tự thêm vào.
Bộ lập lịch tác vụ lựa chọn các nút sẵn sàng tốt nhất trong cụm để chạy từng tác vụ. Một
tác vụ cũng có thể đặc tả danh sách các nút mà nó có thể chạy trên đó, và bộ lập lịch lựa
chọn nút tốt nhất trong danh sách đó.
33
Lập lịch tác vụ cũng hỗ trợ khả năng khôi phục. Điều này đảm bảo một ứng dụng
ngốn tài nguyên sẽ không trì hoãn các ứng dụng khác đang sẵn sàng chạy. Bộ lập lịch sẽ
lập lịch một tác vụ ưu tiên thấp hơn nếu một tác vụ ưu tiên cao hơn đang chờ tài nguyên
rảnh rỗi và tác vụ ưu tiên thấp hơn có thể hoàn thành công việc của mình với tài nguyên
sẵn có mà không trì hoãn thời gian bắt đầu của tác vụ ưu tiên cao kia.
Chúng ta cũng có thể mở rộng lập lịch với các bộ lọc. Một bộ lọc đăng kí tác vụ
được gọi ra trước khi một tác vụ được xếp vào hàng đợi hoặc được sửa đổi. Nó có thể
chấp nhận sửa đổi tác vụ hoặc từ chối sự đệ trình tác vụ đó. Một bộ lọc kích hoạt được
gọi ra trước khi tác vụ bắt đầu làm việc. Bộ lọc này có thể thực hiện các nhiệm vụ như
kiểm tra yêu cầu giấy phép phần mềm, hoặc triển khai các chính sách cấp phát tài nguyên.
Nếu bộ lọc kích hoạt trả lại giá trị khác 0 (bị lỗi), thì tác vụ vẫn duy trì trong hàng đợi. Bộ
lọc được gọi tuần hoàn cho đến khi nó thành công.
Dịch vụ cụm là một dịch vụ .NET từ xa. Nó cung cấp các thiết lập cụm rộng, các
hoạt động liên quan đến nút, các hoạt động liên quan đến tác vụ, nhiệm vụ, và thông tin
sử dụng tài nguyên.
Các ứng dụng và các công cụ dòng lệnh truy cập các chức năng của bộ lập lịch tác
vụ thông qua tầng giao diện.
1.5.3 Lập trình MPI với VS.NET
Để lập trình một bài toán song song với công cụ Microsoft Visual Studio .NET ,
trước hết chúng ta tạo một project, loại Win32 Console Application, không chọn
“Precompiled header”.
Trong mã nguồn của project, thay đổi từ “_tmain” thành “main” và “_TCHAR*
argv” thành “char* argv” để nó tương thích với hàm MPI_Init.
Nhấp phải chuột vào project trong phần “Solution Explorer”, chọn “Properties”. Mở
rộng “Configuration Properties” ở bên trái.
–
Lựa chọn “All Configurations” từ hộp “Configuration:” ở góc trái trên.
34
–
Lựa chọn “General” bên dưới thực đơn “C/C++”. Trong mục “Additional Include
Directories” ở bên phải, nhập vào đường dẫn tới thư mục include của SDK đã cài
đặt trong máy. Thông thường, chúng ta sử dụng “C:Program FilesMicrosoft
Compute Cluster PackInclude”.
–
Lựa chọn “Advanced” cũng trong mục “C/C++”. ở phần “Compile As” ở bên phải,
lựa chọn “Compile as C Code (/TC)” nếu chương trình viết bằng C chứ không phải
C++.
–
Lựa chọn “General” trong phần “Linker”. Với phần “Additional Library
Directories” ở bên phải, nhập vào đường dẫn tới thư mục lib của SDK được cài ra
trong máy. Ngầm định là “C:Program FilesMicrosoft Compute Cluster
PackLibi386”.
–
Lựa chọn mục “Input” cũng trong phần “Linker”. Trong mục “Additional
Dependencies” ở bên phải, gõ dòng msmpi.lib, để sử dụng thư viện MPI.
Đến đây, chúng ta đã có thể viết chương trình, biên dịch với Visual Studio. Khi đã
biên dịch được tệp khả thi exe, chúng ta cần sử dụng chương trình mpirun.exe trong thư
mục bin của gói SDK để chạy với cú pháp “mpiexec -np x abc.exe”, trong đó, “x” là số
lượng vi xử lý muốn sử dụng, và “abc.exe” là tên tệp đã biên dịch ở trên.
1.6 Kiến trúc cụm máy tính
Trước đây, thuật ngữ “máy tính hiệu năng cao” (High- Performance Computing HPC) thường được dùng để chỉ những máy tính song song hoặc máy tính véc tơ với giá
trị lên tới hàng triệu đôla. Nhưng khi các máy tính hiệu năng cao được tạo ra bằng cách
kết nối các máy trạm (Workstation – WS) với nhau thì thuật ngữ “cụm máy tính”
(Computer Cluster) được sử dụng để chỉ dạng máy tính này.
Cụm máy trạm (Workstation Cluster -WSC) là một nhóm các máy trạm được kết nối
với nhau thông qua một mạng tốc độ cao. Các máy tính trong một WSC truyền thông qua
một trong hai giao thức truyền thông phổ biến đó là: truyền thông dựa trên kết nối và
truyền thông không kết nối. Mô hình kết nối dựa trên giao thức TCP (Tranmission
Control Produhoc-o-canada.comol) với độ tin cậy cho việc truyền thông điệp được bảo đảm. Mô hình
35
không kết nối dựa trên giao thức UDP (User Datagram Produhoc-o-canada.comol), với giao thức này độ tin
cậy cho việc truyền thông điệp được bảo đảm. Hiện nay có rất nhiều phần mềm hỗ trợ
việc tính toán song song trên WSC tiêu biểu như MPICH.
Kiến trúc bó IBM 1600 của trung tâm tính toán hiệu năng cao:
5 node tính toán pSeires 655, mỗi node gồm 8 CPU Power4+16 bit RISC 1.7
GHz của IBM; cache 5.6 MB ECC L2, 128 MB ECC L3, băng thông: 72.3
GBps; 32 GB RAM, băng thông bộ nhớ 51.2 GBps; 6×36 GB HDD. Năng lực
tính toán tổng cộng khoảng 240 GFlóp (mở rộng tối đa 768 GFlops/16 node).
1 node quản lí phần mềm CSM p630: Power4+64 bit 1.2 GHz; cache 1.5 MB
ECC L2, 8 MB ECC L3, băng thông: 12.8 GBps; 1 GB RAM, băng thông: 6.4
GBps; 6×36 GB HDD, DVD ROM.
1 node điều khiển phần cứng HCM: Intel Xeon 3.06 GHz, 1GB RAM, 40 GB
HDD, DVD RAM.
Các node được kết nối với nhau thông qua HPS (High Performance Switch –
Switch hiệu năng cao), băng thông 2 GBps và Gethernet.
Hệ thống lưu trữ chung: IBM DS4400 và EXP700 kết nối với cụm IBM 1600
thông qua cáp quang với băng thông 2 GBps.
Các node chạy HĐH AIX 5L phiên bản 5.2
Kiến trúc bó IBM 1350 của trung tâm tính toán hiệu năng cao:
8 node tính toán, mỗi node gồm 2 chip Intel Xeon Dual Core 3.2 GHz, 2 GB
RAM, 1×36 GB HDD, DVD ROM. Tổng năng lực tính toán của 8 node là
khoảng 51.2 Gflops.
2 node phục vụ lưu trữ, mỗi node gồm 2 chip Intel Xeon Dual Core 3.2 GHz, 3
GB RAM, 4×72 GB HDD.
36
Bạn thấy bài viết Microsoft Mpi Là Gì có khắc phục đươc vấn đề bạn tìm hiểu ko?, nếu ko hãy comment góp ý thêm về Microsoft Mpi Là Gì bên dưới để duhoc-o-canada.com có thể thay đổi & cải thiện nội dung tốt hơn cho các bạn nhé! Cám ơn bạn đã ghé thăm Website: duhoc-o-canada.com của duhoc-o-canada.com
Nhớ để nguồn bài viết này: Microsoft Mpi Là Gì của website duhoc-o-canada.com
Chuyên mục: Là gì?