Một số phương pháp tối ư u

Một phần của tài liệu Nghiên cứu tính toán lưới và thực nghiệm trên một số thuật toán lý thuyết đồ thị (Trang 46 - 50)

Nhưđã lưu ý ở trên, làm giảm tương tác quá mức giữa các tiến trình là một điều quan trọng cho một chương trình song song hiệu quả. Nguyên nhân xảy ra điều này cĩ thể do nhiều yếu tố, như kích thước của dữ liệu dùng trong quá trình tương tác, tần số tương tác…

Trong phần này chúng ta sẽ xem xét một vài phương pháp tổng quát

để làm hạn chế quá tải do tương tác xảy ra trong các chương trình song song. Tất cả các kỹ thuật này cĩ thể khơng thích hợp cho mơ hình lập trình song song và một vài trong sốđĩ cần sự hỗ trợ của phần cứng bên dưới.

2.4.3.1. Tối đa hĩa dữ liệu cục bộ

Trong hầu hết các chương trình song song, các tác vụ được thực thi bởi các tiến trình khác nhau địi hỏi phải được truy cập đến dữ liệu chung. Ví dụ như trong bài tốn nhân ma trận và vector y=Ab , trong đĩ từng tác vụ thực hiện tính tốn từng phần tử của vector y và cần phải truy cập đến các phần tử

của vector nhập b. Các kỹ thuật nhằm gia tăng sử dụng dữ liệu cục bộ bao gồm một pham vi rộng lớn các cách thức nhằm giảm thiểu tối đa kích thước của các dữ liệu truyền tải, tối đa hĩa việc sử dụng lại các dữ liệu vừa được truy cập, và cực tiểu số lần truy cập.

• Cực tiểu dữ liệu trao đổi

Một phương pháp cơ bản nhằm làm giảm sự tương tác quá mức là làm giảm đến mức tối đa dữ liệu chia sẽ cần để truy cập bởi nhiều tiến trình cùng một lúc. Điều này tương tự với việc tối đa hĩa sử dụng dữ liệu cục bộ

một cách tạm thời, nghĩa là thực hiện tham chiếu liên tục đến càng nhiều dữ

liệu càng tốt. Rõ ràng càng nhiều bước tính tốn trên dữ liệu cục bộ cĩ sẵn sẽ

gĩp phần xĩa đi yêu cầu chuyển dữ liệu vào vùng đệm cho các tiến trình xử lý. Như đã nĩi ở trên để đạt được điều này cần áp dụng các phương pháp phân hoạch và ánh xạ thích hợp. Ví dụ như trong bài tốn nhân ma trận nếu ta áp dụng ánh xạ 2 chiều thì kích thước dữ liệu chia sẽ cần được truy cập chỉ là

http://etrithuc.vn

p n2

2

, cịn nếu áp dụng ánh xạ 1 chiều thì kích thước sẽ lên tới

2 2 n p n + . Nĩi tĩm lại, phân bố với số chiều càng cao thì càng làm giảm khối lượng của dữ liệu cần chia sẽ.

Một cách khác để làm giảm sự truy cập của các tiến trình đến dữ liệu chia sẽ là sử dụng dữ liệu cục bộ để lưu kết quả trung gian, và chỉ thực hiện truy cập đến dữ liệu chia sẽ tại nơi sẽ tính tốn kết quả cuối cùng.

• Cực tiểu tần số tương tác

Đây là một phương pháp quan trọng trong việc làm giảm sự quá tải tương tác trong các chương trình song song bởi vì trong nhiều kiến trúc thì chi phí kích hoạt cho từng tương tác là khá lớn. Ta cĩ thể làm giảm tần số tương tác bằng cách tái cấu trúc lại các thuật tốn sao cho các dữ liệu chia sẽ được truy cập và sử dụng thành các phần lớn.

2.4.3.2. Giảm thiểu tối đa các điểm xung đột, tranh chấp

