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

Sơ đồ hệ thống xử lý song song
Sơ đồ hệ thống xử lý song song

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