Kỹ thuật lập trình song song trên môi trường MPI và MPICH
Trang 1BỘ 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 2BỘ 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 3DANH 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 4KS 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 5HOC 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 7TOM 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 8MỤ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 92.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 11LỜ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 12cho 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 13CHUONG 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 14solaris86 (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 15Tấ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 181 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 19setenv 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 20coi 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 21MPI_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 22slave();
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 232.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 24mpICC —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 25mpirun —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 28a 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 29mà 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 30Trong 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 32a
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 33ché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 34Nế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 35việ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 37e 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 38Nhữ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 39e 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 40d 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