Phần bàn luận của chúng ta cho đến bây giờ chỉ là tập trung làm giảm tương tác quá mức chủ yếu bằng cách trực tiếp hay gián tiếp làm giảm tần số và dụng lượng dữ liệu trao đổi. Tuy nhiên mơ hình tương tác giữa các tác vụ thường dẫn đến tranh chấp làm gia tăng sự tương tác. Nĩi chung, tranh chấp xảy ra khi nhiều tác vụ cùng truy cập đồng thời vào tài nguyên. Nhiều luồng trao đổi dữ liệu trên cùng một đường liên kết, nhiều sự truy cập cùng lúc vào cùng một khối nhớ, hay nhiều tiến trình thực hiện gửi những thơng điệp

đến cùng một tiến trình vào cùng một thời điểm, tất cả cĩ thể dẫn đến sự xung

đột. Điều này bởi vì chỉ một trong nhiều thao tác cĩ thể được thực thi tại một thời điểm cịn những thao tác cịn lại phải được sắp xếp và thực hiện tuần tự.

Xem lại bài tốn nhân hai ma trận C = AB, sử dung phương pháp phân hoạch theo 2 chiều như hình bên trên (Hình 2.16). Gọi p là số lượng các tác vụđược ánh xạ 1-1 vào trong các tiến trình. Mỗi tác vụ sẽ chịu trách nhiệm

http://etrithuc.vn

tính tốn một phần tửCi,j của ma trận kết quả C, với 0≤i,j< p. Phần tửCi,j

được tính theo cơng thức (viết theo ký hiệu ma trận khối):

∑ − = = 1 0 , , , * p k j k k i j i A B C

Xem cách truy cập vào bộ nhớ của cơng thức trên, chúng ta thấy rằng bất cứ tại bước pnào, thì p các tác vụ cũng sẽ truy cập vào cùng một khối của ma trận A và B. Trong trường hợp đặc biệt, tất cả các tác vụ làm việc trên cùng một dịng của C cũng sẽ truy cập lên cùng một khối của A. Ví dụ như

tất cả p tiến trình tính C0,0, C0,1, …, C0, p−1cũng sẽ cùng đọc A0,0 cùng một lúc. Tương tự như vậy tất cả các tác vụ làm việc trên cùng một cột của C cũng sẽ truy cập lên cùng một khối của B. Nhu cầu truy cập đồng thời lên cùng các khối nhớ này của ma trận A và B sẽ tạo ra xung đột trên cả kiến trúc chia sẽ

khơng gian bộ nhớ NUMA và kiến trúc truyền thơng điệp.

Một cách để làm giảm tranh chấp này là thiết kế lại thuật tốn song song để nĩ truy cập vào dữ liệu theo các mẩu khơng xung đột. Ví dụ như thuật tốn nhân ma trận, chúng ta cĩ thể hiệu chỉnh thứ tự các khối ma trận được nhân với nhau bằng cách sử dụng cơng thức:

∑ − = + + + + = 1 0 ,( )% ( )% , , * p k j p k j i p k j i i j i A B C

Bằng cách sử dụng cơng thức này tất cả các tác vụ P*,j làm việc trên cùng một dịng của C sẽ truy cập vào khối nhớ A*, (*+j+k)% p, khác nhau cho từng tác vụ. Vì vậy chỉ bằng cách sắp xếp lại thứ tự nhân các khối với nhau, ta cĩ thể loại bỏ tranh chấp. Ví dụ như trong các tiến trình tính tốn khối dịng của C, thì tiến trình tính tốn C0,j sẽ truy cập A0,j từ khối dịng đầu tiên của ma trận A thay vì A0,0.

http://etrithuc.vn

Việc sử dụng ánh xạ động thường là nguồn gốc của những tranh chấp trên cấu trúc dữ liệu chia sẽ hay là từ các kênh giao tiếp dẫn đến tiến trình chính.

2.4.3.3. Đan xen các phép tính và tương tác

Thời gian mà các tiến trình chờ các dữ liệu chia sẽ đến hay nhận thêm một cơng việc sau khi tương tác cĩ thể được làm giảm xuống, thơng thường là theo từng phần, bằng cách thực hiện một số phép tính tiện ích trong suốt thời gian chờđợi.

Một cách đơn giản để đan xen là khởi gán tương tác đủ sớm để nĩ hồn tất trước khi cần cho tính tốn. Đềđạt được điều này, chúng ta phải cĩ thể

