1. Trang chủ
  2. » Công Nghệ Thông Tin

Cơ bản lập trình song song MPI cho c c++

30 3,1K 66

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cơ bản lập trình song song mpi cho c/c++
Tác giả Đặng Nguyên Phương
Trường học NMTP
Thể loại Tài liệu nội bộ
Năm xuất bản 2013
Định dạng
Số trang 30
Dung lượng 485,01 KB

Cấu trúc

  • 2.1 Giới thiệu (3)
  • 2.2 Cài đặt MPICH2 (3)
  • 2.3 Biên dịch và thực thi chương trình với MPICH2 (4)
  • 3.1 Cấu trúc chương trình (5)
  • 3.2 Các khái niệm cơ bản (5)
  • 3.3 Ví dụ “Hello world” (0)
  • 3.4 Ví dụ truyền thông điệp (8)
  • 4.1 Các lệnh quản lý môi trường MPI (13)
  • 4.2 Các kiểu dữ liệu (14)
  • 4.3 Các cơ chế truyền thông điệp (16)
  • 4.4 Các lệnh truyền thông điệp blocking (0)
  • 4.5 Các lệnh truyền thông điệp non-blocking (19)
  • 4.6 Các lệnh truyền thông tập thể (21)
  • 5.1 Ví dụ tính số π (23)
  • 5.2 Ví dụ nhân ma trận (26)

Nội dung

1 Mở đầu 2 2 MPI 3 2.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Cài đặt MPICH2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.3 Biên dịch và thực thi chương trình với MPICH2 . . . . . . . . . . . . . . . . . . . 4 3 Cấu trúc cơ bản của một chương trình MPI 5 3.1 Cấu trúc chương trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 Các khái niệm cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3 Ví dụ “Hello world” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.4 Ví dụ truyền thông điệp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4 Các lệnh MPI 13 4.1 Các lệnh quản lý môi trường MPI . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2 Các kiểu dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.3 Các cơ chế truyền thông điệp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.4 Các lệnh truyền thông điệp blocking . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.5 Các lệnh truyền thông điệp nonblocking . . . . . . . . . . . . . . . . . . . . . . . 19 4.6 Các lệnh truyền thông tập thể . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5 Một số ví dụ 23 5.1 Ví dụ tính số π . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.2 Ví dụ nhân ma trận . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Tài liệu tham khảo 29

Giới thiệu

Mô hình truyền thông điệp là một trong những mô hình lâu đời và phổ biến nhất trong lập trình song song Hai công cụ chính được sử dụng trong mô hình này là PVM (Parallel Virtual Machine) và MPI (Message Passing Interface), cung cấp các hàm cần thiết để trao đổi thông tin giữa các tiến trình tính toán trong hệ thống máy tính song song.

MPI (Message Passing Interface) là một tiêu chuẩn cho thư viện lập trình song song, được giới thiệu vào năm 1994 bởi MPIF (Message Passing Interface Forum) và đã được nâng cấp lên chuẩn MPI-2 từ năm 2001 Nhiều thư viện lập trình như MPICH, OpenMPI và LAM/MPI được phát triển dựa trên tiêu chuẩn MPI này.

MPICH2 là thư viện miễn phí hỗ trợ lập trình song song theo chuẩn MPI, cho phép giao tiếp giữa các tiến trình thông qua truyền thông điệp Thư viện này tương thích với nhiều ngôn ngữ lập trình như C++, Fortran, và Python, đồng thời hoạt động trên nhiều hệ điều hành như Windows, Linux và MacOS.

Cài đặt MPICH2

Gói MPICH2 có thể được cài đặt trên tất cả các máy tính thông qua lệnh sau

$ sudo apt−get install mpich2

Sau khi cài đặt MPICH2 thành công, cần cấu hình trước khi chạy song song Đối với phiên bản 1.2.x trở về trước, trình quản lý thực thi mặc định là MPD, trong khi từ phiên bản 1.3.x trở đi, trình quản lý sẽ là Hydra Cách cấu hình cho hai trình quản lý này khác nhau, trong đó file mpd.hosts sẽ chứa tên của các máy con trong hệ thống, ví dụ như master node1 node2 node3.

Còn đối với file.mpd.conf, ta cần phải thiết lập quyền truy cập cho file này thông qua lệnh

