Phương pháp thiết kế các chương trình song song

Một phần của tài liệu PHƯƠNG PHÁP GIẢI QUYẾT BÀI TOÁN CÓ LƯỢNG DỮ LIỆU LỚN TRONG GRID COMPUTING (Trang 28)

Hầu hết các bài toán có rất nhiều giải pháp để thực hiện nó theo cách song song. Giải pháp song song tốt nhất có thể khác so với các giải thuật tuần tự được đề nghị đã có. Phương pháp luận thiết kế sau đây nhằm hoàn thiện một cách tiếp cận thiết kế trong đó các kết quả độc lập với máy tính được xem xét trước (ví dụ việc xử lý đồng thời), và các khía cạnh có phụ thuộc vào máy tính được dời lại ở những bước thiết kế sau. Phương pháp luận thiết kế này kiến trúc qui trình thiết kế thành 4 bước khác nhau: Phân chia (partitioning), Truyền thông (communication), Kết hợp (agglomeration), và Ánh xạ (mapping). Hai bước đầu tiên chú trọng đến xử lý đồng thời và khả năng mở rộng, chú ý tìm kiếm các giải thuật để đạt được mục đích này. Ở các bước thứ 3 và thứ 4 thì chú trọng vào vị trí và các vấn đề về hiệu năng có liên quan khác.

Phân chia: Các tính toán cần thực hiện và các dữ liệu được xử lý bởi tính toán này được chia thành các công việc nhỏ. Lúc này chưa cần quan tâm đến thực tế như số lượng các bộ xử lý của hệ thống,... mà chỉ cố gắng tìm ra các cơ hội để thực hiện song song bài toán.

Truyền thông: Chỉ ra các truyền thông yêu cầu phải có để các công việc cùng thực hiện, định nghĩa các kiến trúc và các giải thuật truyền thông.

Kết hợp: Các công việc và cấu trúc truyền thông được định ra ở hai bước trước được đánh giá về khía cạnh các yêu cầu hiệu suất và giá cả để thực hiện. Nếu cần thiết thì các công việc được kết nối lại thành các công việc lớn hơn để làm tăng

hiệu suất và giảm giá thành phát triển.

Ánh xạ: Các công việc được phân vào các bộ xử lý nhằm mục tiêu cố gắng đạt được lượng xử lý cao nhất và giảm truyền thông thấp nhất. Việc ánh xạ này có thể thực hiện từ đầu (tĩnh) hoặc trong quá trình thực thi thông qua các thuật toán cân bằng tải (load - balancing).

Qui trình thiết kế một ứng dụng song song

Kết quả của qui trình thiết kế này có thể là một chương trình tạo và hủy các công việc một cách linh động, sử dụng các kỹ thuật cân bằng tải để ánh xạ các công việc vào các bộ xử lý. Hoặc một dạng khác là một chương trình dạng SPMD (Single Program, Multiple Data - một chương trình, nhiều dữ liệu) chỉ tạo tương ứng một công việc cho một bộ xử lý. Qui trình khám phá giải thuật được áp dụng cho cả hai trường hợp này, ngoại trừ nếu để tạo một chương trình SPMD thì các vấn đề ở bước Ánh xạ được gộp chung vào bước Kết hợp.

Giải pháp thiết kế này được thực hiện tuần tự. Tuy nhiên trong thực tế do có nhiều vấn đề cần phải cân nhấc nên khi đánh giá lại thiết kế có thể phải thay đổi các quyết định của các bước thiết kế trước dó.

Sau đây là các mô tả chi tiết hơn về các bước thiết kế: 1. Phân chia

Bước phân chia có mục đích là tìm ra các cơ hội để thực hiện song song các công việc. Vì vậy nó chú ý đến việc định nghĩa ra một số lượng lớn các công việc nhỏ để thực hiện.

Phân chia bao gồm việc phân chia các tính toán để giải quyết bài toán và phân chia các dữ liệu được xử lý trong bài toán. Khi thiết kế một cách phân chia, thông thường lập trình viên nghĩ đến cách chia nhỏ các dữ liệu của bài toán, sau đó định ra

