.4 Luật Amdahl

Một phần của tài liệu thiết kế nhân ma trận thưa với véctơ trong tính toán song song và ứng dụng (Trang 26 - 31)

1.5 Lập trỡnh song song với MPI

Phần này giới thiệu một cụng cụ hỗ trợ lập trỡnh song song, đú là MPI, với gúi hỗ trợ tớnh toỏn song song MPI SDK của Microsoft.

1.5.1 Giao diện truyền thụng điệp - MPI

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

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

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[100];

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 (adsbygoogle = window.adsbygoogle || []).push({});

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

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 đú.

Một phần của tài liệu thiết kế nhân ma trận thưa với véctơ trong tính toán song song và ứng dụng (Trang 26 - 31)