Phương pháp song song trong bài toán xâu con chung dài nhất

Một phần của tài liệu (LUẬN văn THẠC sĩ) một số phương pháp thiết kế thuật toán cơ bản trong tính toán song song và ứng dụng (Trang 43 - 50)

Việc song song hóa bài tốn tìm xâu con chung dài nhất đã được nghiên cứu rất nhiều trong thời gian gần đây với các phương pháp dựa trên Bit của Myers [9], phương pháp dựa trên phần tử trội của Korkin [7]. Trong phần này, một phương pháp song song mới được áp dụng dựa trên những nhận xét như sau:

- Các phần tử trội ở mức cao hơn đều được tính dựa vào các phần tử trội ở mức thấp hơn.

- Các phần tử ở các vùng khơng trội hơn nhau có thể được tính tốn một cách đồng thời.

Bảng 2.4. Ví dụ về việc tìm các phần tử trội độc lập trên hai vùng khác nhau.

H E A G A W G H E E A 1 1 W H 1 E 2 3 A E

Giả sử chúng ta đã tìm kiếm được các phần tử trội trong một khối đầu tiên 3x3 của ma trận phương án tìm xâu con chung dài nhất của hai xâu trong bảng 2.4. Như

vậy cơng việc tìm kiếm phần tử trội sẽ được tiến hành ở khối thứ 1 nếu đi theo chiều ngang hoặc ở khối thứ 2 nếu đi theo chiều dọc. Hai khối 1 và 2 là không trội hơn nhau. Cả hai khối này chỉ trội hơn khối đầu tiên đã được tính các phần tử trội. Như vậy hai khối 1, 2 hồn tồn có thể được tính tốn một cách độc lập trên các bộ xử lý khác nhau. Khối thứ 3 trơi hơn cả ba khối cịn lại, do đó để tìm các phần tử trội của khối này bắt buộc phải biết các phần tử trội ở các khối trước đó.

Như vậy, nếu có k bộ xử lý, chúng ta hồn tồn có thể chia vùng tìm kiếm ra thành các ơ chữ nhật, rồi từ đó xác định các ơ khơng trội hơn nhau thì sẽ hồn tồn tính tốn được số phần tử trội của mỗi ơ này một cách độc lập.

Ví dụ với việc tìm xâu con chung dài nhất của hai chuỗi với 4 bộ xử lý, khi đó khơng gian tìm kiếm sẽ được chia thành 4x4 = 16 ô được đánh số theo thứ tự thực hiện, các ơ khơng trội hơn nhau và có thể được tính tốn một cách đồng thời sẽ có cùng số thứ tự thực hiện như trong bảng 2.4.

Bảng 2.4. Chia ơ vùng tìm kiếm và xác định các vùng tìm kiếm đồng thời.

0 1 2 3

1 2 3 4

2 3 4 5

3 4 5 6

Từ bảng 2.4, việc tìm kiếm phần tử trội trên ơ 0 được thực hiện trước tiên. Sau đó hai ơ cùng số thứ tự 1 trội hơn so với ơ 0 nên do đó hai ơ này sẽ được thực hiện trên hai bộ xử lý khác nhau. Sau khi có được các phần tử trội từ hai ơ này, các phần tử trội sẽ được gộp lại để chuẩn bị cho bước thực hiện sau. Vì các ơ có cùng số thứ tự thực hiện là khơng trội hơn nhau (độc lập với nhau), nên do đó các phần tử trội của các khối này cũng khơng trội hơn nhau, do đó mà các phần tử trội sau khi gộp lại không bị xung đột, mâu thuẫn. Với 4 bộ xử lý, thuật toán sẽ được thực hiện với 7 bước tuần tự (từ bước 0 đến bước 6). Thuật toán sẽ sử dụng số bộ xử lý tương ứng với số ô độc lập và đạt đến cực đại là 4 bộ xử lý tại bước 3. Sau đó số bộ xử lý thực

hiện sẽ giảm dần xuống 1 tại bước 6. Như vậy số bước thực hiện đối với hai xâu và số bộ xử lý bằng 4 là 7 bước.