Sau đó mở file và thêm dòng sau vào trong file secretword=random_text_here Để khởi động MPD, gõ lệnh sau trên máy chủ

$ mpdboot −n với N là số máy có trong hệ thống.

Hydra tương tự như MPD nhưng đơn giản hơn, chỉ cần tạo một file duy nhất có tên "hosts" trong thư mục /home/phuong File này sẽ chứa tên của tất cả các máy con trong hệ thống, bao gồm master node1, node2, và node3.

Biên dịch và thực thi chương trình với MPICH2

Biên dịch Để biên dịch một chương trình ứng dụng với MPICH2, ta có thể sử dụng một trong các trình biên dịch sau

Ngôn ngữ Trình biên dịch

C++ mpicxx,mpic++,mpiCC Fortran mpif77,mpif90,mpifort

Ví dụ như ta muốn biên dịch một chương trình ứng dụng viết bằng ngôn ngữ C/C++, ta có thể gõ lệnh sau mpicc −o helloworld helloworld.c

File helloworld.c chứa mã nguồn của chương trình, và tùy chọn -o cho phép chúng ta chỉ định tên file ứng dụng đã được biên dịch, ở đây là file helloworld.

Trước khi thực thi chương trình với phiên bản MPICH2 sử dụng trình quản lý MPD, cần gọi lệnh mpdboot hoặc mpd & để khởi động MPD.

Chương trình đã được biên dịch bằng MPI có thể được thực thi bằng cách sử dụng lệnh mpirun -np hoặc mpiexec -n

Trong đó N là số tác vụ song song cần chạy và tenchuongtrinh là tên của chương trình ứng dụng cần thực thi.

3 Cấu trúc cơ bản của một chương trình MPI

Cấu trúc chương trình

Cấu trúc cơ bản của một chương trình MPI như sau:

Khai báo các header, biến, prototype,

. Khởi động môi trường MPI

. Kết thúc môi trường MPI

Các khái niệm cơ bản

Một chương trình song song MPI thường bao gồm nhiều tác vụ (hay còn gọi là tiến trình), mỗi tác vụ được phân biệt bằng chỉ số tác vụ (rank hay task ID) Chỉ số này là một số nguyên từ 0 đến (N−1), trong đó N là tổng số tác vụ trong chương trình Trong các chương trình theo cơ chế master/slave, có một tác vụ chủ (master) điều khiển các tác vụ con (slave), với tác vụ chủ thường có chỉ số 0 và các tác vụ con có chỉ số từ 1 đến (N−1).

Trong lập trình MPI, một nhóm (group) được hình thành từ các tác vụ cùng chạy một chương trình, trong khi communicator là tập hợp các tác vụ trong nhóm có khả năng trao đổi thông tin với nhau Khi khởi động chương trình, communicator mặc định bao gồm tất cả các tác vụ thực thi là MPI_COMM_WORLD.

Trong MPI, các tác vụ giao tiếp với nhau bằng cách gửi và nhận thông điệp Mỗi thông điệp bao gồm hai thành phần chính: dữ liệu và header Header chứa thông tin quan trọng để xác định nội dung và mục đích của thông điệp.

• Chỉ số của tác vụ gửi

• Chỉ số của tác vụ nhận

• Nhãn (tag) của thông điệp

Để bắt đầu làm quen với việc viết chương trình MPI, chúng ta sẽ thực hiện một ví dụ đơn giản là chương trình "Hello world" bằng ngôn ngữ C Các bước thực hiện chương trình này sẽ được hướng dẫn chi tiết.

• Bước đầu tiên, ta sẽ tạo một file có tênhello.c và mở file này bằng các chương trình soạn thảo văn bản dạng text (vd: gedit,emacs,vim, )

• Khai báo tên chương trình và thêm header MPI

#i n c l u d e int main (int argc, char∗∗ argv)

Cần lưu ý rằng header MPI (mpi.h) cần phải được thêm vào trong file để có thể gọi được các lệnh MPI.

• Khai báo môi trường MPI

#include int main (int argc, char∗∗ argv)

Lệnh MPI_Init khởi tạo môi trường MPI cho các tác vụ song song và trả về một giá trị nguyên trong quá trình khởi tạo.

• Gọi lệnh quản lý số tác vụ song song

#include int main (int argc, char∗∗ argv)

