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”

[email protected]:~$ 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

[email protected]:~$ apt-get install openssh-server
[email protected]:~$ 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.

[email protected]:~$ su mpi
[email protected]:~$ 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

[email protected]:~$ cd .ssh
[email protected]:~/.ssh$ cat id_rsa.pub >> authorized_keys

Ta ssh vào từng node.

[email protected]:~/.ssh$ ssh Node1
[email protected]:~/.ssh$ ssh Node2
[email protected]:~/.ssh$ ssh Node3

thoát ra, thế thôi.

Sau đó, cài MPICH2 và GCC để biên dịch MPI programs

[email protected]:~$ 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
[email protected]:~$ 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.

[email protected]:~$ 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

[email protected]:~$ mpicc test.c -o test

và chạy thử (tham số -n quy định số lượng processes sẽ được chạy).

[email protected]:~$ 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