1. Trang chủ
  2. » Luận Văn - Báo Cáo

Kỹ thuật lập trình song song trên môi trường MPI và MPICH

214 1,2K 5
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Kỹ Thuật Lập Trình Song Song Trên Môi Trường MPI Và MPICH
Trường học University of Science and Technology
Chuyên ngành Computer Science
Thể loại Luận Văn
Thành phố Hanoi
Định dạng
Số trang 214
Dung lượng 5,19 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kỹ thuật lập trình song song trên môi trường MPI và MPICH

Trang 1

BỘ KHOA HỌC CÔNG.NGHỆ CHƯƠNG TRÌNH NHÀ NƯỚC VỀ _

NGHIÊN CỨU KHOA HỌC VÀ PHAT TRIEN

CONG NGHE THONG TIN VA TRUYEN THONG

BAO CAO TONG KET KHKT DE TAI KC — 01.07

NGHIEN CUU PHAT TRIEN VA UNG DUNG

CONG NGHE MO PHONG TRŨNG KTXH VÀ ANP

(QUYỂN 2)

Cơ quan chủ trì Đề tài: HỌC VIỆN KỸ THUẬT QUẦN SỰ

Chủ nhiệm Đề tài:

e PGS.TS NGUYEN BUC LUYEN - Hoc vién KTQS

Pho CN, Thư ký khoa học:

* PGS TSKH NGUYEN CONG ĐỊNH - Học viện KTQS

HÀ NỘI - 2003

5650 - 2 xoi2I0

Trang 2

BỘ KHOA HỌC CÔNG NGHỆ CHƯƠNG TRÌNH NHÀ NƯỚC VỀ NGHIEN CUU KHOA HOC VA PHAT TRIEN

CONG NGHE THONG TIN VA TRUYEN THONG

BAO CAO TONG KẾT KHKT DE TAI KC — 01.07

NGHIEN CUU PHAT TRIEN VA UNG DUNG CONG NGHE MG PHONG TRONG KTXH VA ANOP

* PGS TSKH NGUYEN CONG ĐỊNH - Học viện KTQS

Rồychủ tri Dé tai Co quan quan ly Dé tai

HÀ NỘI - 2003

Trang 3

DANH SÁCH CÁC THÀNH VIÊN THỰC HIỆN ĐỀ TÀI KC - 01.07

Chủ nhiệm đề tài:

PGS.TS NGUYÊN ĐỨC LUYỆN Phó CN, Thư ký khoa hoc:

PGS.TSKH NGUYÊN CÔNG ĐỊNH

Các cán bộ thực hiện đề tài:

GS.TSKH Nguyễn Đức Cương _ - Viện Tên lửa, TT KHKT&CNQS

TS Lâm Văn Điệt - Viện Tên lửa, TT KHKT&€CNQS

TS Nguyễn Văn Chúc - Phân viện trưởng, Viện tên lửa

TS Phan Van Chay - Chuyên viên Viện tên lửa

TS Phạm Vũ Uy - PVI, Viện tên lửa

TS Mai Khánh - PVI, Viện tên lửa

TS Ngô Trọng Mại - Phòng MHH-MP, Viện tên lửa

GS.TSKH Dương Ngọc Hải - Viện Cơ học, TT KHTN&CNQG GS.TSKH Nguyễn Văn Điệp - Viện Cơ học, TT KHTN&€CNQG

TS Bùi Đình Trí - Viên Cơ hoc, TT KHTN&CNQG

TS Đặng Thế Ba - Viện Cơ học, TT KHTN&CNQG

TS Hà Ngọc Hiến - Vién Co hoc, TT KHTN&CNQG

TS Nguyễn Thế Đức - Viện Cơ học, TT KHTN&CNQG

Th§ Nguyễn Duy Thiện - Viện Cơ hoc, TT KHTN&CNQG

KS Nguyễn Hồng Phan - Viện Cơ hoc, TT KHTN&CNQG

KS Hà Công Tú - Viện Cơ học, TT KHTN&CNQG

CN Nguyễn Tất Thắng - Vién Co hoc, TT KHTN&CNQG

CN Nguyễn Thị Hang - Viện Cơ học, TT KHTN&CNQG

GS.TSKH Ngô Văn Lược - XNLD dầu khí Việt-Xô

TS Trương Công Tài - XNLD dâu khí Việt-Xô

TS Phạm Quang Ngọc - XNLD dầu khí Việt-Xô

TS Nguyễn Chu Chuyên - XNLD dầu khí Việt-Xô

KS Nguyễn Minh Toàn - XNLD đầu khí Việt-Xô

Trang 4

KS Nguyễn Văn Út - XNLD đầu khí Việt-Xô

TS Đàm Hữu Nghị - Bộ môn Tên lửa, Học viện KTQS

TS Nguyễn Ngọc Quý - Bộ môn Tên lửa, Học viện KTQS ThS Nguyễn Văn Quảng - Bộ môn Tên lửa, HV KTQS

Th§ Hàn Vũ Hải - Bộ môn Tên lửa, HV KTQS

'Th§ Đoàn Thế Tuấn - Bộ môn Tên lửa, HV KTQS

Th§ Nguyễn Thanh Hải

Th§ Nguyễn Trung Kiên

Ths Tran Đức Toàn

Th§ Cao Hữu Tình

KS Nguyễn Văn Trường

KS Nguyễn Đức Hải

KS Phan Tuấn Anh

CN Chu Văn Huyện

KS Nguyễn Sơn Dương

KS Bùi Tân Chinh

- Bộ môn Tên lửa, HV KTQS

- Bộ môn Tên lửa, HV KTQS

- Khoa Cơ khí, Học viện KFQS

- Khoa Cơ khí, Học viện KTQS

- Khoa Cơ khí, Học viện KTQS

- Khoa Cơ khí, Học viện KTQS

- Khoa Cơ khí, Học viện KTQS

- Khoa Cơ khí, Học viện KTQS

- Khoa Cơ khí, Học viện KTQS

- Khoa Cơ khí, Học viện KTQS

- Khoa Cơ khí, Học viện KTQS

- Khoa Cơ khí, Học viện KTQS

Trang 5

HOC VIEN KY THUAT QUAN SỰ

Trung tam Cong nghé mo phong

100 Hoàng Quốc Việt - Cầu Giấy - Hà Nội

Báo cáo tổng kết khoa học và kỹ thuật Đề tài:

KY THUAT LAP TRINH SONG SONG

TREN MOI TRUONG MPI VA MPICH

KS Cao Hữu Tình

Hà Nội, 12-2002 Bán quyển 2002 thuộc TT Công nghệ mô phỏng

Don xin sao chép toàn bộ hoặc từng phần tài liệu này phải gửi đến TTCNMP

Trang 6

HỌC VIỆN KỸ THUẬT QUẦN SỰ

Trung tâm Công nghệ mô phòng

100 Hoàng Quốc Việt - Cầu Giấy - Hà Nội

Báo cáo tổng kết khoa học và kỹ thuật Đề tài:

KỸ THUẬT LẬP TRÌNH SONG SONG

TREN MOI TRUONG MPI VA MPICH

KS Cao Hitu Tinh

Ha Noi, 12-2002

Ban thao viét xong 12-2002

Tài liệu này được chuẩn bị trên cơ sở kết quả thực hiện Đề tài cấp Nhà nước mã

số KC-01.07

Trang 7

TOM TAT

Giao diện truyền thông điệp MPI (Message Passing Interface) là một chuẩn cho các thư viện truyền thông điệp trong các môi trường song song Môi trường lập

trình MPICH sử dụng chuẩn MPI có thể hoạt động hiệu quả trên các môi trường

tính toán song song khác nhau, bao gồm các hệ thống xử lý song song xây dựng theo công nghệ kết chùm các máy tính song song MPP, các hệ thống xử lý song song hỗn hợp Tài liệu này giới thiệu cách cài đặt và khởi chạy các chương trình tính toán song song MPICH trên các hệ thống song song khác nhau giao diện lập

trình của MPI, một số thuật toán xử lý song song cơ bản và đưa ra một số vỉ dụ

nhằm giúp độc giả có cách nhìn cụ thể hơn về một chương trình song song trên MPI Thông qua tài liệu nảy, độc giả có thể hình thành phương pháp tư duy song song hoá một bài toán cụ thể của mình và triển khai viết mã lệnh chương trình song

song ở mức độ đơn giản.

Trang 8

MỤC LỤC 1.111 088 na e ố seeerree 4 CHUONG I CÀI ĐẶT VÀ SỬ DỤNG 'MPICH àecseeeirerrrrriierrrriiiere 6

1 Cài đặt JMPICH.ỏ ecccceeeHEHHR HH 6

1.1 Giải nén MPÍCH -ĂsĂ<Ÿ<<<sssse —— 6

b1» ni 89 “sẽ .ó 6

1.3 Biên dịch MPICH

1.4 Biên dịch và chạy một chương trình XIPI đơn giản « ec.eecee

1.5 Cầu hình thư viện đồ hoạ MPE s-22C2rerrEECrtrtErkrerrrrkkerErrrkerrtkrkerrretkkerrree 10

1.6 Tăng tốc công việc khởi động . «o exektrieetiietiitiin.teirrke 10