một cách phân chia dữ liệu và tìm cách kết hợp các tính toán vào các dữ liệu đó. Kỹ thuật phân chia này được gọi là phân rã miền (domain decomposition). Cách tiếp cận khác là phân rã các tính toán sẽ được thực thi, sau đó đính kèm các dữ liệu cần để tính toán. Cách tiếp cận này gọi là phân rã chức năng (functional decomposition). Có thể áp dụng các cách tiếp cận khác nhau đối với từng phần của bài toán hoặc cả bài toán để tìm ra nhiều giải thuật song song khác nhau.

Ở bước thiết kế này, tránh việc phải tạo ra các bản sao tính toán và dữ liệu, vì vậy phải tìm cách định nghĩa các công việc sao cho việc tính toán và dữ liệu phải thuộc các tập không trùng nhau.

Phân rã miền

Với cách tiếp cận này, ta tìm cách phân rã dữ liệu của bài toán thành các mẫu dữ liệu nhỏ có kích thước xấp xỉ nhau, sau đó ta phân chia các tính toán phải được thực hiện, bằng cách kết nối mỗi xử lý với các dữ liệu mà nó xử lý. Cách phân chia này tạo ra một số lượng các công việc, mỗi công việc bao gồm một số dữ liệu và các một tập các xử lý trên dữ liệu đó. Một xử lý có thể yêu cầu dữ liệu trên nhiều công việc khác nhau, trong trường hợp đó thì cần phải có truyền thông giữa các công việc.

Phân rã chức năng

Trong cách tiếp cận này thì các tính toán cần thực thi được chú ý trước chứ không phải dữ liệu mà nó thao tác trong tính toán. Nếu phân chia được các tính toán này thành các công việc tách rời nhau, ta sẽ định ra các dữ liệu cần thiết cho các công việc này. Các dữ liệu cần thiết cho từng công việc này có thể tách rời nhau, nhưng cũng có thể chồng lên nhau. Trường hợp này thì cần phải có lượng truyền thông lớn để tránh việc tạo các bản sao dữ liệu. Đây là lý do tại sao cách tiếp cận phân rã miền được yêu thích hơn.

Phân rã chức năng còn có vai trò quan trọng trong kỹ thuật kiến trúc chương trình. Phân rã chức năng không chỉ phân chia các tính toán cần thực hiện mà còn phân chia mã (code) để thực thi các tính toán này, làm giảm sự phức tạp của thiết kế tổng thể. Điều này thường thấy trong thiết kế mô hình của các hệ thống phức tạp, thường được cấu trúc thành các thành phần đơn giản hơn kết nối thông qua các giao diện (interfaces).

2. Truyền thông

Các công việc được phân chia thông thường không độc lập với nhau mà một tính toán của công việc này có thể cần dữ liệu được liên kết với một công việc khác. Dữ liệu phải được truyền giữa các công việc với nhau để thực hiện việc tính toán.

Việc lưu chuyển thông tin này được thiết kế ở bước Truyền thông.

Truyền thông giữa hai công việc với nhau thông qua một kênh (channel) mà mỗi công việc đều có thể gởi thông điệp và công việc kia có thể nhận. Vì vậy truyền thông kết hợp với một giải thuật có thể định ra thành 2 giai đoạn. Trước hết ta định nghĩa một cấu trúc kênh liên kết (trực tiếp hay gián tiếp) các công việc cần dữ liệu và các công việc tạo ra các dữ liệu đó. Thứ hai, ta định nghĩa các thông điệp sẽ được gởi nhận giữa các kênh này.

Để có thể định nghĩa rõ hơn các truyền thông, có thể phân chia tính chất các truyền thông thành các cặp sau: cục bộ/toàn bộ (local/global), có cấu trúc/không cấu trúc (structured/unstructured), tĩnh/động (static/dynamic), đồng bộ/bất đồng bộ (synchronous/asynchronous).