Như vậy, giả sử có k bộ xử lý, khơng gian tìm kiếm trên mỗi trục sẽ được chia thành k phần, do đó số bước thực hiện tuần tự sẽ phải đi bám dần trên các trục này để đến được ơ cuối cùng. Giả sử có d xâu ký tự, khi đó số bước thực hiện tuần tự sẽ là: dk11 bước.

Hình 2.1 Tuần tự các khối tìm kiếm với ba chuỗi và bốn bộ xử lý

Ví dụ với ba xâu ký tự và 4 bộ xử lý, khơng gian tìm kiếm sẽ là một hình hộp chữ nhật. Số bước tuần tự sẽ là 3 x (4 - 1) + 1 = 10 như trong hình 2.1.

Việc xác định các khối độc lập trong cùng một bước tuần tự để có thể song song hóa được thực hiện như sau:

Giả thiết có k bộ xử lý, d xâu ký tự. Ta chia trên mỗi trục thành k phần bằng nhau và đánh số từ 0 đến k1. Gọi Ax1,x2,...,xd, 0xik1, i1,...,d là ô tương ứng với các vùng tìm kiếm. Tại điểm xuất phát đầu tiên, chỉ có duy nhất một khối là

0,0,...,00

A được thực hiện. Ở bước tuần tự thứ 2, khi giá trị tuần tự trong các ơ là 1, khi đó tức là các ơ này đều phụ thuộc vào A0,0,...,0. Các ơ này có dạng như sau:

 i0,..,1,.,0

phần tọa độ trong B đều bằng 1 hay đều bằng với số thứ tự thực hiện các bước tuần tự. Do đó, giả sử bước thực hiện tuần tự đang ở bước thứ m, khi đó các khối thực hiện tại bước này sẽ có dạng Mx1,x2,...,xd với x m

d i i   1 và d i k xi 1, 0,1,...,

0     . Rõ ràng đây là bài tốn phân tích số m ra thành tổng của

d số tự nhiên nhỏ hơn k và các hoán vị của chúng.

Để chứng minh việc phân chia này là đúng đắn, chúng ta có thể nhận thấy như sau: với d xâu ký tự và k bộ xử lý, số bước tuần tự bắt buộc ít nhất phải là

 

dk1 1 bước.

Giả sử ta đang thực hiện tại bước thứ m. Khi đó Mx1,x2,...,xd với x m

d

i i

1

là các khối độc lập có thể tiến hành song song hóa. Các phân hoạch của phép phân tích số m thành tổng của d số nhỏ hơn m là hoàn toàn khác nhau. Hơn nữa với mỗi cách phân hoạch như vậy, ta lấy hoán vị của các phần tử trong M sẽ tạo thành các khối hoàn toàn phân biệt. Như vậy trong cùng một bước chia, các khối sẽ không bị trùng lặp. Ngoài ra, hai khối ở hai bước thực hiện sẽ phải khác nhau do tổng các thành phần trong khối đã khác nhau.

Hình 2.2 Tọa độ các ơ tại các bước tuần tự của hai xâu và bốn bộ xử lý

Trở lại với ví dụ hai xâu và bốn bộ xử lý, với điểm xuất phát của khối tuần tự ở bước 0 là (0,0). Khi chuyển sang bước 1, vị trí xuất phát của hai khối bước này là

(0,1) và (1,0). Cứ tiếp tục như vậy, ở bước 2 sẽ có 3 khối độc lập là (2,0), (1,1) và (0,2); ở bước 3 sẽ là (3,0), (2,1), (1,2), (0,3); ở bước 4 sẽ là (3,1), (2,2), (1,3); ở bước 5 sẽ là (3,2) và (2,3) và ở bước 6 là (3,3).

Tuy rằng bài tốn phân tích số và hốn vị là bài tốn NP-Hard, tuy nhiên do số xâu ký tự cùng so sánh là không lớn (<10), số bộ xử lý có giới hạn nên chi phí tính tốn các ơ cùng một bước tuần tự là không đáng kể.

Hình 2.3 Tọa độ các ơ tại các bước tuần tự của hai xâu và bốn bộ xử lý.

