Hệ thống máy bó tính toán hiệu năng cao (phần 2)

Hệ thống máy bó tính toán hiệu năng cao (phần 2)

Ngày nay, với sự phát triển của máy tính, việc giải các bài toán trong cơ học nói chung và cơ học chất lỏng nói riêng bằng phương pháp giải số gần đúng được phát triển mạnh và đem lại nhiều kết quả. Tuy nhiên đối với các bài toán lớn như tính toán khí hậu trên miền rộng 3 chiều, tính toán các quá trình khuyếch tán khí thải phức tạp, quá trình truyền lũ trên hệ thống sông ngòi … đòi hỏi một khối lượng tính toán rất lớn, đôi khi với có thể là nhiều ngày, nhiều tháng trên các máy PC mạnh nhất hiện

Hệ thống máy tính song song thương mại đã có mặt từ khá sớm. Trước tiên chúng được sử dụng trong các tổ chức phòng thủ liên bang, trong các phòng thí nghiệm nghiên cứu... Khi đó những cỗ máy đắt tiền này rất khó sử dụng và lập trình. Để làm chủ nó người lập trình cần có những kỹ năng đặc biệt cũng như kiến thức về cấu trúc của mỗi máy. Với những thiết bị chuyên dụng và rất ít khách hàng như thế, ngành công nghiệp siêu máy tính đã không phát triển trong một thời gian dài. Cho mãi đến gần đây nó phát triển trở lại với xu hướng xây dựng siêu máy tính từ các nhóm workstation và nhóm PC nối mạng. Chỉ trong vòng 10 năm trở lại đây, các hệ thống siêu máy tính liên tục được được xây dựng và ngày càng mạnh (tính đến thời điểm hiện tại, siêu máy tính mạnh nhất thế giới là BlueGene của Mỹ có tốc độ 183.500 tỷ phép tính dấu phẩy động một giây gồm 65536 đơn vị xử lý – http://top500.org ).



Dự án Beowulf (http://www.beowulf.org/) bắt đầu tại Trung tâm Bay Không gian Goddard của NASA, sử dụng Linux và các phần mềm mã nguồn mở chạy trên các PC rẻ tiền. Đây là bước đột phá tiên phong trong xu hướng này, nó đã mở ra một tương lai mới cho tính toán cluster hiệu suất cao nhưng với giá thành hạ. Trong dự án, các chuẩn và công cụ phù hợp với hệ thống máy tính song song với bộ nhớ phân phối đã được phát triển. Với các chuẩn và công cụ này, việc viết các ứng dụng song song bây giờ trở nên tương đối đơn giản đối với các lập trình viên.



Hệ Beowulf có thể được xây dựng từ nhiều loại máy tính khác nhau cả về chủng loại và tốc độ (có thể kết hợp giữa các mainframe hàng chục đơn vị xử lý với workstation 2 đơn vị xử lý hay với cả các PC thông thường 1 đơn vị xử lý).



Tính toán song song hiệu suất cao được thực hiện bằng cách tách các nhiệm vụ lớn và phức tạp ra nhiều phần để chạy trên nhiều đơn vị xử lý. Mặc dù có nhiều phương pháp có thể sử dụng để cải thiện hiệu suất hệ thống các máy tính, nhưng phương pháp thông dụng nhất để tổ chức và điều phối quá trình xử lý song song là viết code tự động phân tích bài toán sắp đến và cho phép các đơn vị xử lý liên lạc với nhau khi cần thiết trong khi thực hiện công việc.



Không phải tất cả các bài toán đều có thể tính toán song song. Nếu không có công việc con nào có thể thực hiện đồng thời hoặc nếu hệ đang được mô tả phụ thuộc lẫn nhau mạnh (bài toán "fine-grained"), mọi nỗ lực song song hoá nó có thể dẫn tới tăng thời gian tính toán. Với những bài toán thể loại finest-grained, hiệu suất tính toán bị giới hạn bởi tốc độ của CPU đơn nhanh nhất có mặt trên thị trường.



May mắn là rất nhiều các bài toán khoa học phức tạp có thể phân tích thành các nhiệm vụ riêng biệt để thực hiện độc lập và đồng thời bởi nhiều đơn vị xử lý. Thông thường nhất là việc tách các toạ độ không gian (hoặc thời gian) của hệ được mô hình thành các vùng không gian con (hay khoảng thời gian con) và có thể tính toán đồng thời. Ví dụ ứng dụng mô phỏng ngập lụt thực hiện các tính toán trên các ô riêng biệt hoặc các vùng mà không đòi hỏi thông tin về trạng thái của các ô khác trong vùng. Những ứng dụng loại này, được gọi là "coarse grained", khá dễ dàng song song hoá và chúng ta có thể có được lợi ích lớn nhất từ xử lý song song.



Tuy nhiên hầu hết các ứng dụng khoa học của chúng ta nằm giữa "coarse grained" và "fine grained". Các ứng dụng này thường đòi hỏi vài tương tác giữa các vùng con vì thế các đơn vị xử lý phải có thể liên lạc với nhau để trao đổi các dữ liệu tính toán, thuật ngữ kỹ thuật gọi quá trình này là "message passing". Lấy ví dụ, các giá trị của các ô trên bản đồ phụ thuộc các giá trị của các ô lân cận gần nhất. Nếu ta chia bản đồ ra làm 2 phần, mỗi phần được xử lý trên 1 CPU, thì các CPU phải trao đổi các giá trị ô trên đường phân cách 2 phần của bản đồ.



Việc phân tích bài toán thành các vùng không gian con cần phải được làm một cách cẩn thận ở những chỗ phụ thuộc lẫn nhau của các vùng đó. Cái bẫy nằm ở chỗ làm sao để biến một vấn đề tính toán trên một đơn vị xử lý đơn lẻ thành 1 vấn đề truyền thông trên nhiều đơn vị xử lý. Trong nhiều trường hợp lượng thông tin tương tác giữa các đơn vị xử lý quá lớn làm cho thời gian truyền thông nhiều hơn cả thời gian tính toán. Đương nhiên như vậy thì tính toán song song không có lợi. Vì thế, với bất kỳ bài toán nào chúng ta cũng cần xem xét đến sự cân bằng giữa tính toán và truyền thông.



Message Passing



Có khá nhiều kỹ thuật khác nhau đã được sử dụng để message passing trên hệ Beowulf hoặc trên các nền máy tính song song khác. Có thể kể ra như Threads hay Inter-Process Communication (IPC) sử dụng cho một máy đơn chứa nhiều đơn vị xử lý, hoặc TCP sockets, Remote Procedure Calls (RPCs), hay kỹ thuật kém tinh vi hơn là trao đổi thông tin qua các files tường minh trên các máy. Tuy nhiên, chiến thuật dễ nhất và tốt nhất là sử dụng các thư viện đặc biệt thiết kế sẵn cho message passing trên các máy nối mạng cục bộ. Hai thư viện phổ biến nhất là PVM (Parallel Virtual Machine) và MPI (Message Passing Interface). Vì phổ biến như thế nên mã song song message passing sử dụng PVM và MPI có thể chạy trên mọi thứ, từ các máy xách tay cho đến các CRAY. Ngoài ra các ứng dụng song song viết cho Beowulf clusters cũng có thể dễ dàng chạy trên các siêu máy tính thương mại mà không cần phải sửa dòng mã nào.



PVM (http://www.epm.ornl.gov/pvm/) có thể chạy trên rất nhiều hệ máy tính. Nó được viết cho C,C++, FORTRAN cũng như các bản bổ sung cho Java và Python. Nó chứa nhiều đặc điểm nâng cao phù hợp để xây dựng những ứng dụng tính toán phân phối phức tạp, có thể áp dụng rộng rãi nhưng khá chậm vì các phép gọi chương trình con truyền thông điệp của PVM thường gia tăng đáng kể các overhead cho các phép toán socket chuẩn mà bản thân chúng đã có độ trễ lớn, hơn nữa các phép gọi liên quan đến quản lý thông điệp tự nó không tạo ra một mô hình lập trình thân thiện.



Khác với PVM là một tiêu chuẩn mặc định, MPI là một chuẩn chính thức tương đối mới về message passing tạo ra bởi một uỷ ban, gọi là Message Passing Interface Forum (MPIF), phát hành năm 1994. Chuẩn này mô tả các đặc điểm và cú pháp của thư viện lập trình song song cần phải có. Có rất nhiều các thư viện dựa trên chuẩn MPI đã được các nhà phát triển phần mềm viết trên nhiều hệ máy tính khác nhau. Nổi bật nhất trong số chúng là MPICH (http://www-unix.mcs.anl.gov/mpi/mpich/) và LAM (Local Area Multicomputer) / MPI (http://www.mpi.nd.edu/lam/). Cả hai đều viết cho C, C++ và FORTRAN để chạy trên hệ Beowulf. Ngày nay toàn bộ các máy tính song song thương mại đều sử dụng chuẩn MPI đã được tối ưu hoá cho riêng mình. Hiện nay MPI đã nâng cấp lên chuẩn MPI-2 (2001) nhanh hơn và có tính khả chuyển cao hơn.



Mặc dù không hỗ trợ một vài đặc trưng đặc biệt như trong PVM, nhưng MPI có lợi thế là dựa trên chuẩn thống nhất, được sử dụng ngày càng nhiều trong việc phát triển mã, MPI đáp ứng đầy đủ các yêu cầu của hầu hết các ứng dụng song song.

Bình luận