Lập trình song song

Một phần của tài liệu Giải hệ phương trình kích thước lớn và điều kiện xấu trên bó máy tính (Trang 34 - 36)

Dựa trên các kiến trúc cơ bản của máy tính song song ta có các mô hình lập trình song song tương ứng

• Mô hình lập trình chia sẻ bộ nhớ dựa vào luồng.

• Mô hình lập trình truyền thông báo.

Lập trình với kiến trúc máy tính bộ nhớ chia sẻ

Với các hệ thống chia sẻ bộ nhớ mô hình lập trình để phát triển ứng dụng dựa trên luồng với hai thư viện chuẩn là POSIX, OpenMP. Tuy nhiên thư viện POSIX (Pthread) ít hộ trợ thực hiện các thao tác song song dữ liệu thường hay

xảy ra trong các tính toán khoa học. Vì vậy OpenMP là chuẩn thường được sử dụng hơn đối với các hệ thống chia sẻ bộ nhớ. Quá trình song song hóa chương trình với OpenMP được thực hiện bằng cách chèn vào trong mã nguồn các định hướng biên dịch (directive hoặc pragmas). Các định hướng biên dịch được sử dụng để xác định các đoạn chương trình được thực hiện song song. Số lượng các luồng sử dụng được xác định thông qua các biến môi trường. Do đó, không giống như Pthread, người lập trình không cần quản lý thời gian thực hiện của các luồng. Lập trình viên không cần quan tâm đến phân hoạch khối lượng tính toán cũng như ánh xạ các tác vụ cho các luồng. Lập trình viên chỉ cần xác định định hướng biên dịch để thể hiện một vùng song song, ví dụ #pragma omp parallel đối với ngôn ngữ lập trình C/C++ và cặp !$omp parallel, !$omp end parallel đối với ngôn ngữ lập trình Fortran. Ngoài ra OpenMP trừu tượng cách thức phân chia khối lượng tính toán cho các tác vụ cũng như việc gán các tác vụ cho các luồng tương ứng. OpenMP cung cấp một số cấu trúc hỗ trợ cho quá trình đồng bộ hóa ẩn mà lập trình viên chỉ cần xác định nơi đồng bộ hóa xảy ra.

Lập trình với kiến trúc máy tính bộ nhớ phân tán

Với các hệ thống DM-MIMD, mô hình lập trình truyền thông điệp (Message Passing) dựa trên tiến trình với hai thư viện tiêu biểu: PVM (Parallel Virtual Machine) và MPI (Message Passing Interface) thường được sử dụng để phát triển các ứng dụng song song. Mô hình lập trình truyền thông điệp còn được nghiên cứu áp dụng cho các hệ thống có bộ nhớ dùng chung (ví dụ như các hệ thống Nec SX-6, Cray, SV1ex). Hiện nay, PVM đã không còn được tập trung phát triển. Trong khi đó, MPI ngày càng nhận được sự chú ý của các nhà cung cấp với các phiên bản LAM/MPI, MPICH. Trong tương lai không xa, phiên bản thống nhất OpenMPI của cộng đồng mã nguồn mở (MPI Forum) được xem là có nhiều triển vọng.

Trong mô hình truyền thông điệp với thư viện MPI, các tiến trình được quản lý tự động ẩn, chúng ta không cần tạo, lập lịch, hủy bỏ các tiến trình. Thay cho các việc này chúng ta chỉ cần sử dụng câu lệnh mpirun với tham số là số tiến trình chúng ta cần tạo và tùy chọn ánh xạ các tiến trình lên trên các bộ xử lý. Sau đó dựa trên các thông tin này, cơ sở hạ tầng thực thi (runtime infrastructure) sẽ thực hiện việc quản lý các tiến trình.

Phân hoạch khối lượng tính toán và ánh xạ thành các tác vụ phải được thực hiện bởi lập trình viên. Lập trình viên phải quản lý các tác vụ được tính toán bởi mỗi tiến trình. Ví dụ, với một mảng dữ liệu 2 chiều cho trước, chúng ta sử

dụng chỉ số định danh của tiến trình để xác định vùng dữ liệu mà tiến trình này sẽ thực hiện tính toán. Việc trao đổi dữ liệu giữa các tiến trình thông qua cơ chế truyền thông điệp trong đó dữ liệu được chia sẻ bằng cách mỗi tiến trình gửi thông điệp dữ liệu tới các tiến trình khác. Có hai nhóm các thao tác truyền thông điệp trong MPI đó là: truyền thông điểm tới điểm và truyền thông theo nhóm. Các thao tác truyền thông điểm tới điểm như MPI_Send/MPI_Recv thực hiện trên từng cặp tiến trình trong khi các thao tác truyền thông theo nhóm như MPI_Bcast thực hiện trên nhiều tiến trình hoặc MPI_Barrier được sử dụng để đồng bộ các tiến trình, đảm bảo dữ liệu toàn cục không bị phân tán.

Một phần của tài liệu Giải hệ phương trình kích thước lớn và điều kiện xấu trên bó máy tính (Trang 34 - 36)

Tải bản đầy đủ (PDF)

(121 trang)