Sau khi tìm hiểu về các kỹ thuật phân hoạch, ánh xạ và giảm thiểu tối đa tần số tương tác, bây giờ chúng ta sẽ giới thiệu một vài mơ hình thuật tốn song song hay được sử dụng. Một mơ hình thuật tốn là một cách thức tiêu biểu nhằm cấu trúc hĩa lại một thuật tốn song song bằng cách lựa chọn ra một kỹ thuật phân hoạch và ánh xạ và áp dụng kế hoạch thích hợp để tối ưu việc tương tác.
2.4.4.1. Mơ hình dữ liệu song song
Đây là một trong những mơ hình thuật tốn đơn giản nhất, các tác vụđược ánh xạ tĩnh hay bán tĩnh vào trong các tiến trình và từng tác vụ sẽ thực hiện cùng một thao tác trên các dữ liệu khác nhau. Loại song song mà cĩ các chỉ thị tương tự nhau được áp dụng đồng thời lên các dữ liệu khác loại nhau được gọi là loại song song dữ liệu (data parallelism). Cơng việc cĩ thể được thực hiện từng bước và dữ liệu thao tác trên các bước khác nhau cĩ thể khác nhau. Bởi vì tất cả các tác vụ đều cùng thực thi các chỉ thị giống nhau, nên phương pháp phân hoạch được sử dụng ở đây là phân hoạch theo dữ liệu do một phương pháp phân hoạch thống nhất theo sau là cách thức ánh xạ tĩnh là đủ khả năng đểđảm bảo cân bằng tải.
Những thuật tốn song song về dữ liệu cĩ thể được áp dụng cho cả mơ hình chia sẽ khơng gian bộ nhớ và truyền thơng điệp.
Tương tác trong mơ hình này cĩ thể làm giảm thiểu tối đa bằng cách áp dụng các cách thức phân họach riêng biệt cục bộ, và nếu cĩ thể thì bằng cách chồng lấp các phép tính và các tương tác hoặc cũng cĩ thể bằng cách sử dụng các thủ tục tối ưu các tương tác tập thể. Tính chất cốt lõi của
các vấn đề song song dữ liệu là trong hầu hết các vấn đề, mức độ song song của dữ liệu sẽ gia tăng cùng với kích thước của vấn đề, điều này làm tăng khả năng giải quyết các vấn đề lớn hơn bằng cách gia tăng số lượng bộ xử lý được sử dụng.
2.4.4.2. Mơ hình đồ thị tác vụ
Nhưđã nĩi ở trên, các phép tính tốn trong bất kỳ thuật tốn song song nào cũng cĩ thểđược biểu diễn theo đồ thị phụ thuộc tác vụ. Nĩ cĩ thể đơn giản như trong bài tốn nhân ma trận hay cĩ thể rất phức tạp. Tuy nhiên, trong những thuật tốn song song cụ thể nào đĩ, đồ thị phụ thuộc tác vụ cũng thể hiện cách ánh xạ vào trong các tiến trình. Trong mơ hình đồ thị tác vụ, mối tương giao giữa các tác vụ được sử dụng để gia tăng tính cục bộ hay làm giảm đi chi phí tương tác. Mơ hình này về cơ bản được sử dụng để giải quyết những vấn đề mà trong đĩ dữ liệu đi theo các tác vụ là khá lớn so với nội dung tính tốn. Thơng thường thì các tác vụ được ánh xạ tĩnh nhằm giúp tối ưu chi phí cho việc di chuyển giữa chúng.
Các kỹ thuật làm giảm tương tác cĩ thể áp dụng cho mơ hình này là giảm kích thước dữ liệu và tần số tương tác bằng cách gia tăng sử dụng dữ liệu cục bộ, và sử dụng các phương pháp tương tác bất đồng bộđể thay tương tác bằng các phép tính cĩ lợi.
2.4.4.3. Mơ hình Work Pool
Cách thức ánh xạ tĩnh các tác vụ vào trong các tiến trình nhằm cân bằng tải là một tính chất tiêu biểu của mơ hình work pool hay task pool, mà trong đĩ nĩ cĩ thểđược thực hiện bởi bất kỳ tiến trình nào.
Trong mơ hình truyền thơng điệp, mơ hình work pool về cơ bản thường được sử dụng khi khối lượng dữ liệu đi theo các tác vụ là khá nhỏ so với nội dung tính tốn của chúng.
cĩ thểước tính được kích thước của các tác vụđĩ hay nếu phương pháp ánh xạ ngẫu nhiên cĩ thể thực hiện cơng việc cân bằng tải. Trong ngữ cảnh khác các tác vụ cĩ thể được gán những phần nhỏ hơn của cơng việc tại các thời điểm khác nhau. Thơng thường người ta sử dụng cách thứ hai nếu tiến trình chính khơng mất quá nhiều thời gian để phát sinh cơng việc khiến các tiến trình con phải chờ đợi. Trong nhiều trường hợp các cơng việc cĩ thể theo nhiều bước, và cơng việc trong mỗi bước phải được thực hiện xong trước khi cơng việc của bước tiếp theo được phát sinh. Đối với những trường hợp như vậy, thì tiến trình chính yêu cầu các tiến trình con phải thực hiện đồng bộ sau mỗi bước. Mơ hình manager-worker cĩ thể được thể hiện theo cấu trúc phân nhánh hay mơ hình manager-worker nhiều tầng mà trong đĩ manager ở cấp cao hơn sẽ truyền xuống các cơng việc cho manager ở cấp dưới, cứ thế tiếp tục phân chia cho các worker thực hiện cơng việc của mình.
Mơ hình này nhìn chung thích hợp cho mơ hình lập trình chia sẽ khơng gian bộ nhớ và truyền thơng điệp vì thường các tương tác là theo 2 chiều, nghĩa là tiến trình chính biết mình phải phân phối cơng việc cịn tiến trình con thì biết mình phải lấy gì từ tiến trình chủ.
Trong khi sử dụng mơ hình master-slave, cần phải cẩn thận để bảo đảm sao cho tại tiến trình chủ khơng xảy ra hiện tượng “cổ chai“, điều này cĩ thể xảy ra nếu các tác vụđược thực thi là quá nhỏ (hay các tiến trình con làm việc quá nhanh).
2.4.4.5. Mơ hình dây chuyền (pipeline) hay Producer- Consumer
Trong mơ hình dây chuyền, một dịng tin được truyền qua một dãy liên tiếp các tiến trình, từng tiến trình sẽ thực hiện một vài tác vụ trên đĩ. Quá trình thực thi đồng thời các chương trình khác nhau trên một dịng tin được gọi là song song theo dịng (stream parallelism). Ngoại trừ tiến trình khởi tạo đường ống, các dữ liệu mới tới sẽ kích hoạt một tiến trình
ống như vậy theo dạng tuyến tính hay mảng nhiều hướng, cây, hay các đồ thị thơng thường cĩ hay khơng cĩ vịng. Một đường ống (pipeline) là một chuỗi của các producer và consumer. Từng tiến trình trong đường ống cĩ thểđược xem như là người tiêu thụ cho một dãy các phần tử dữ liệu của tiến trình trước đĩ và cũng là người sản xuất dữ liệu cho tiến trình tiếp theo trong đường ống. Đường ống khơng nhất thiết là một chuỗi tuyến tính, mà nĩ cĩ thể là một đồ thị cĩ hướng. Mơ hình đường ống thường sử dụng ánh xạ tĩnh các tác vụ vào trong các tiến trình.
2.4.4.6. Mơ hình lai
Trong một vài trường hơp, cĩ thể áp dụng nhiều hơn một mơ hình cho một vấn đề, dẫn đến tạo ra mơ hình thuật tốn lai. Một mơ hình lai cĩ thể được kết hợp từ nhiều mơ hình áp dụng theo dạng phân nhánh hay từ nhiều mơ hình áp dụng tuần tự cho các bước khác nhau của một thuật tốn song song. Trong nhiều trường hợp, một dạng biểu diễn của thuật tốn cĩ thể cĩ nhiều tính chất của nhiều hơn một mơ hình thuật tốn. Ví dụ như là một phép tính chính cĩ thể được thể hiện thành một đồ thị tác vụ, nhưng mỗi nút của đổ thị cĩ thể là một tác vụ cha được kết hợp từ nhiều tác vụ con thích hợp cho mơ hình song song dữ liệu hay dây chuyền. Thuật tốn Quicksort song song là một trong những áp dụng của mơ hình lai.
Chương 3. Các mơi trường hỗ trợ tính tốn lưới 3.1. Giới thiệu
Mục tiêu chính của lập trình Grid là nghiên cứu về các mơ hình lập trình, các cơng cụ và các phương pháp nhằm hỗ trợ cho việc phát triển hiệu quả các thuật tốn và các chương trình hiệu năng cao trên mơi trường lưới. Lập trình lưới yêu cầu các kỹ năng và tính chất cao hơn so với lập trình tuần tự, và thậm chí là lập trình song song và phân tán. Bên cạnh việc sắp xếp các thao tác đơn giản trên những cấu trúc dữ liệu riêng, hay sắp xếp các thao tác phức tạp trên những cấu trúc dữ liệu chia sẽ hay phân tán, một lập trình viên tính tốn lưới cần phải đảm nhiệm luơn việc quản lý tính tốn trên mơi trường. Bên cạnh việc chỉ thực hiện các thao tác đơn giản, người lập trình lưới cũng phải thiết kế tương tác giữa những dịch vụ từ xa, nguồn dữ liệu và tài nguyên phần cứng. Mặc dù người ta cĩ thể xây dựng các ứng dụng Grid với các cơng cụ lập trình hiện tại, nhưng người ta vẫn đang đồng lịng nhất trí với nhau rằng hiện nay chúng vẫn khơng đáp ứng hiệu quả để hỗ trợ cho việc xây dựng mã nguồn Grid.
Các ứng dụng lưới thường cĩ xu hướng động và khơng đồng nhất, bởi vì chúng sẽ chạy trên các loại nguồn tài nguyên khác nhau với cấu hình thay đổi khi thực thi. Những cấu hình động này cĩ thểđược thúc đẩy bởi sự thay đổi của mơi trường, ví dụ như thay đổi hiệu năng hay lỗi của phần cứng, v.v…Bất kể nguyên nhân gì thì liệu một mơ hình hay một cơng cụ lập trình nào đĩ cĩ thể làm cho các nguồn tài nguyên “hỗn tạp” ấy trở nên “gần gũi” với những người lập trình hay khơng? che dấu các khác biệt đĩ trong khi vẫn cho phép người lập trình quyền điều khiển trên các loại tài nguyên nếu cĩ thể? Nhưng nếu cĩ một sự trừu tượng thích hợp được sử dụng thì liệu nĩ cĩ được hỗ trợ, cung cấp bởi các hệ thống thời gian thực?
Grid thường được sử dụng cho tính tốn hiệu năng cao với quy mơ lớn. Để đạt được hiệu năng cao thì yêu cầu cần phải cĩ một sự cân bằng giữa tính
thể thực hiện điều này bằng cách quản lý tính tốn, thơng tin, và dữ liệu cục bộ sử dụng truyền thơng điệp (message passing) hay gọi yêu cầu các phương thức từ xa (remote method invocation - RMI).
Để giải quyết các vấn đề này, chúng ta phải biết được rằng các mơ hình lập trình hiện nay đang thiếu những gì, cần thêm những khả năng mới gì, và nĩ sẽđược thực thi ở mức ngơn ngữ, mức cơng cụ hay ở hệ thống thời gian thực nào. Thuật ngữ mơ hình lập trình ở đây được sử dụng khơng chỉ liên quan đến ngơn ngữ lập trình. Một mơ hình lập trình cĩ thểđược thể hiện theo nhiều dạng khác nhau, ví dụ như một ngơn ngữ, một thư viện API, hay đơn thuần chỉ là một cơng cụ cĩ các chức năng mở rộng. Một mơ hình lập trình thành cơng nhất là mơ hình cĩ hiệu năng cao, sự kết hợp và quản lý linh hoạt các nguồn tài nguyên. Các mơ hình lập trình cũng phải ảnh hưởng đến tồn bộ chu trình phát triển phần mềm : thiết kế, cài đặt, kiểm lỗi, vận hành, duy trì, v.v…Vì thế những mơ hình thành cơng cũng phải đáp ứng việc sử dụng hiệu quả tất cả các loại cơng cụ phát triển, ví dụ như là trình biên dịch, trình sửa lỗi, trình theo dõi hiệu năng…
Trước tiên ta sẽ tìm hiểu các vấn đề chính khi lập trình lưới, sau đĩ chúng ta sẽ tìm hiểu một vài mơ hình lập trình phổ biến đang được sử dụng và đề xuất trên mơi trường Grid. Tiếp theo chúng ta sẽ thảo luận các phương pháp và kỹ thuật lập trình nhằm giải quyết các vấn đề phức tạp bằng cách sử dụng các cơng cụđang cĩ hiện nay.
3.2. Các vấn đề khi lập trình luới
3.2.1. Tính mang chuyển, tính khả thi và khả năng thích ứng
Các ngơn ngữ lập trình cấp cao hiện nay cho phép người dùng viết mã nguồn hồn tồn độc lập với bộ xử lý. Các mơ hình lập trình lưới cũng nên cĩ
khả chuyển như vậy là một điều kiện tiên quyết cho việc sao chép các cấu hình động và khơng đồng nhất.
Việc sử dụng những đoạn mã nguồn và dịch vụ khác nhau nhưng cĩ chức năng tương tự nhau thể hiện tính cộng tác trong việc thi hành các mơ hình lập trình. Khái niệm về một kiến trúc Grid mở và cĩ tính mở rộng ngụ ý là một mơi trường phân tán cĩ thể hỗ trợ cho các giao thức, dịch vụ, giao diện lập trình ứng dụng và các cơng cụ phát triển phần mềm. Cuối cùng tính mang chuyển và tính cộng tác sẽ dẫn đến khả năng thích ứng. Một chương trình Grid phải cĩ khả năng thích ứng với các cấu hình khác nhau dựa trên nguồn tài nguyên sẵn cĩ. Điều này cĩ thể xảy ra vào thời điểm bắt đầu, hay tại thời điểm thực thi nguyên do sự thay đổi các yêu cầu của ứng dụng hay do khả năng phục hồi lỗi. Khả năng thích ứng như vậy cĩ thể liên quan đến một bước khởi động lại đơn giản ởđâu đĩ hay là một sự tích hợp thật sự giữa tiến trình và dữ liệu.
3.2.2. Khả năng phát hiện tài nguyên
Tìm ra các tài nguyên hiện cĩ trên mạng là một phần quan trọng của tính tốn lưới. Mã nguồn của chương trình lưới sẽ chỉ ra rõ ràng những máy (host) thích hợp nào để chạy chương trình. Tuy nhiên bởi vì Grid chứa đựng nhiều dịch vụ cố định, nên chúng cũng vẫn phải cĩ khả năng tìm ra các dịch vụ này và các giao diện mà chúng hỗ trợ. Cách sử dụng các dịch vụ này phải cĩ khả năng tái lập trình và kết hợp lại theo một cách thống nhất. Vì thế mơi trường và cơng cụ lập trình phải chú ý tìm ra các dịch vụ hiện cĩ và cung cấp cho người dùng các cách thức tường minh hay ngầm ẩn để khai thác chúng trong quá trình xây dựng và triển khai các ứng dụng Grid.
3.2.3. Hiệu năng
Rõ ràng đối với nhiều ứng dụng Grid, vấn đề hiệu năng là điều rất đáng quan tâm. Bởi vì Grid sử dụng băng thơng hỗn tạp và các hệ thống phân cấp ẩn cho nên điều này gây khĩ khăn cho việc đạt được hiệu năng tốt nhất và cách sử dụng hiệu quả các nguồn tài nguyên.
Tuy nhiên đối với nhiều ứng dụng, đểđạt hiệu năng đáng tin cậy cũng là một vấn đề khá quan trọng. Một mơi trường động và khơng đồng nhất cĩ thể tạo ra nhiều khả năng thực thi khác nhau mà cĩ thể sẽ khơng được chấp nhận trong nhiều tình huống. Vì thế trong mơi trường chia sẽ, chất lượng dịch vụ sẽ trở nên càng cần thiết nhằm đạt được hiệu năng đáng tin cậy trên một cấu hình tài nguyên đã cho. Trong khi người dùng cĩ thể yêu cầu mơ hình theo một hiệu năng nào đĩ, tuy nhiên sẽ hợp lý hơn nếu hiệu năng cung cấp nằm bên trong một khoảng giới hạn nào đĩ.
3.2.4. Dung lỗi
Việc cần cĩ nhiều cấp độ dung lỗi trong mơi trường Grid là hồn tồn cần thiết. Điều này đặc biệt đúng khi các ứng dụng khởi tạo hàng ngàn các cơng việc độc lập tương tự với nhau trên hàng ngàn máy trạm (host). Rõ ràng khi số lượng các tài nguyên tham gia tính tốn ngày càng tăng thì cũng làm gia tăng xác suất bị hỏng. Các chương trình Grid phải cĩ khả năng kiểm tra các lỗi khi đang thực thi, và bên cạnh đĩ cũng phải cung cấp khả năng phục hồi và phản ứng khi cĩ lỗi xảy ra ở cấp độ chương trình. Tại thời điểm đĩ các cơng cụ cũng phải bảo đảm cho các phép tính cũng được thực thi ở cấp độ tối thiểu khi cĩ lỗi xảy ra.
3.2.5. Bảo mật
Chúng ta sẽ cịn tiếp tục chứng kiến sự phát triển của tính tốn lưới trên nhiều domain chia sẽ, như là các mạng. Trong khi việc cung cấp một chức năng chứng thực mạnh giữa hai site là cực kỳ quan trọng, thì bên cạnh đĩ việc quản lý chương trình trên nhiều site cũng là điều khơng đơn giản. Vì thế, một phương pháp bảo mật cĩ cấp khả năng xác thực người dùng phải được tích hợp vào trong các mơ hình lập trình lưới.
hiện bởi việc thực thi tuần tự các hàm trên dữ liệu trong bộ nhớ. Quá trình chuyển đổi này cĩ thể là sự xây dựng của một số các mơ hình liên quan đến ngữ nghĩa của mã nguồn và sự áp dụng một số tính năng cải tiến như tối ưu,