MPICH là phần mềm hỗ trợ xử lý song song được sử dụng rộng rãi nhất thế giới. Được sử dụng trên 9 trong tổng số 10 siêu máy tính mạnh nhất (xếp hạng tháng 6 năm 2015). Trong đó có siêu máy tính mạnh nhất thế giới: Thiên Hà 2.
Bài viết này sẽ hướng dẫn các bạn cài đặt MPICH theo cách dễ nhất.
Sơ đồ mạng
Hệ thống của chúng ta có bốn máy Ubuntu Server. Master server đảm nhiệm vai trò phân phối xử lý trên các nút.
Trước tiên, ta tạo một user để chạy MPI program, ta gọi user này là “mpi”
root@Master:~$ adduser mpi
Tạo user tương tự trên các nút.
Cài đặt SSH Server trên các máy
root@Master:~$ apt-get install openssh-server root@Node1:~$ apt-get install openssh-server
Sau đó, cài đặt Network File System để chia sẻ thư mục /home/mpi trên máy master đến tất cả các nút (nhớ định nghĩa các hostname trong /etc/hosts) OK, bây giờ chúng ta tạo SSH key cho user mpi trên Master server, key này sẽ được share đến tất cả các nút thông qua NFS và ta chỉ dùng key này đế ssh đến tất cả các nút.
root@Master:~$ su mpi mpi@Master:~$ ssh-keygen -t rsa
Enter Enter Enter ,. bla bla bla
Đừng tạo passphrase nếu bạn không muốn phải nhập nó mỗi khi chạy MPICH2
mpi@Master:~$ cd .ssh mpi@Master:~/.ssh$ cat id_rsa.pub >> authorized_keys
Ta ssh vào từng node.
mpi@Master:~/.ssh$ ssh Node1 mpi@Master:~/.ssh$ ssh Node2 mpi@Master:~/.ssh$ ssh Node3
thoát ra, thế thôi.
Sau đó, cài MPICH2 và GCC để biên dịch MPI programs
root@Master:~$ apt-get install mpich2 build-essential -y
Bây giờ, MPICH2 đã sẵn sàng.
Nhưng ta còn phải định nghĩa các nút sẽ tham gia quá trình xử lý.
Tạo một file với tên tùy ý.
su mpi mpi@Master:~$ nano nodes
và thêm những dòng này vào:
Node1 Node2:2 Node3
(*)Con số phía sau mỗi hostname là số lượng các tiến trình ta muốn chạy trên host đó. Thường thì nó bằng với số nhân của mỗi nút.
Cuối cùng là test một chương trình thử nghiệm.
mpi@Master:~$ nano test.c
#include <stdio.h> #include <mpi.h> int main(int argc, char** argv) { int myrank, nprocs; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); printf("Hello from processor %d of %d\n", myrank, nprocs); MPI_Finalize(); return 0; }
Lưu và biên dịch
mpi@Master:~$ mpicc test.c -o test
và chạy thử (tham số -n quy định số lượng processes sẽ được chạy).
mpi@Master:~$ mpiexec -n 8 -f nodes ./test
Kết quả tương tự như:
Hello from processor 0 of 8 Hello from processor 1 of 8 Hello from processor 2 of 8 Hello from processor 3 of 8 Hello from processor 4 of 8 Hello from processor 5 of 8 Hello from processor 6 of 8 Hello from processor 7 of 8
Đào Xuân Hưng – AdminVietnam.org