MPI_Comm_size (MPI_COMM_WORLD, &n t a s k s ) ;

Lệnh MPI_Comm_size trả về số lượng tác vụ song song và lưu trữ giá trị này vào biến ntasks Tham số MPI_COMM_WORLD đại diện cho communicator toàn cục, được xác định bằng một hằng số nguyên.

• Gọi lệnh xác định chỉ số của tác vụ

#include int main (int argc, char∗∗ argv)

MPI_Comm_size (MPI_COMM_WORLD, &ntasks) ;

MPI_Comm_rank (MPI_COMM_WORLD, &mytask ) ;

Lệnh MPI_Comm_rank trả về chỉ số (rank) của tác vụ vào biến mytask, với giá trị từ 0 đến ntasks-1, giúp xác định tác vụ khi thực hiện gửi và nhận thông tin.

• Thực hiện lệnh xuất ra màn hình

#include int main (int argc, char∗∗ argv)

MPI_Comm_size (MPI_COMM_WORLD, &ntasks) ;

MPI_Comm_rank (MPI_COMM_WORLD, &mytask) ; p r i n t f ( " H e l l o w o r l d from t a s k %d o f %d \n " , mytask , n t a s k s ) ;

• Kết thúc môi trường MPI

#include int main (int argc, char∗∗ argv)

MPI_Comm_size (MPI_COMM_WORLD, &ntasks) ;

MPI_Comm_rank (MPI_COMM_WORLD, &mytask) ; printf( "Hello world from task %d of %d \n" , mytask, ntasks) ;

Lệnh MPI_Finalize đóng môi trường MPI, nhưng các tác vụ song song đang chạy vẫn tiếp tục thực hiện Tuy nhiên, mọi lệnh MPI được gọi sau khi thực hiện MPI_Finalize sẽ không có hiệu lực và sẽ báo lỗi.

Ngoài ra, ta cũng có thể viết lại chương trình “Hello world” này theo ngôn ngữ C++, ta sẽ tạo một file mớihello.cc có nội dung như sau

#include int main (int argc, char∗∗ argv)

MPI: :Init(argc, argv) ; ntasks = MPI: :COMM_WORLD.Get_size( ) ; mytask = MPI: :COMM_WORLD.Get_rank( ) ; std: :cout

Ngày đăng: 16/05/2015, 01:48

HÌNH ẢNH LIÊN QUAN

Hình 1 trình bày một số ví dụ cho các cách tạo cấu trúc dữ liệu mới. Trong trường hợp truyền các cấu trúc dữ liệu không cùng kiểu, ta có thể sử dụng các lệnh MPI_Packed và MPI_Unpacked để đóng gói dữ liệu trước khi gửi. - Cơ bản lập trình song song MPI cho c c++
Hình 1 trình bày một số ví dụ cho các cách tạo cấu trúc dữ liệu mới. Trong trường hợp truyền các cấu trúc dữ liệu không cùng kiểu, ta có thể sử dụng các lệnh MPI_Packed và MPI_Unpacked để đóng gói dữ liệu trước khi gửi (Trang 15)
Hình 2: Minh họa các kiểu giao tiếp theo cơ chế tập thể - Cơ bản lập trình song song MPI cho c c++
Hình 2 Minh họa các kiểu giao tiếp theo cơ chế tập thể (Trang 17)
Bảng dưới đây tổng hợp các chế độ giao tiếp điểm-điểm và các lệnh gửi/nhận thông điệp tương ứng, thông tin chi tiết về các lệnh này sẽ được trình bày ở những phần sau - Cơ bản lập trình song song MPI cho c c++
Bảng d ưới đây tổng hợp các chế độ giao tiếp điểm-điểm và các lệnh gửi/nhận thông điệp tương ứng, thông tin chi tiết về các lệnh này sẽ được trình bày ở những phần sau (Trang 17)
Hình 3: Minh họa lệnh rào chắn - Cơ bản lập trình song song MPI cho c c++
Hình 3 Minh họa lệnh rào chắn (Trang 21)
Hình 4: Minh họa một số lệnh giao tiếp tập thể Ví dụ: - Cơ bản lập trình song song MPI cho c c++
Hình 4 Minh họa một số lệnh giao tiếp tập thể Ví dụ: (Trang 22)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w