2 Sử dụng MPICH

2.1 Tạo chương trình song song ÏMPÌ] «Series

2.2 Sử dụng mô hình tính toán SPÌMÌD -cceeeirkierirrrrarerrriree 14 2.3 Liên kết và chạy chương trình -« ss-sxeorvzerrkeehrkerreerEerkrretskEkxrkerkzrrrrerkree 16

2.3.1 Các kịch bản đề liên kết và biên dịch chương trình _— l6

2.3.1 Fortran 90 và modul MPI 17 2.3.2 Dịch và liên kết không dùng lệnh 17 2.3.3 Chạy chương trình với mpirun 17

2.4 Đặc tính của các hệ théng phan tan .ssesccssssessccssssesecsecnvsesssssnsensssnsceceeonsesetsenssnssensesatees 20 2.4.1 Hé théng cluster 20

2.6.1 Tạo các logfile 36 2.6.2 X graphic song song 37 2.6.3 Các hàm MPE khác 38 2.6.4 Thư vién profiling 38 2.6.5 upshot và nupshot 40

2.6.7 Slog và Jumshot-3 4I 2.6.8 Truy cập thư vién profiling 42 2.6.9 Tự tạo thư viện profiling 44 2.6.10 Cac céng cu quan ly thu vién profiling 45

2.7 Bắt lỗi chương trình MPI với cdc cOng CU C6 SAM csssssessssesecssssesssssseescrssecessnsscscssseenecsanecs 46

Trang 9

2.7.1 Xử lý lỗi

3.7.2 Tham số dòng lệnh cho mpirun

2.7.3 Cac tham số MPI cho chương trình ứng dụng

2.7.5 Tham số dòng lệnh cho các chương trình ứng dụng

2.7.6 Khoi động chương trình với một trình bắt lỗi

2.7.7 Khởi động một chương trình bắt lỗi khi lỗi xảy ra

2.7.8 Gắn trình bắt lỗi với một chương trình đang chạy

2.7.9 Các công cụ có liên quan 2.7.10 Nội dung của các file thư viện

2.8 Bắt lỗi chương trình MPI với TotalV]eW HH HH HH0 ngan rerie

2.8.1, Chuẩn bị MPICH cho việc bắt lỗi bằng TotalView

2.8.2 Khởi động một chương trình MPICH dưới sự kiểm soát của TotalView

2.8.3 Gắn với một chương trình đang chạy 2.8.4 Bắt lỗi với Total View

Chương II: lập trình trên môi trường ÌMÍPÏ c «sec ch ngưng Heo

1 Các kiểu dữ liệu trong MPÌ -«- ——-

2 Tạo và quản lý tiến trình

2.1 Mô hình xử lý của MPI-2 2.2 Giao diện quản lý tiến trình

2.3 Ví dụ

3 Truyền thông một chiều

5.2 Thao tac flie

Trang 10

3.3 Khung nhìn của file 102

3.4 Truy nhập đữ liệu 104

%.5 Thao tác giữa các phần của file 127 5.6 Xử lý lỗi vào ra 133 5.7, Các lớp lỗi vào ra 133