Trong ví dụ hình 2.3, khi thực hiện tính tốn ở bước thực hiện 0 (được bao trong hình vng đậm) sẽ tìm được một phần tử trội (các điểm được khoanh tròn). Đến bước thực hiện 1, dựa vào một phần tử trội tại bước 0, hai khối tại bước 1 sẽ thực hiện tìm kiếm các phần tử trội. Kết quả trả về được ba phần tử trội, sẽ được ghép lại với phần tử trội tại bước 0 cho các bước thực hiện 2, 3 và 4.

Giả thiết trong k bộ xử lý có một bộ xử lý là chủ (master) và các bộ còn lại là khách (slave). Gọi b là bước thực hiện và MAXB (MAXBdk11) là số bước tuần tự thực hiện. Một mảng hai chiều key sẽ lưu lại vị trí các ơ độc lập trong một bước của từng bộ xử lý. Mỗi bộ xử lý sẽ được gán một số hiệu id để phân biệt với các bộ xử lý khác và sẽ nhận được key tương ứng với số hiệu id của mình. Trong một vòng lặp, số thứ tự lặp được xác định bằng biến b, bộ xử lý chủ sẽ gửi công việc là một số khối độc lập cho từng bộ xử lý để tìm các phần tử trội. Các bộ xử lý sau khi tìm được các phần tử trội, sẽ gửi lại các phần tử này cho bộ xử lý chủ để tổng hợp lại để chuyển sang bước lặp b1.

Thuật toán song song được thể hiện như sau: Input d xâu ký tự độ dài n

Output Tập các phần tử trội và xâu con chung dài nhất của d xâu ký tự

MASTER SLAVER

1: b0 b0

2: D D

3: While(bMAXB) While(bMAXB) 4: key=getKey(b)

5: Gửi key[i] cho bộ xử lý i Nhận key[id]

6: If(b0 and bMAXB1) If(b0 and bMAXB1)

7: Gửi ˆb1 D cho các bộ xử lý Nhận ˆb1 D 8: Gán  b D D D  ˆ 9: endIf 10:  b id

Dˆ = FindDominant(key[id])  b id

Dˆ = FindDominant(key[id])

11: If(b0 and bdk1) 12: For i = 1 to k 13: Nhận  b i Dˆ Gửi  b id Dˆ cho bộ xử lý chủ 14: Gán    b i b b D D Dˆ  ˆ  ˆ 15: endFor 16: endIf endIf 17: b b 18: endWhile endWhile

Trong đó:

- D là tập các phần tử trội.

- key[id] là một mảng đánh dấu các khối độc lập mà bộ xử lý id cần phải thực hiện trong một bước lặp.

- Hàm getKey(b) dùng để lấy các khối độc lập gán cho các bộ xử lý ở bước xử lý tuần tự b.

- Hàm FindDominant(key[id]) là hàm tìm kiếm các phần tử trội với vùng tìm kiếm là khối key[id] và  b

id

Dˆ là tập các phần tử trội trong vùng tìm kiếm này.

Giải thuật song song phải mất một bước đầu tiên và cuối thực hiện tuần tự một khối công việc. Gọi  i

B là số khối độc lập ở bước thực hiện thứ i

(0idk1). Gọi hB ik với  là phép chia lấy phần nguyên làm trịn lên. Khi đó số khối thực hiện tuần tự sẽ là :

            1 0 k d i i k B B

Gọi t là thời gian thực hiện một khối, khi đó thời gian tính tốn của thuật tốn sẽ là Bt. So với thuật toán tuần tự, số khối phải tính tốn tuần tự của thuật tốn song song ln ít hơn. Xét với số chiều bằng 2, thời gian thực hiện của thuật toán song song là 2k1 so với  k2 của thuật toán tuần tự. Như vậy, khi k càng tăng, thời gian xử lý của thuật toán song song sẽ tốt hơn thuật toán tuần tự khá nhiều. Khi số xâu ký tự tăng lên, đồng nghĩa với việc xuất hiện rất nhiều các ô độc lập cho phép tiến hành chạy song song. Khi đó thuật tốn sẽ hiệu quả hơn trong việc tính tốn các phần tử trội, giúp giảm thời gian tính tốn.

Một phần của tài liệu (LUẬN văn THẠC sĩ) một số phương pháp thiết kế thuật toán cơ bản trong tính toán song song và ứng dụng (Trang 43 - 50)

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

(61 trang)