• Trong truyền thông cục bộ thì mỗi công việc chỉ giao thiệp với một tập hợp nhỏ các công việc khác (các công việc tương cận); ngược lại, truyền thông toàn bộ thì yêu cầu mỗi công việc giao thiệp với nhiều công việc.

• Trong truyền thông có cấu trúc, các công việc và các lân cận của nó sắp xếp theo một cấu trúc cân đối, ví dụ dạng cây hoặc đạng lưới. Ngược lại ở truyền thông không có cấu trúcthì là một hình thức tùy tiện.

• Trong truyền thông tĩnh, các thành phần tham gia truyền thông không thay đổi theo thời gian; ngược lại các thành phần truyền thông trong cấu trúc truyền thông động được định ra bởi dữ liệu tính toán ở thời điềm thực thi và có thể khác nhau.

• Trong truyền thông đồng bộ, bên yêu cầu dữ liệu và bên cung cấp dữ liệu hoạt động theo cách cộng tác, các cặp yêu cầu/cung cấp cộng tác với nhau trong việc truyền dữ liệu. Ngược lại trong truyền thông bất đồng bộ đòi hỏi bên yêu cầu dữ liệu có thể nhận dữ liệu mà không cần cộng tác với bên cung cấp.

3. Kết hợp

Trong hai bước thiết kế đầu tiên, ta phân chia các tính toán thành một tập các công việc và chỉ ra các truyền thông để cung cấp dữ liệu cho các công việc này. Giải thuật đề ra vẫn chưa rõ ràng vì nó chưa thể hiện hiệu quả khi đem thực thi trên hệ thống máy tính song song nào. Thực tế thì nó có thể kém hiệu quả ví dụ như nó tạo ra số lượng công việc quá nhiều so với số lượng bộ xử lý và máy tính thì được thiết kế khi thực hiện nhiều công việc nhỏ thì không có hiệu quả.

lại các quyết định khi thiết kế phân chia và truyền thông sao cho tìm được thuật giải sẽ mang lại hiệu quả cao nhất đối với một lớp máy tính song song cụ thể nào đó. Cụ thể hơn, ta sẽ xem xét việc kết hợp các công việc lại sẽ mang lại ích lợi gì, tạo ra các công việc lớn hơn và ít công việc hơn. Ta cũng xem xét đến ích lợi của việc tạo bản sao của dữ liệu và tính toán.

Số lượng các công việc tạo ra trong bước Kết hợp này sẽ giảm đi, tuy nhiên vẫn có thể lớn hơn số lượng bộ xử lý. Trong trường hợp này thì thiết kế vẫn có điểm chưa hiện thực, do chưa thể ánh xạ các công việc vào các bộ xử lý. Một sự lựa chọn trong bước Kết hợp này là làm giảm số công việc xuống còn tương ứng mỗi công việc một bộ xử lý. Việc này phù hợp nếu kết quả thiết kế là chương trình SPMD.

Có 3 vấn đề đôi khi xung đột với nhau liên quan đến việc kết hợp và tạo bản sao: giảm chi phí truyền thông bằng cách tăng độ lớn của tính toán và truyền thông, duy trì tính linh hoạt đối với việc mở rộng và các quyết định ánh xạ, giảm chi phí thực hiện phần mềm.

Tăng độ lớn

Trong bước phân chia, chúng ta quan tâm đến việc phân chia các công việc càng nhiều càng tốt, nhưng việc này không hẳn mang lại thuật giải song song có hiệu quả cao. Một vấn đề lớn tác động đến hiệu suất của tính toán là chi phí truyền thông. Trong hầu hết các hệ thống máy tính song song thì phải ngưng việc tính toán để đợi gởi và nhận thông điệp, vì vậy ta có thể tăng hiệu suất bằng cách giảm truyền thông, gởi nhận các thông điệp ít hơn. Ngoài chi phí truyền thông, chi phí khởi tạo công việc cũng cần được quan tâm, với nhiều công việc nhỏ thì chi phí khởi tạo này sẽ cao.

Giữ tính linh hoạt