6 Liên kết ngôn ngữ - «sex 112 114111172841211212177114- Tp 134 6.1 Liên kết À{PI với ngôn ngữ C++ 134 6.2 Cac lép C++ sty dung trong MPI 135 6.3 Cac ham thành viên của lớp sử dụng cho MPI 136

6.5 Kiểu dữ liệu trong C++ 137 6.6 Các bộ truyền thông 138 6.7 Sự loại trừ 139 6.8 Khả năng hồn hợp ngôn ngữ 140 Chương 3: Thuật toán và HS dỤIH co con HH g4 12111 141

1 MOt 86 k¥ thudt song song HOO csccssseteccssecccuesesesccousecersnosssetecensesenscsenseteenesecsonetecussserene

2 Các thuật toán sắp xếp so sánh và trao đổi

2.1 So sánh và trao đổi 142 2.2 Sắp xếp sủi bọt và sắp xếp chuyển vị chấn - lẻ 145 2.3 Sắp xếp hai chiều 149

2.6 Sắp xếp nhanh trên một siêu lập phương 155

3 Nhân ma trẬN cac HH HH T1 TH Tàn TH TH Hang TH gà HH g7 gà nghi 160

5.3 Biến đổi Fourier nhanh (FFT) 172

Chương 4: Một số ví dụ xử lý song song trên mịpi "— 179 Phụ lục 1: Thiết lập cấu hình hệ thống máy tính song song AlphaServer cho phép truy

TGP ẨÙ X( nen HH HT HH TH Tạ KH cung gờ 197

Phụ lục 2: Cài đặt Red Hat V6.2 trên máy DS10 Alphd e.e-ceeeceeseseerre 204 Kết lUẬN HH KH HH TH TT TT TH T111 rke 207

Trang 11

LỜI NÓI ĐẦU

Máy tính song song là phương tiện không thể thiếu trong giải quyết các bài toán yêu cầu khối lượng tính toán hoặc không gian nhớ lớn thuộc nhiều lĩnh vực khác nhau Có nhiều vấn đề cần được tìm hiểu khi áp dụng kỹ thuật xử lý song song, bao gồm cả kiến trúc vật lý và kỹ thuật lập trình Tài liệu này được xây dựng trong khuôn khổ để tài KC-01.07, "Nghiên cứu phát triển và ứng dụng công nghệ mô phỏng trong KTXH&ANQP", do PGS TS Nguyễn Đức Luyện chủ trì, nhằm giới thiệu các kết quả nghiên cứu kỹ thuật lập trình song song sử dụng thư viện truyền thông điệp MPI trên hệ thống máy tính song song xây dựng theo công nghệ kết chùm tại Trung tâm Công nghệ mô phỏng - Học viện Kỹ thuật quân sự

Trong tài liệu, chương 1 hướng dẫn cách cài đặt và sử dụng môi trường lập trình song song MPICH Kết thúc chương này, độc giả có thể thiết lập môi trường MPICH cho một hệ thống xử lý song song theo công nghệ kết chùm (các máy tính được kết nối mạng với nhau) hặc một siêu máy tính song song Cách biên địch, khởi chạy, bắt lỗi chương trình song song MPICH cũng được trình bày ở đây

Chương 2 giới thiệu giao diện lập trình của MPI - một thư viện hỗ trợ hàng

trăm thủ tục lập trình song song truyền thông điệp Do thư viên MPI có rất nhiều thủ

tục nên chúng tôi chỉ giới thiệu giao diện lập trình của các thủ tục cơ bản, các thủ tục này được xếp theo nhóm chức năng nhằm giúp độc giả tiện so sánh và sử dụng

Chương 3 của tài lêu giới thiệu thuật toán song song hoá một số ứng dụng cơ bản, tổng quan về kỹ thuật phân chia bài toán - bước tất yếu của xử lý song song

Chương 4 là một số ví dụ chương trình song song Thông qua các ví dụ này, độc giả có cách nhìn cụ thể một chương trình song song Vận dụng

phương pháp tư duy của chương 3, sử dựng giao điện lập trình của các thủ tục MPI giới thiệu ở chương 2 và kết hợp với ngôn ngữ lập trình C hoặc C++, độc

giả có thể viết chương trình song song giải quyết bài toán cụ thể của mình ở

mức độ đơn giản

Phụ lục 1 của tài liệu cung cấp kỹ thuật thiết lập cấu hình phần cứng

một hệ thống xử lý song song kết chùm và cách thiết lập cấu hình phần mềm

Trang 12

cho phép truy nhập và sử dụng hệ thống xử lý song song từ xa Phụ lục 2 là các điểm lưu ý khi cài đặt hệ điều hành RedHat trên máy AlphaServer

Mặc dù đã rất cố gắng trong quá trình hoàn thiện tài liệu nhưng chắc chắn

còn có sai sót Các tác giả rất mong nhận được sự đóng góp của bạn đọc!

Moi đóng góp xin liên hệ theo địa chỉ: Trung tâm Công nghệ Mô phỏng, Học viện KTQS, điện thoại: 069.5155 17, e-mail: ncdinh@hn.vnn.vn

Trang 13

CHUONG I CAI DAT VA SU DUNG MPICH

1 Cài đặt MPICH

1.1, Giải nén MPICH

MPICH-1.2.0 thường được lưu dưới dạng file nén, có thể là mpich.tar.Z

hoặc mpich.tar.gz Tuy theo định đạng của file nén ta tiến hành giải nén bằng lệnh sau:

gunzip —c mpich.tar.gz | tar xovf—

hoặc

zcat mpich.tar.Z | tar xovf—

Các lệnh trên sẽ tự động tạo thư mục z¡ch Thư mục này chứa các thư mục

con bao gồm tất cả các chương trình nguồn, một số tài liệu hướng dẫn, các trang man hỗ trợ tra cứu nhanh, các thư viện MPI và MPE, các chương trình ví dụ Chỉ

tiết về nội dung và cách sử dụng các thư mục trên được trình bày trong mục II - Hướng dẫn sử dụng MPICH

1.2 Cấu hình MPICH

MPICH có thể được cấu hình với nhiều loại máy tính song song: IBM SP, Intel Paragon & IPSC860, HP Exemplar, NEC SX-4, va các hệ thống đa xử lý của IBM, SGI, HP, SUN MPICH hỗ trợ cho các máy trạm nhu ho SUN4 (ca SunOS va Solaris), Hewlett-Packard, DEC3000 & Alpha, ho IBM RS/6000, va SGI MPICH

cũng hỗ trợ các hệ thống Intel x86 sử dụng hệ điều hành LINUX Có rất nhiều tham

số trong lệnh cầu hình cho MPICH Ta có thể đùng

configure —usage

để xem danh sách đầy đủ các tham số này Trong các tham số đó, có ba tham số

quan trọng liên quan đến cấu hình của hệ thống, đó là -arch, =comm và —device

-arch=ARCH_ TYPE

ARCH_TYPE: loai kién trúc máy tính Các kiến trúc máy tính được chấp

nhận là: (dưới đây chỉ nêu ra một số kiến trúc thông dụng)

solaris (Solaris)

Trang 14

solaris86 (Solaris các kiến trúc máy Intel)

rs6000(IBM RS6000)

sgi (Silicon Graphics IRIX 4.x, 5.x, hodc 6.x)

intelnx (Intel 1860 hoac Intel Delta) paragon (Intel Paragon)

CRAY (CRAY XMP, YMP, C90, J90, T90) Cray 3d (CRAY T3D)

LINUX (Các máy tính cá nhân chạy LINUX)

-commnu=COMM_TYPE

COMM_TYPE: Dạng truyền thông trong hệ thống Có hai dạng truyền thông

phổ biến trong các hệ thống xử lý song song là:

ch_p4: cho phép sử dụng thiết bị truyền thông p4 trong hệ thống bộ nhớ phân tán (đặt mặc định)

shared: cho phép sử dụng thiết bị truyền thông p4 trong hệ thống xử lý

song song có bộ nhớ phân chia

-device=DEVICE

DEVICE: Thiết bị truyền thông sử dụng trong hệ thống Các thiết bị truyền

thông được cung cấp là:

ch_p4: Thiết bị p4 Đây là thiết bị tương đối phổ dụng sử dụng giao

thức truyền thông TCP/IP

ch_mpi: Dùng trong máy [BM hoặc MPL

ch shmem: Dùng trong các hệ thống có bộ nhớ đùng chung, như SMP globus: Thiét bi Globus

SERVERNET: _Thiét bi ServerNetII

Tham sé -prefix=INSTALL_DIR

INSTALL _DIR: Thu muc dé cài đặt MPICH.

Trang 15

Tất cả các tham số của lệnh configure c6 thể được phép lựa chọn Tuy nhiên,

nếu các tham số -arch, -comm, -prefix duge chỉ định thì chúng chỉ được đưa ra một

lần -arch phải xác định trước -comm néu dig ca hai tham sé

Ví dụ thiết lập MPICH cho một mạng máy Intel:

Chuyên đến thư mục chứa MPICH sau khi giải nén, nhập lệnh

./configure —-device=ch_p4 —arch=LINUX —prefix=/usr/local/mpich_1.2 Một số chú ý khi cấu hình MPICH:

- _ Đối với các mạng không đồng cấu, có thể ta phải cầu hình với lựa chọn -

no_shor! longs Với lựa chọn này, MPICH không cung cấp dạng long double trong C Như vậy có thé lợi dụng được hiệu năng của các bộ phận

trong hệ thống có độ dài dạng đữ liệu bằng nhau với các bộ phận có độ

dài dữ liệu khác nhau (ví dụ, các máy Intel x86 có 12 byte (80 bit) long double, trong khi nhiéu hé thông khác sử dụng 8 byte hoặc 16 byte)

- Để sử dụng trình bắt lỗi TotalView, ta phải cấu hình MPICH với cờ -

/make >& make.log

*Cầu hình MPICH cho hệ thống đa thiết bị hoặc đa kiến trúc:

Khi cầu hình nhiều phiên bản MPICH đẻ sử dụng với các thiết bị hoặc cấu

trúc khác nhau, ta cần phải câu hình cho mỗi thiết bị và kiến trúc một thư mục riêng

lẻ Ví dụ để cài đặt MPICH cho cả thiết bị ch_p4 và ch_shmem trên hệ thống

Solaris, các lệnh như sau:

/configure —device=ch_p4 —prefix=/usr/local/mpich_1.2/solaris/ch_p4

make >& make.log

make install

Trang 16

/configure —-device=ch_shmem —

prefix=/usr/local/mpich_1.2/solaris/ch_shmem

make >& make.log

make install

1.4 Biền dịch và chạy một chương trình MPI đơn giản

Đề kiểm tra tính đúng đắn của quá trình cài đặt, ta có thể chạy một số chương

trình đơn giản trong thư mục chứa các ví dụ của MPICH, Nếu hệ thống là một mạng

các máy trạm, ta cần chỉ định tên các máy sẽ chạy chương trình Mục này trình bày

một cách ngắn gọn cách cấu hình tên máy để hệ thống có thể hoạt động với nhiều

tiến trình Chỉ tiết cho công việc này được trình bày trong mục 2

Soạn thảo trong file mpich/util/machines/machines.xxxx tên các máy của kiến

trúc xxxx tương ứng (xxxx được tạo tự động khi cấu hình MPICH) Khi thực hiện

mpirun, số tiễn trình yêu cầu (tham số -np) sẽ được chạy trên các máy có tên liệt kê trong file này Nhờ tính năng đơn giản này mà ta có thể chạy nhiều tiến trình trên

một máy đơn bằng cách viết tên của máy (host name) trên nhiều đòng trong file

machines.xxxx Ví dụ của một file machines.LINUX có thể như sau:

may]

may2 may3 may4 may5 Các tên máy nên đưa ra giống như với kết quả thực hiện lệnh hostname Vi

dụ nếu kết quả thyc hién hostname trén máy 1 là machinel.edu, tương tự trên các máy 2 và máy 3 là machine2.edu, machine3.edu, thì file machines.xxxx sẽ là:

machinel.edu machine2.edu machine3.edu

Để chạy chương trình test trong thu muc examples/test, ta can it nhất 5 dòng

tên máy trong file machines.xxxx

Trang 17

Đối với các nút có nhiều bộ xử lý, ta cần khai báo số bộ xử lý bên cạnh tên

của nút đó Ví dụ, nếu máy 2 có bến bộ vi xử ly thì file machines.xxxx sẽ là:

machine 1.edu machine2.edu:4 machine3.edu

*Vi du: Bién dich va chay chuong trinh cpi.c

cd examples/basic

make cpi (biên địch chương trình tính số pi) 1n —s / /bin/mprrun mpirun

.mpirun —np 4 cpi (chạy chương trình cpi trên 4 tiến trình)

1.5 Cấu hình thư viện đồ hoạ MPE

Thư viện MPE được cấu hình và cải đặt như một phần mở rộng của phiên

bản MPI hiện tại hoặc được cấu hình một cách tự động trong khi cấu hình MPICH

và tạo tiến trình Hiện nay, MPE đã được cầu hình để chạy với MPICH, MPI của LAM, SGI, IBM va CRAY

Cách đơn giản nhất là cầu hình MPE như một phần của qúa trình cấu hình

MPICH và tạo tiến trình

Trong cách cấu hình này, không yêu cầu một chuyển đổi hay cờ nào Câu hình trên thư mục gốc của MPICH sẽ chứa các thông tin cần thiết và chuyên thông tin này đến thư muc mpe va jumpshot Khi này, thư viện MPE và công cụ,đồ hoạ

jumpshot sé tự động được câu hình

Sử dụng lénh mpeinstall để cài đặt thư viện MPE và jumpshot Cách sử dụng

các công cụ đồ hoạ upshot, nupshot và Jumpshot-3 được trình bày trong mục 2

1.6 Tăng tốc công việc khởi động

Khi sử dụng thiết bị ch p4, đôi khi cần tăng tốc quá trình khởi động bằng

cách sử dụng chương trình phục vụ bảo mật Chương trình phục vụ bảo mật chạy

trên các máy được liệt kê trong file zmachines.xxxx, nó giúp các chương trình chạy

nhanh hơn Có hai phương pháp để cài đặt chương trình này: cài đặt cho một người

sử dụng và cài đặt cho tất cả mọi người đều sử dụng được

Để chạy chương trình phục vụ bảo mật, thực hiện các bước sau:

Trang 18

1 Chọn công: Đây là một số sẽ được quy định là định danh của chương

trình phục vụ bảo mật Tết nhất là chọn số lớn hơn 1000 Nếu chọn một

số đang sử dụng thì chương trình phục vụ bảo mật sẽ thoát, ta phải chọn

số khác Trong nhiều hệ thống, ta có thể dùng lệnh rpcinfo đề biết công

nào có thể sử dụng được Ví dụ để tìm các công đang sử dụng trên máy

cé hostname 1a mysun, ta ding lệnh như sau:

3 Khới động chương trỉnh phục vụ bảo mat:,

sbin/chp4_servs —port=n ~arch=$ARCH

Lệnh trên khởi động chương trình phục vụ bảo mật bằng các lệnh từ xa (rsh, remsh hoặc ssh); nếu không dùng được các lệnh từ xa, ta phải log vào từng

hệ thống để khởi động Lệnh để khởi động riêng một dịch vụ sử dụng cổng

2345 là:

serv_p4 -o -p 2345 &

Nếu ta dang ding dich vụ bảo mật, dùng lệnh tương tự Ví dụ, nễu ta đã chọn

công 2345, máy Solaris, thi dong lệnh

sbin/chp4_servs —port=2345 —arch=solaris

sẽ lưu giữ một bản ghi hoạt động của dịch vụ trong fñle có tên

Secure_Server.Log.xxxx trong thư mục hện thời (xxxx là định danh của tiễn trình khởi động địch vụ)

4 Để chương trình phục vụ bảo mật chạy với znpirun, ta phải khai báo tham

số -p4ssporr n trong dòng lệnh Ví dụ, nếu cổng là 2345 và ta muốn chạy

chương trình cpi trên 4 tiến trình, dùng

mpirun —np 4 ~p4ssport 2345 cpi Một cách khác để khai báo chương trình phục vụ bảo mật cho mpirun 1a sit dụng biến môi trường Trong C-shell, đặt

Trang 19

setenv MPI_USERP4SSPORT yes setenv MPI_P4SSPORT 2345

Khi này không cần khai báo tham s6 -p4ssport cho mpirun nữa

* Kết thúc các dịch vụ

Đề kết thúc các dich vụ, dùng lệnh

pfps —all -tn serv_p4 —and -o S$LOGNAME -kil INT

* Quan ly cac dich vu

Chương trình thuc nghiém perl5 gitp ta quan ly cac dịch vụ bảo mật Chương trình nay la chkserv trong thư mục s;iz Ta có thể dùng chương trình nay

dé kiểm tra các dich vụ đang chạy, khởi động một địch vụ mới, kết thúc một dịch vụ

đang chạy

Trước khi dùng kịch bản này có thể ta phải soạn thảo nó; kiểm tra các giá trị thích hợp với serv_p4 số cổng, danh sách máy Để kiểm tra trạng thái các dịch vụ dùng

chkserv —port 2345

Để khởi động lại một dịch vụ đã bị dừng, sử dụng

chkserv —port 2345 —restart

Lệnh trên khởi động lại dịch vụ đang sẵn sàng chạy

Lệnh chkserv —port 2345 —kill sẽ thoát tất cả các dich vụ

2 Sử dụng MPICH

MPICH là một chương trình theo chuân MPI miễn phí chạy trên nhiều hệ

thống Trong tài liệu này, chúng tôi giả định MPICH đã được cài đặt trong thư mục /home/mpirunner/mpich Nếu MPICH được cài đặt ở một nơi nào khác, ta cần thực

hiện một số thay đổi cần thiết Nếu MPICH đã được xây dựng riêng cho các cầu trúc và/hoặc các cơ chế giao tiếp khác nhau (được gọi là thiết bị trong MPICH), ta phải chọn đúng đường dẫn; kiểm tra với những máy trạm khác trong cluster

2.1 Tạo chương trinh song song MPI

Tất cả các thủ tục của MPI — 1 được bất đầu bằng MP!_, ký tự đầu tiên của

tên thủ tục phải viết hoa Phiên bản MPI - 2, ðƒPjJ_ được thay bằng A/Pi:: và được

12

Trang 20

coi như một lớp voi tén ticu dé la "MPI++.h" trong lap trinh C++ Thong thường trị

trả về của các thủ tục là thông tin về sự thành công hay lỗi của lệnh gọi

Cũng như PVMI và tất cá các hệ thống truyẻn thông điệp khác tính toán song song được phản rã thành các tiến trình đồng thời Tạo và khởi động các tiến trình MPI không được xác định trong thư viện MPI và sẽ tuỳ thuộc vào chương trình thực thi MPI-I chi tạo tiến trinh tinh, nghia là tất cả các tiến trình phải được xác định

trước để tạo và khởi động đồng thời

Một chương trình có thể được viết và thực hiện bởi nhiều bộ xử lý, đây là mỏ hình tính toán đơn chương trình đa dữ liệu (SPMD) Một chương trình chạy của MPI được khới động bằng dòng lệnh Ví dụ một chương trình chạy MPI có thể được khởi động như nhau trên các bộ xử lý riêng biệt một cách đồng thời bằng lệnh (chỉ tiết xem trong mục 2.3.3):

Khi gọi hàm của thư viện MPI - !, mã phải được bắt đầu bằng hàm

MPI_Init(), két thic 1a ham MPI_Finalize(), (néu str dung thu vién MPI — 2 tương

ứng sẽ là MPI::Init() và MPI::Finalize() trong lập trình C++) Các đối số của dòng lệnh được truyền qua lệnh MPJ_ Tnu() để cho MPI thiết lập không gian hoạt động

Trang 21

MPI_Finalize(); /* Kết thúc MPI */

}

Ban đầu tất cả các tiến trình trở thành thành viên cua hé thong (universe) gol

là MPI_COMM_WORLD và mỗi tiến trình có một thứ tự nhất định (bậc duy nhất - unique rank) tương ứng số từ 0O đến n-l n là số tiến trình Trong MPI MPI_COMM_WORLD là một bộ truyền thông (communicator) xác định phạm vị

của hoạt động truyền thông các tiến trình được kết hợp các bậc với bộ truyền thông

Các bộ truyền thông khác có thể được thiết lập cho các nhóm của các tiến trình Đối với các chương trình đơn giản chỉ cần bộ truyền thông MPI_COMM_ WORLD là

đủ

2.2 Sử dụng mô hình tính toán SPMD

Trong mô hình SPMD mỗi tiến trình thực hiện cùng một mã, mặc dù thông

thường trong tất cả các trình ứng dụng, một hoặc vài tiến trình cần thực hiện mã khác nhau Để thuận tiện điều này trong chương trình đơn, các câu lệnh được đưa vào để lựa chọn các đoạn mã sẽ được thực hiện bởi mỗi bộ xử lý Do đó, mô hình SPMD không loại trừ phương pháp chủ/tớ (Master/Slave), tuy nhiên phương pháp

này chỉ thực hiện được khi cả mã mas/er và siave cùng trong một thương trình (xem

đoạn mã dưới đây)

main, (int argc, char *argv{]) {

Trang 22

slave();

MPI_Finalize();

Trong doan mii trén, master() va slave() la các thủ tục được thực hiện bởi tiến trinh master va slave tuong tmg Phuong phdp nay co thé sit dụng cho lớp bài toán

có hơn hai mã tuần tự Thuận lợi của mô hình SPMD là các đối số của dòng lệnh có

thể được truyền cho mỗi tiến trình Ví dụ:

MPI_Comm rank(MPTI COMM WORLD, &myrank) ;

(trong đó x, y trong tiến trình 0 và tiến trình 1 hoàn toàn độc lập nhau)

Trong các trường hợp kích thước của đữ liệu thay đối, bộ nhớ nên được cấp

Trang 23

2.3 Liên kết và chạy chương trình

MPICH cung cấp các công cụ đơn giản hoá việc tạo các file chạy MPI Do

các chương trình MPICH có thể yêu cầu các thư viện đặc biệt và tuỳ chọn khi biên

dịch ta sẽ dùng các lệnh mà MPICH cung cấp để biên địch và chạy chương trình

2.3.1 Các kịch bản để liên kết và biên dịch chương trình

MPICH cung cấp 4 lệnh để liên kết và biên dịch chương trình: C (mpicc) Fortran77 (mpi77) C++ (mpiCC) va Fortran 90 (mpi90)

Cac tuy chon sau day duoc hé tro:

- Phién ban mpilog Build c6 thé tao ra cac file log MPE

- Phién ban mpitrace Build có thé tao ra traces

- Phiên ban mpianim Build c6é thé tạo ra ảnh động (real time annimation)

- Show thuc hién hién thị các lệnh mà hoản toàn không chạy chúng Dùng các lệnh trên bình thường như các trình biên dịch C, Fortran 77, C++, hay Fortran

Vị dụ:

mpicc —c Íoo.c mpif77 —c foo.f - mpiCC —c foo.C mpif90 -c foo.f

va

mpicc 0 foo foo.o mpIf77 —o foo foo.o mpiCC —o foo foo.o mpif90 —o foo foo.o

Các lệnh của trình liên kết có thể cần thêm các thư viện Vi du, để dùng các

lệnh trong thư viện math của C, dùng

mpicc —c foo foo.c -Im Két hợp công việc biên dịch và liên kết trong một câu lệnh, các lệnh như sau:

mpice —o foo foo.c mpif77 —o foo foo.f

Trang 24

mpICC —o foo foo.C mpif90 ~o foo foo.f

có thể áp dụng được

Chú ý hậu tế c đối với các chương trình của C và ,ƒ đối với chương trình của

Fortran 70 1a theo chuẩn nhưng không có chuẩn cho các hậu tố của chương trình

C++ và Foriran 90 Các lệnh trên được nhiều hệ thống chấp nhận nhưng không phải

tất cả các hệ thông

2.3.1 Fortran 90 va modul MPI

Khi lập trình MPICH, chương trinh cai dat sé tim kiém trinh bién dich Fortran 90, và nếu tim thấy, hai modul của MPI sẽ được xây dựng Một modul chứa các lệnh MPI không cần tham số lựa chọn, mô đun còn lại sẽ chứa tat cả các lệnh

MPI còn lại Tham số lựa chọn là tham số có thể nhận bất kỳ kiểu đữ liệu nào, tiêu

biểu chúng là các bộ đệm trong các hàm giao tiếp của MPI như MPI_Send va

MPI Recy Hai mé dun trén cd thé truy cap bang 2 lua chon —nochoice va —choice

cho mpj90 Mô đun có tham số chọn chỉ nhận một số hữu hạn các kiểu đữ liệu (số

vô hướng, mảng một chiều và mảng hai chiều) Đây là một tính năng còn đang thử

nghiệm nên có thể xây ra lỗi khi sử dụng

2.3.2 Dịch và liên kết không dùng lệnh

Trong một số trường hợp, không thể dùng lệnh được cung cấp bởi MPICH

để biên dịch và liên kết chương trình Ví dụ, một công cụ khác có các lệnh biên

dịch riêng Trong trường hợp này, ta có thể dùng ~compile_info và —link_info dé c6 các lệnh biên dich của MPICH, hiện các cờ biên dịch và thư viện liên kết cần thiết

để các lệnh của MPICH hoạt động chính xác Ví dụ, khi dùng thiết bi ch_shmem trên các hệ thống Solaris, thư viện luồng (-/reađ) cần phải được liên kết với

chương trình Nếu thư viện luồng không có, chương trình sẽ vẫn được liên kết,

nhưng các lệnh cần thiết sẽ được thay thế bởi phiên bản tạm thời nằm trong thư viện

€ của Solaris, làm cho chương trình không hoạt động được

2.3.3 Chạy chương trình với mpirun

Để chạy một chương trình MPI, dùng lénh mpirun trong thư mục

/home/mpirunner/mpich/bin Déi voi hầu hết các hệ thông, ta có thể dùng lệnh

Trang 25

mpirun —np 3 vidu.out

dé chay chuong trinh vidu out trén 3 tiến trình (nên chọn số tiến trình bằng số bộ vi

xử lý) Lệnh zmpirun —heïlp sẽ cho ta một danh sách các tuy chọn

Khi thoát ra mpirun trà về trạng thái 0, khi MPICH phát hiện ra lỗi nó trả về trạng thái khác 0

a SMP cluster

Khi dung mét cluster cia da xtr ly Symmetric (SMPs) voi thiét bi ch_p4

(được thiết lap voi -comm=shered), ta co thể kiểm soát sẽ tiễn trình giao tiếp với bộ

nhớ dùng chung trên mỗi nút SMP Đầu tiên, can sira file machines.xxxx (xem muc 1) để hiện số tiến trình cần phải khởi động trên mỗi máy Thường thì số lượng này không lớn hơn số lượng vi xử lý Trên các máy SMP có sô lượng vi xử lý lớn con

số này phải nhỏ hơn l so với số lượng vi xử lý do phải để dành 1 vi xử lý cho hệ điều hành Định dạng của nó rất đơn giản: mỗi dòng của file machines.xxxx Xác

Mặc định thì znpirun chỉ dùng một tiến trình trên mỗi máy (cụ thể hơn là nó

không dùng bộ nhớ dùng chung để giao tiếp giữa các tiến trình) Bằng cách thiết lập

biến môi trường MPI MAX CLUSTER_SIZE một giá trị nguyên duong, mpirun

sẽ sử dụng các tiến trình tới tối đa số lượng tiến trình bằng số đã thiết lập, dùng

chung bộ nhớ để giao tiếp giữa các tiến trình, trên một máy Ví dụ nếu MPILMAX CLUSTER SIZE co giá trị bằng 5, khi đó

mpirun —np 11 với file machines.xxxx nhu trén, sé tao | tiến trình trên mỗi máy nođel, node2 và

node3, 3 tiễn trình trên máy node4 (do đặt node4:3) và 5 tiến trình trên may node5

18

Trang 26

(bởi vì node5 có L0 tiễn trình mà chỉ có Š tiễn trình được yêu cầu) Nếu 12 tiễn trình được yêu cầu, mpirun sẽ chạy lại từ đầu file machines.xxxx, tao thém I tiến trình

trên nodel vì gia tri MPI MAX CLUSTER SIZE không cho phép mpirun khởi động tiến trình thứ 6 đùng chung bộ nhớ trên node5

b Cấu trúc đa xử lý

Khi sử dụng thiết bị p4 trên nhóm các máy trạm, cầu trúc đa xử lý có thể

được sử dụng bằng cách đưa nhiều lần tham số -arcb và —np Ví dụ, để chạy một

chương trình trên 3 máy intel va 2 máy alpha, với máy local là intel, sử dụng lệnh

như sau:

mpirun -arch Intel —np 3 -arch alpha —np 2 vidu Điều này giả định là chương trình v¿Zu sẽ chạy là giống nhau trên cả 2 máy Nếu chương trình khác nhau, xâu *#ø” sẽ thay thế tên ørcb Ví dụ, nếu chương

trình là các tên vidu intel va vidu.alpha, thi lệnh như sau:

mpirun -arch intel —np 3 -arch alpha —np 2 vidu.%a Nếu thay vào đó các chương trình ở các thư mục khác nhau, ví dụ: /tmp/intel

và /tem/alpha, lệnh sẽ là:

mpirun ~arch intel -np 3 ~arch alpha —np 2 /tmp/%a/vidu Cần phải đưa ra các cấu trúc với -arch trước khi đưa ra số lượng vi xứ lý, và

lénh arch dau tiên phải chỉ tới vi xử lý mà công việc sẽ bắt đầu Nếu lệnh —zoiocal

không được xác định, thi lệnh arcj đầu tiên phải trỏ tới vi xử lý mà mpirun đang , chạy

Khi chạy trên nhiều máy dùng thiết bị globus, zmpiruw cũng được sử dụng, nhưng các kỹ thuật khác sẽ được áp dụng để kiểm soát các chương trình con thực

hiện như thế nào (xem mục 2.4.3)

2.3.4 Điều khiên sâu hơn

Để điều khiển sâu hơn quá trình dịch và liên kết chương trình của MPICH, ta

nên sử dụng một Makefile tốt hơn là đưa Makefile cho mỗi hệ thống Có thể dùng một mẫu Makefile va ding mpireconfig dé chuyén ban mau Makefile thành một

Makefile hoan chỉnh Để lam diéu nay, bat dau bang file Makefile.in ¢

/home/mpirunner/mpich/examples Sta Makefile nay cho phi hợp với chương trình

và sau đó nhập lệnh

Trang 27

đó các chương trình song đang chạy Có 3 kiểu môi trường xử lý song song cơ bản:

Xử lý song song, nhóm các máy trạm (hoặc cluster), và tích hợp các môi trường

phân tán bao gồm các máy tính song song và các máy trạm - gọi là Computatinal Grids Thường thì các máy tính song song cung cấp một cách tích hợp và tương đối

dé dang dé chạy các chương trìng xử lý song song Các hệ thống cluster và lưới thường không có một phương pháp chuẩn để chạy chương trình song song, để hoạt động được ta cần phải tiễn hành một số thay đổi trong cài đặt và sử dụng MPICH

Chương trình MPICH được thiết kế để che giấu những khác biệt về môi trường Tuy nhiên, nếu cần những đặc tính cho tuỳ chọn hay gặp lỗi khi chạy chương trình,

ta cần phải biết sự khác biệt giữa các hệ thống trên Dưới đây trình bày các đặc tính

của hệ thống cluster, grids line (như được hỗ trợ bởi thiết bị globus), và một số hệ thông song song phổ biến; một số thay đổi cần thiết để chạy chương trình song song trên các hệ thống tương ứng

như một MPP do đó cần thêm thông tin để sử dụng chúng MPI cần phải được cài

đặt có danh sánh các máy trạm tham gia trong file machines.xxxx trong thư mục

/home/mpirunner/mpich/share File này được dùng bởi mpữwn đề chọn vì xử lý sẽ chạy (sử dụng nhóm đa dạng nêu sau đây)

Mục này sẽ trình bày một số chỉ tiết của quá trình trên và cách tìm lỗi Các

lệnh chỉ áp dụng cho thiết bị ch_ p4

20

Trang 28

a Kiểm tra danh sách các máy

Dùng lệnh tstmachines trong /./mpich/sbin để kiểm tra khả năng làm việc

của các máy trong hệ thống Lệnh này thực hiện một rsử và một danh sách thư mục

một cách ngắn gọn Chức năng của lệnh này là kiểm tra khả năng truy cập đến mỗi nút và xem chương trình ở thư mục hiện tại có hiển thị được trên máy ở xa hay không Nếu có bất kỳ một lỗi nào, nó sẽ đưa ra để sửa

Tham số duy nhất cho lệnh tstmachines la tén của cấu trúc, nó cùng tên với phần mở rộng trên file zachines.xxxx Ví dụ:

/home/mpirunner/mpich/bin/tstmachines intel

kiểm tra xem một chương trình ở thư mục hiện thời có thể thực hiện bởi tất cả các

máy tính trong danh sách các máy ¡ntel Chương trình sẽ không có thông điệp gì nếu nó làm việc tốt Có thể xem chương trình đang thực hiện gì bằng tham số -v (verbose):

/home/mpirunner/mpich/bin/tstmachines —v intel Lệnh này sẽ cho kết quả như sau:

trying true on host1.uoffoo.edu

trying true on host2.uoffoo.edu

trying Is on host1.uoffoo.edu

trying Is on host2.uoffoo.edu

trying user program on host1.uoffoo.edu

trying user program on host2.uoffoo.edu

Néu tstmachines tim thấy lỗi, nó sẽ đưa ra nguyên nhân có thể và giải pháp

b Sur dung shell bao mat _ _

Xem muc I - Awéng dan cai dat MPICH dé thiét lập môi trường sao cho

ch_p4 str dung ssh thay vi rsh

c Sứ dụng chương trình phục vụ bảo mật

- Đơ mỗi máy trạm trong-cluster thường-yêu cầu-người dùng mới đăng nhập vào, và vì quá trình này mất rất nhiều thời gian nên MPICH cung cấp một chương trình có khả năng tăng tốc cho quá trình này Đó là chương trình phục vụ bảo mật

và được đặt trong serv_p4 trong thu muc /home/mpirunner/mpich/bin Lénh

chp4_serv trong cling thư mục có thể dùng để khởi động serv_p4 trén các máy tram

Trang 29

mà trên đó ta có thể dùng các chương trình Có thể khởi động chương trình phục vụ này bằng tay và cho chạy ở chế độ nên, điều này phù hợp với các máy không chấp nhận kết nỗi nhưng trên đó ta có account

Trước khi khởi động chương trình phục vụ này, cần kiểm tra xem chương trình đã được cài đặt cho mục đích tổng quát chưa; nếu đã cai dat thì người dùng nào cũng có thể sử dụng chương trình Nếu chương trình chưa được cài đặt thì ta nên cài đặt để sử dụng mà không cần phải có đặc quyền gì:

chp4_ serv —port=1234 lệnh này sẽ khởi động tất cá các chương trình phục vụ bảo mật trên tất cả các máy tính được đưa ra trong file machines.xxxx

Số hiệu cổng, được nêu ở tuỳ chọn —por phải khác với bất kỳ một công nào đang được dùng trên máy trạm

Để khai thác chương trình phục vụ bảo mật cho thiết bị ch_ p4, thêm các khai

báo sau vào các biến môi trường:

setenv MPI_USER4SSPORT yes setenv MPI P4SSPORT 1234 Giá trị của MPI_P4SSPORT phải là công mà ta khởi động chương trình phục

vụ bảo mật Khi các biến môi trường được thiết lập, mpirun sẽ bắt đầu sử dụng chương trình phục vụ bảo mật để chạy các chương trình có sử dụng thiết bị ch_ p4 (Tham số trên đòng lệnh -p⁄ cho lệnh zmpir„n có thể được dùng thay cho các biến

mi truéng trén; mpirun ~help sẽ cung cấp thêm thông tin) Tham khảo them trong

mục 1 để biết chỉ tiết cách sử dụng chương trình này

d Mạng không động cấu và thiết bị ch_p4

Mạng không đồng cấu là loại mạng mà trong đó các máy tính được kết nối

bởi mạng có cấu trúc và/hoặc hệ điều hành khác nhau Ví dụ, một mạng có thể gồm

3 máy trạm Sun SPARC (sun4) và 3 máy trạm SGI IRIX, tất cả các máy này giao

— —*———— “tiếp với nhau qua giao thức TCP/IP Lệnh mpirun có thể sử dụng được với hệ thống

phức tạp này, ví dụ:

mpirun -arch sun4 —np 3 -arch IRIX —np 2 vidu.%a

Trang 30

Trong khi thiết bị ch_p4 hỗ trợ giao tiếp giữa các máy trạm trong mạng không đồng cấu thông qua giao thức TCP/IP, nó không cho phép việc ghép cặp các

đa máy tinh Dé hé tro cho cấu hình như vậy ta cần sử dụng thiét bi globus

Chương trình đặc biệt có tên program.%a cho phép xác định các bộ phận chạy được trong một chương trình, bởi một chương trình viết cho Sun không chạy được trên máy trạm SGI và ngược lại 4a được thay thế bởi tên cấu trúc; trong ví

dụ này, program.sun4 chạy trên Sun và program IRIX chạy trên máy trạm SGI

IRIX Ta cũng có thể đặt chương trình ở các thư mục khác nhau Ví dụ:

mpirun —arch sun4 —np 3 —arch IRLX —np 3 /tmp/%a/program

Để có khả năng kiểm soát nhiều hơn cách tiến hành một tác nhiệm, ta cần

xem xét cơ chế mpirwn khởi động một chương trình đa xử lý trong cluster Mỗi lần

mpirun chạy, nó tạo ra và sử dụng một file mới chứa tên các máy tính chỉ dành cho lần chạy đó, sit dung file machines.xxxx nhu 1a đầu vào (File mới có tén la P/****,

trong đó **** là định danh tiến trình) Nếu lựa chọn tham số -keep_pg khi chạy

mpirun, ta có thể dùng thông tin này để xem khi nào mpirwn chạy một tác nhiệm

gần nhất Ta có thể tự tạo ra file này và coi đó như là tham số cho mpirun Dé lam

điều này, đối với ch_p4 dùng:

mpirun -p4pg pgfile myprog Trong đó og/!1e là tên của file

Điều này là cần thiết khi muốn kiểm soát sâu hơn máy tính mà trên đó ta

đang chạy, hay khi mpirun không thể tự động tạo ra nó Đó là những trường hợp khi:

—_ ~ Ta muốn chạy trên một tập hợp các máy tính khác nhau có các

máy được ghi trong file machines.xxxx

- Ta muốn chạy các đoạn chương trình trên các máy khác nhau (chương trình không SPMD)

=— Muốỗn-chạy trên một mạng không đồng cấu cần phải có các đoạn chương trình khác nhau

- Muốn chạy tất cả các tiến trình trên cùng một máy trạm, giả xử

lý song song bằng phương pháp phân chia theo thời gian

Trang 31

_ thêm.”

- Muốn chạy trên một mạng các đa xử lý chung bộ nhớ và cần

xác định số tiến trình sẽ sử dụng chung bộ nhớ trên mỗi máy

Định dạng của file ch_p4 ørocgroup là một tập các dòng theo mẫu:

<hostname> <#procs> <progname> [<login>]

Một ví dụ của file đó, khi lệnh được phát ra từ máy intell, có thể như sau:

File trên xác định 4 tiến trình, 1 trong mỗi may intel va | trên một máy trạm

khác ở đó account của người dùng là khác nhau Chú ý số 0 ở dòng thứ nhất để xác định rằng không một tiến trình nào khác sẽ được bắt đầu trên máy intell hơn tiễn trình đã được khởi động bởi người dùng bằng lệnh

Ta cũng có thể chạy tất cả các tiến trình trên máy của mình với mục đích kiểm nghiệm tính đúng đắn của giải thuật song song Khi này ta soạn thảo vào file procgroup như sau:

Ba tiến trình sẽ chạy irên máy intell, giao tiếp qua sockets

Để chạy trên đa xử lý dùng chung bộ nhớ, với 10 tiến trình, ta phải dùng một file nhu sau:

Chú ý đây là 10 tiến trình, một trong số chúng được người dùng trực tiến khởi động, và 9 tiến trình còn lại được ghi trong file này MPICH cần được cấu hình

véi tuy chon ~comm=shared, xem muc 1 - Hướng dan cai dat dé biét thông tin

Nếu đăng nhập vào máy alpha và muốn bắt đầu một tác nhiệm với một tiến trình trên máy alpha và 3 tiến trình trên máy alaska, các tiền trình của alaska giao

tiếp qua bộ nhớ dùng chung, ta có thể dùng:

local 0 /home/ibm/main

Trang 32

a

e Biến môi trường dùng bởi P4

Có một số biến môi trường có thê dùng để nâng cao khả năng của thiết bị

ch_p4 Chú ý rằng các biến môi trường phải được khai báo cho tất cả các tiền trình

được tạo ra, không phải chỉ cho tiến trình đang chạy chương trình MPI (Thiết lập

biến môi trường phải là một phần của file khởi tạo /ogin hoặc cshsc)

P4_SOCKBUFSIZE xác định kích thước bộ đệm socket, đo bằng byte Tăng giá trị nảy có thé nâng cao mức độ hoạt động ở một số hệ thống Tuy nhiên, trong LINUX, diac biét 1a hé théng LINUX voi TCP patches, tang giá trị này sẽ làm tăng

khả năng của MICH

P4_WINSHIFT: đây là một tham số khác của socket chỉ hoạt động trong một

số máy Chúng tôi không đẻ cập ở đây

P4_GLOBMEMSIZE: đây là số lượng bộ nhớ đo bằng byte được dự trữ để

giao tiếp với bộ nhớ dùng chung (khi MPICH được cấu hình với - comm=shared) Tăng giá trị này nếu như ta nhận đợc thông báo 16i P4_shmalloc tra

gid tri ve NULL

f Str dung kết nối đặc biệt

Trong một số cải đặt, các máy tính có thể được kết nối theo nhiều cách Ví

du, mang ethernet binh thường có thể bổ sung bởi một mạng nỗi vòng FDI tốc độ

cao Thường thì host name thay đổi được dùng để xác định cho kết nối tốc độ cao

Ta chỉ việc nhập những host name thay đổi vào file machines.xxxx Trong trường hợp này không nên dùng mẫu với local 0 mà phải dùng tên của local host

— — Vi dụ, nếu host1 và host2 được kết nối ATM lần lượt tới host1-atm và host2

-atm, file ch_p4 procgroup được dùng để kết nối chúng (chạy chương trình home/me/a.owÐ) như sau:

_hostl -atm 0 /home/me/aout

host2 -atm 1 /home/me/a.out

g St dụng các thư viện dùng chung

Các thư viện dùng chung có thể làm giảm kích thước của chương trình Điều này đặc biệt có ý nghĩa trên hệ thống cluster, ở đó các chương trình thường phải sao

Trang 33

chép qua mạng tới từng máy sẽ thực hiện chương trình xử lý song song Tuy nhiên,

có một số khó khăn trong việc sử dụng thư viện dùng chung Chúng tôi sẽ trình bày một số vướng mắc và một số phương pháp giải quyết trong phần này Hiện tại các

thư viện dùng chung không được C++ hỗ trợ,

Để xây dựng các thư viện dùng chung cho MPICH, ta cần phải cấu hình và build MPICH với tuỳ chọn —enabie-sharelib Do mỗi hệ điều hành UNIX và thực tế mỗi trình biên dịch sử dụng một tập các tuỳ chọn khác nhau và không tương thích

để tạo các đối tượng dùng chung và các thư viện, MPICH có thể không xác định đúng các tuỳ chọn Hiện tại MPICH hiểu Solaris, GNU gcc (trên phần lớn các máy

bao gồm LINUX và SOLARIS), và IRIX

Khi thư viện chung đã được xây dựng, ta phải chỉ cho trình biên dịch và liên kết MPICH các lệnh sẽ dùng thư viện chung (lý đo là các thư viện chung không

mặc định sẽ bị mất sạch ở phía dưới) Có thể làm việc này bằng tuỳ chọn trên dòng

lệnh —s#//2 hay bằng cách thiết lập biến môi trường MPICH_ USE, SHLIB thành

Biến môi trường MPICH_USE_ SHLIB cho phép ta chọn quyết định sử dụng

hay không sử dụng thư viện dùng chung mà không cân thay đổi các lệnh biên địch Như vậy rất có ích cho các project có dùng makefiles

, Chạy chương trình build với thư viện chung có thể rất rắc rối Hầu hết các hệ thống không ghí nhớ vị trí của thư viện chung khi chương trình được liên kết Thay vào đó các hệ thống tìm kiến thư viện dùng chung dựa vào đường dẫn mặc định (như 5) hay trong thư mục xác định bởi các biến môi trường như

- LD_LIBRARY_PATH hay bằng lệnh tham số dòng lệnh như —R hay -rparh Câu

hình MPICH kiểm tra điều này và sẽ thông báo chương trình được build với thư viện dùng chung có ghi nhớ đường dẫn của các thư viện hay không Nó cũng dùng các tham số dòng lệnh để buộc chương trình ghi nhớ vị trí của thư viện dùng chung

26

Trang 34

Nếu muốn thiết lập biến môi trường để quy định vị trí của các thư viện dùng chung, ta cần phải đảm bảo rằng các biến môi trường mà từ đó chạy mpirun và bất

kỳ tiến trình nào khởi động zmpirwn sẽ nhận được biến môi trường này Cách đơn

giản nhất đề thực hiện việc này là thiết lập biến môi trường trong ñle es#re đối với

người dùng chạy /csử hay ,profile đôi với người dùng sk và ksh

Tuy nhiên thiết lập biến môi trường trong các lệnh khởi tạo sẽ có thê gây lỗi

nếu ta dùng nhiều hệ thống khác nhau Ví dụ, có một file csửzc mà ta có thể dùng

với cả SGI (RIX) và hệ thống Solaris; Ta không muốn thết lập

LD_LIBRARY_PATH dé tro dén SGI ctta phién ban thy vién chung MPICH trén

Solaris, thay vào đó ta có thể thiết lập biến môi trường trước khi chay mpirun:

setenv LD_LIBRARY_PATH ${LD_LIBRARY_ PATH}:

usr/local/mpich/lib/shared mpirun —np 4 cpi

Nhưng làm như vậy không phải lúc nào cũng chay Tuy thudc vao phuong

phap ma mpirun va MPICH st dung để khởi động các tiến trình, biển môi trường sẽ

không được gửi đến tiến trình mới Khi đó chương trình sẽ báo lỗi như sau:

Id.so.1:/home/me/cpi:fatal:libmpich.so.1.0:open failed: No such file or directory

=—: =— —- —tiến trình-ở xa: Và đảm bảo rằng môi-trường mà trong đó tiến trình (chứa chương

trình MPI) chữa tất cả các biến môi trường bắt đầu bởi LD,_ (chi trong trường hợp

hệ thống dùng LD _SEARCH,_PATH hay tên khác để tìm thư viện dùng chung)

Một cách để sử dụng LD_LIBRARY_PATH và chương trình phục vụ bảo

mật là thêm tuỳ chọn vào lệnh liên kết có đưa đường dẫn dùng để tìm kiếm các thư

Trang 35

viện dùng chung Những tuỳ chọn mà ta dùng sẽ ghi thêm thư mục này vào đường

dẫn tìm kiếm (giống như khi ta làm với -L) Thay vào đó nhiều trình biên dich chi

cung cấp thay thế đường dẫn tìm kiếm với đường dẫn này Ví dụ, một số chương trình biên dịch cho phép

-Rpath:path: :path

để xác định một đường dẫn thay thế Do đó nếu cả MPICH và người dùng cung cấp đường dẫn tìm thư viện với -R, một đường dẫn tìm kiếm sẽ không được sử dụng Cuối cùng thi mpice (và 3 lệnh biên dịch còn lại) có thể kiểm tra tuỳ chọn — và tạo

ra một phiên bản thống nhất, nhưng hiện tại chúng không làm việc này Dẫu sao ta cũng có thể đưa vào đường dẫn tìm kiếm nếu trình biên dịch hỗ trợ tuỳ chọn như —

R

Phương pháp vừa trình bày ở trên có vẻ rất phức tạp và dài dòng, thực tế đôi khi điều này đúng Đối với mạng lớn, công việc này rất cần thiết vì chương trình sẽ chạy nhanh hơn và tin cậy hơn

2.4.2 Khởi động nhanh với Daemon ẩa mục dich va ch_p4mpd Device

a Mục tiêu

Mục tiêu của daemon đa mục đích (mpd và ch_p4mpd có liên quan) là làm cho mpirun hoạt động như là một chương trình đơn lẻ cho dù nó có khởi động

nhiều tiến trình để chạy một tác nhiệm MPI Chúng tôi sẽ đề cập tới tiến trình

mpirun và các tiễn trình MPI Các hoạt động đó bao gồm:

- Khởi động nhanh các tiễn trình của MPI (và cả các tiến trình

không MPI) Đối với những người quen thuộc với thiếtbj ch_p4 trên mạng TCP, đây là một thay đổi lớn đáng chú ý Các tác nhiệm bây giờ sẽ chạy nhanh hơn

- Tập hợp s/đow và stderr từ các tiến trinh MPI téi stdout va

stderr cha tién trinh mpirun

- Chuyén sidin cia mpirun téi stdin cha tién trinh MPI 0

- Chuyén tín hiệu tir tién trinh mpirun téi tién trinn MPI Diéu này có nghĩa là đễ huý bỏ, tạm đừng và trở về tác nhiệm song song như đối với tiến trình đơn với entl -C, entl -Z và lệnh bg va fg

- _ Chuyển các tham số đòng lệnh tới tất cả các tiến trình MPI

28

Trang 36

- — Sao chép biến môi trường PATH từ môi trường mà /pirun

được chạy tới các môi trường mà các biến môi trường MPI chạy

- Sử dụng một tham số tuỳ chọn thêm để cung cấp các biến môi trường khác

- — Cung cấp một tham số tuỳ chọn nữa để xác định nơi các tiến

trình MPI sẽ chạy

b Giới thiệu

Thiết bị ch_p4 phụ thuộc một cách mặc định vao rsh để khởi động tiễn trình

trên các máy ở xa Nhu cầu kiểm tra tính hợp lệ khi bắt đầu tác nhiệm, kết hợp với

quá trình tuần tự mà các thông tin liên hệ được thu thập từ mỗi máy ở xa và phát trở

lại tới tất cả các máy, làm cho việc khởi động tác nhiệm trở nên chậm, đặc biệt với

số lượng các tiến trình lớn

Phiên bản MPICH-1.2.0 giới thiệu một phương pháp khởi động tiến trình

dựa trên các đaemon Cơ chế này cần cấu hình với một thiết bị mới nhưng chưa

được kiểm nghiệm đầy đủ để trở thành mặc định cho các hệ thống cluster Thiết bị

này hiện mới chỉ dùng với mục đích thử nghiệm, nó đã được build và kiểm nghiệm

trên Solaris và Linux; các hệ thống khác có thể cần thay đổi cấu hình trong

mpich/mpid/mpd, nơi đễ mã của daemon Nó chưa được cài đặt tự động bằng make,

nhưng nó có thể cài đặt được bằng tay từ thư mục nơi nó được build, đó là

mpich/mpid/mpd

Y tưởng ban đầu là thiết lập, trước lúc khởi động tác nhiệm, một mạng các

daemon trên máy tính mà ở đó các tiễn trình MPI sẽ chạy, và cả ở máy mà zmpirun

sẽ được thực thi Các lệnh bắt đầu tác nhiệm (và các lệnh khác) sẽ liên lạc với

daemon địa phương và sử dụng daemon đã tồn tại trước để bắt đầu các tiễn trình

Phần lớn các sắp đặt ban đầu thực hiện bởi thiết bị ch_p4 sẽ bị huỷ bỏ bởi vì các

daemon có thể được sử đụng lúc chạy để hỗ trợ thiết lập kết nối giữa các tiến trình

Để sử dụng cơ chế khởi động mới ta cần: e— am

« Cấu hình MPICH với device mới:

configure -device=ch_p4mpd

make

Trang 37

e Chuyén toi thu muc mpich/mpid/mpd, noi dé mã của daemon và các

đaemon được build, hay đưa thư mục này vào PATH

- On soot:

soot%mpd —h ffire —p 55681 &

[1] 6629 {soot_35836]: MPD starting soot%

Các thông số „đi được xác định bằng số hiệu hosí và por?

Nếu các daemon không hiện các thông tin của chúng, ta có thé tim host va port bang lệnh mpdfrace:

Trang 38

Những gì mà mpirraee hiển thị là vong cdc mpd, bGi hostname va port cé thé

dùng để giới thiệu một mpd khdc vao trong vong dé Lan can trai và lân cận phải

của mỗi mpd trong vong như được hiện lại lần lượt là Ish va rsh rsh2 noi nén

daemon cách hai bước về bên phải (trong trường hợp này chính là daemon đó)

Có một cặp lệnh trong mpich/mpid/mpd co thé có ich:

localmpds<number>

sẽ khởi động ma SỐ <number> trén máy local Nó chỉ thực sự có ích khi kiểm tra

Thường thì ta dùng

mpd&

đẻ khởi dộng một mpd trên máy local Sau đó các mpd khác sẽ khởi động trên các

máy ở xa qua rsh, nếu có:

remotempds<hostfile>

trong dé <hostfile> chứa tên của các máy khác để khởi dong mpd D6 chi la một

danh sách đơn giản chứa các hostname, khéng như định dạng của các fle

maehines.xxxx sử dụng ch_p4, mà có thê chứa các chú giải và các ký hiệu khác

© Cuối cùng, khởi động tác nhiệm với lénh mpirun

e _ Nếu ta không khởi động các daemon trước, zspirwn sẽ khởi động chúng,

theo file machines.xxxx được nêu trong file mpd.host trong thu muc mpd

File này được khởi trị lúc câu hình với 5 bản sao của máy tính mà ta đã

xây dựng trên, nhưng ta có thể sửa nó Phải đảm báo là thư mục

mpich/bin có ở trong đường dẫn nếu dùng phương pháp này

Có thể thoát các daemon bằng lệnh mpdallexit

c Vi du

Dưới đây là một số ví dụ về cách sử đụng mpirun được build khi MPICH

e Chạy ví dụ cpi

mpirun —np 5 /“home/mpirunner/mpich/examples/basic/cpl -—-—— -——.—— - Néu dat /home/mpirunner/mpich/examples/basic trong path voi

setenv PATH ${PATH}: /home/mpirunner/mpich/examples/basic

Thì lệnh chạy như sau:

mpirun —np 5 cpi

Trang 39

e Chay chương trình fpi

mpirun —np 5 fpi Luéng stdin, stdout va stderr sé duge xếp quay tré lai tién trinh mpirun ngay

cả khi tiến trình MPI ở cấp 0 được tiễn hành ở máy từ xa

© - Dùng tham số và biến môi trường

mpirun —np 5 myprog arg! arg2 -MPDENV —

MPE_LOG FORMAT=SLOG\GLOBMEMSIZE=16000000

Tham số -MPDENV là rào can Tat cả các tham số sau đó sẽ được xử lý bởi mpiừun mà không phải là chương trình ứng dụng

e Xác định nơi nào tiến trình đầu tiên sẽ chạy:

Mặc định thì các tiến trình MPI được sinh ra bởi các mpd lién tuc trong vòng, bắt đâu bởi tiến trình sau tiến trình local Tiến trình chạy cùng trên một máy với tiễn trình zpirun Cho nên nếu ta đăng nhập vào đion và có các má đang chạy đion và trên belmontl, belmont2, ., belmont64, và ta nhập

mpirun —np 32 cpi Các tiến trình sẽ chạy trên belmon(l, belmont2, , belmont32 Ta có thé cưỡng bức các tiến trình MPI khởi động ở một nơi khác bằng cách đưa vào lệnh

mpirun tham số vị trí khởi động chương trình Nếu nhập vào:

mpirun —np 32 cpi “MPDLOC- belmont33

KRi đó các tác nhiệm sẽ được thực hiện trên belmont33, belmont34, ,

belmont64

Đó là một phương pháp rat co ban cho mpirun dé chon vi tri cho cdc tién trinh MPI

® Tim xem mpd dang chay trén host nao:

mpirun —np 32 hostname | sort | unig

Lénh nay sé chay 32 ban hostname gia str /bin 6 trong duéng dan da dinh ma không quan tâm đến có bao nhiéu mpd Cac tiến trình khác sẽ bao quanh vòng các mpa

32

Trang 40

d Cơ chế làm việc của các daemon

Mỗi khi các dacmon khởi động chúng được nếi thành vòng (hình 1.1): Một tién trinh “console” (npirun, mpdtrace, mpdallexit, vv ) 6 thé nối với bất kỳ một mpd nao ding UNIX named socket duge cai dat trong /tmp

Hình 1.1: Cơ chế làm việc của các đaemoñ TT” ———”

Nếu đó là một tiến trình mpirun, nó yêu cầu khởi động một số tiền trình, bất đầu từ máy được cho bởi -MPDLOC như đã nêu ở trên Vị trí mặc định của mpd

tiếp theo trong vòng là tiến trình liên hệ bởi tiến trình console

33

Ngày đăng: 27/02/2013, 16:38

HÌNH ẢNH LIÊN QUAN

Hỡnh  1.1:  Cơ  chế  làm  việc  của  cỏc  đaemoủ  TT”  ———” - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 1.1: Cơ chế làm việc của cỏc đaemoủ TT” ———” (Trang 40)
Hình  2.1:  Truyền  thông  đích  chủ  động. - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 2.1: Truyền thông đích chủ động (Trang 75)
Hình  2.3:  Truyền  thông  đích  bị  động - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 2.3: Truyền thông đích bị động (Trang 77)
Hình  2.4:  Truyền  thông  đích  chủ  động. - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 2.4: Truyền thông đích chủ động (Trang 81)
Hình  2.10:  Bộ  liên  truyền  thông  allgather, - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 2.10: Bộ liên truyền thông allgather, (Trang 92)
Hình  3.3.  Kết  hợp  2  dãy  số  (cách  |) - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.3. Kết hợp 2 dãy số (cách |) (Trang 151)
Hình  3.5:  Các  bước  trong  thuật  toán  sủi  bọt - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.5: Các bước trong thuật toán sủi bọt (Trang 152)
Hình  3.11:  Sắp  xếp  chập  cho  8  số - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.11: Sắp xếp chập cho 8 số (Trang 158)
Hình  3.14:  Thuật  toán  sắp  xếp  nhanh  trên  siêu  lập  phương, - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.14: Thuật toán sắp xếp nhanh trên siêu lập phương, (Trang 163)
Hình  3.20:  Phát  tán  các  phần  tử  trong  chương  trình  song  song - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.20: Phát tán các phần tử trong chương trình song song (Trang 171)
Hình  3.21:  Thực  thi  kiểu  đường  ống  phương  pháp  khử  Gauss - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.21: Thực thi kiểu đường ống phương pháp khử Gauss (Trang 172)
Hình  3.26:  Một  giai  đoạn  đường  ống  thực  hiện  thuật  toán  DFT - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.26: Một giai đoạn đường ống thực hiện thuật toán DFT (Trang 177)
Hình  3.31:  Đồ  hình  luồng  tính  toán  FFT  16  điểm - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.31: Đồ hình luồng tính toán FFT 16 điểm (Trang 180)
Hình  3.32:  Ánh  xạ  các  bộ  xử  lý  trong  tính  toán  FFT  16  điểm - Kỹ thuật lập trình song song trên môi trường MPI và MPICH
nh 3.32: Ánh xạ các bộ xử lý trong tính toán FFT 16 điểm (Trang 182)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w