nhận ra các phép tính cĩ thể trước khi thực hiện tương tác. Sau đĩ trong chương trình song song phải được cấu trúc sao cho thực hiện khởi gán tương tác trước thời điểm mà nĩ thực hiện trong thuật tốn gốc. Về cơ bản, điều này là cĩ thể nếu cĩ nhiều tác vụ sẵn sàng thực thi cĩ sẵn trên cùng một tiến trình sao cho nếu cĩ một khối chờ cho việc tương tác hồn tất thì tiến trình vẫn cĩ thể thực thi các tác vụ khác.

Trong nhiều trường hợp, đan xen các phép tính và sự tương tác địi hỏi phải cĩ sự hỗ trợ từ mơ hình lập trình , hệđiều hành, và thiết bị phần cứng. Mơ hình lập trình phải cung cấp một cách thức cho phép tương tác và tính tốn

được tiến hành đồng thời. Cách thức này phải được hỗ trợ bởi phần cứng bên dưới. Mơ hình và kiến trúc khơng gian địa chỉ khơng liên kết thường cung cấp sự hỗ trợ này thơng qua truyền thơng điệp ưu tiên dạng non-blocking. Mơ hình lập trình cung cấp các hàm cho việc gửi và nhận thơng điệp cho phép trả quyền

điều khiển cho chương trình người dùng trước khi nĩ thực sự hồn tất. Vì thế

chương trình cĩ thể sử dụng các hàm ưu tiên này để khởi tạo những tương tác và sau đĩ thực hiện các phép tính tốn. Nếu phần cứng cho phép tính tốn được thực hiện song song với trao đổi thơng điệp, thì sự tương tác cĩ thể giảm đáng kể.

http://etrithuc.vn 2.4.3.4. Tạo bản sao dữ liệu hay các phép tính tốn

Trong một vài thuật tốn song song, nhiều tiến trình cĩ thể địi hỏi truy cập chỉ đọc thường xuyên vào một cấu trúc dữ liệu chia sẽ, như là bảng băm. Ví thế trừ khi khơng được phép yêu cầu thêm bộ nhớ, cịn khơng thì nên tạo một bản sao cấu trúc dữ liệu chia sẽ cho mỗi tiến trình để sau khi khởi gán tương tác, tất cả các những truy cập tiếp theo vào cấu trúc dữ liệu này sẽ khơng gây quá tải do tương tác.

Trong mơ hình chia sẽ khơng gian bộ nhớ, việc tạo bản sao của các dữ liệu chỉ đọc, được truy cập thường xuyên thì thường bị chịu tác động bởi những cache mà khơng phải do sự can thiệp tường minh của lập trình viên. Nhân bản dữ liệu một cách tường minh thường thích hợp cho các kiến trúc và mơ hình lập trình mà gặp phải những chi phí đáng kể khi truy cập vào dữ liệu chia sẽ. Vì thế mơ hình truyền thơng điệp là được lợi nhất khi ta thực hiện tạo bản sao dữ liệu ở các tiến trình, điều này cĩ thể làm giảm đáng kể sự quá tải do tương tác và cũng làm đơn giản hơn khi viết các chương trình song song.

Tuy nhiên tạo bản sao dữ liệu khơng phải là khơng tốn chi phí. Nĩ làm gia tăng bộ nhớ của chương trình song song. Dung lượng bộ nhớ yêu cầu gia tăng lũy tiến cùng với số lượng tiến trình chạy đồng thời. Điều này cĩ thể

làm giới hạn lại kích thước vấn đề cĩ thể được giải quyết trên một máy tính song song đã cho. Vì lý do này mà sao lưu dữ liệu phải được sử dụng một cách lựa chọn cho số lượng dữ liệu tương đối nhỏ.

Bên cạnh dữ liệu nhập, các tiến trình trong một chương trình song song cũng thường chia sẽ kết quả trung gian. Trong những trường hợp như

vậy, để cho các tiến trình tự tính tốn kết quả trung gian sẽ hiệu quả hơn so với lấy chúng từ những tiến trình khác.

Một phần của tài liệu Nghiên cứu tính toán lưới và thực nghiệm trên một số thuật toán lý thuyết đồ thị (Trang 46 - 50)

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

(153 trang)