Khi thiết kết kết hợp các công việc phải quan tâm giữ tính linh hoạt của giải thuật, cho phép chương trình có thể chuyển đổi và mở rộng, số lượng các công việc không nên bị giới hạn bởi một con số cố định nào đó mà có thể chuyển đổi khi chuyển sang các hệ thống máy tính khác.

Giảm chi phí phát triển phần mềm

Khi thiết kế thuật giải song song thì ngoài việc tăng hiệu năng và tính linh hoạt còn phải tính đến giảm chi phí phát triền. Điều này đặc biệt quan trọng khi chuyển mã một chương trình tuần tự sang một chương trình song song, mỗi chiến lược song song cần có một chi phí phát triển tương ứng. Từ khía cạnh này thì chiến lược được ưa thích nhất là tránh mở rộng việc thay đổi mã.

4. Ánh xạ

sẽ được thực thi ở đâu. Mục tiêu của bước thiết kế ánh xạ này là làm giảm tổng thời gian thực thi của chương trình. Có hai chiến lược để đạt được mục tiêu này là:

• Đặt các công việc có thể thực hiện đồng thời trên các bộ xử lý khác nhau, để tăng việc xử lý đồng thời.

• Đặt các công việc có truyền thông với nhau nhiều lên cùng một bộ xử lý, để tăng tính truyền thông nội bộ.

Trong thực tế thì 2 chiến lược này đôi khi xung đột lẫn nhau, trong trường hợp này thì thiết kế phải làm sao cho cân bằng. Ngoài ra cũng không thể đặt nhiều công việc lên một bộ xử lý do giới hạn về tài nguyên. Không có thuật toán nào có thể định giá sự cân bằng này trong trường hợp tổng quát mà chỉ có chiến lược cho từng lớp bài toán cụ thể.

Với các giải thuật được phát triển sử dụng kỹ thuật phân rã miền tạo ra các công việc có độ lớn bằng nhau và các truyền thông là có cấu trúc, cục bộ và toàn cục. Trong trường hợp này thì việc ánh xạ là dễ thực hiện. Ta ánh xạ các công việc sao cho giảm thiểu các truyền thông giữa các bộ xử lý. Ta cũng chọn kết hợp các công việc được ánh xạ vào cùng một bộ xử lý.

Với các giải thuật phân rã miền phức tạp với các truyền thông không có cấu trúc, chiến lược kết hợp và ánh xạ không thể rõ ràng đối với lập trình viên, vì vậy có thể đề racác giải thuật cân bằng tải để tìm ra các giải thuật kết họp và ánh xạ hiệu quả,

thông thường là sử dụng kỹ thuật heuristic. Thời gian cần thiết để thực thi các giải thuật này được đánh giá tương phản với ích lợi của việc giảm thời gian thực thi. Phương pháp cân bằng tải theo xác xuất thấp hơn là phương pháp khai thác cấu trúc trong một chương trình.

Vấn đề phức tạp nhất là trường hợp số lượng các công việc hay số lượng các tính toán và truyền thông trong một công việc thay đổi trong quá trình thực thi chương trình. Trong trường hợp bài toán được thiết kế sử dụng kỹ thuật phân rã miền, chúng ta nên dùng chiến lược cân bằng tải động, giải thuật cân bằng được tính toán định kỳ để định ra cách kết hợp và ánh xạ mới.

Các giải thuật dựa trên phân rã chức năng thông thường tạo ra các tính toán bao gồm nhiều công việc có thời gian sống ngắn chỉ phối hợp với các công việc khác vào thời điểm bắt đầu hoặc kết thúc thực thi. Với trường hợp này ta dùng giải thuật lập lịch công việc (task-scheduling) phân phối các công việc đến các bộ xử lý rảnh rỗi.

Một phần của tài liệu PHƯƠNG PHÁP GIẢI QUYẾT BÀI TOÁN CÓ LƯỢNG DỮ LIỆU LỚN TRONG GRID COMPUTING (Trang 28)

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

(43 trang)
w