Thực hiện cải tiến

Một phần của tài liệu (LUẬN văn THẠC sĩ) thiết kế và phân tích giải thuật duy trì dữ liệu chung phân tán luận văn ths công nghệ thông tin 1 01 10 (Trang 45 - 58)

CHƢƠNG 4 GIẢI THUẬT AS CẢI TIẾN

4.2. Thực hiện cải tiến

Ý tƣởng của cải tiến thật đơn giản. Khi vào chế độ tách, Q sinh ra hai tiến trình con xong, thay bằng việc nó vẫn tiếp tục tồn tại và đi sau hai tiến trình con, Q sẽ tự kết thúc tại đây. Khi hai tiến trình con của Q đã đến đích và kết thúc, Q sẽ đƣợc “tái sinh” nếu nhiệm vụ của Q chƣa hoàn thành, tức chƣa gặp mQ-cột hoặc Q là tiến trình chính. Nhiệm vụ tái sinh Q đƣợc thực hiện bởi tiến trình con trên của nó. Khi tiến trình con

trên của Q, <yQ , mQ/2, ., ., .>, đến đích tại mQ/2-cột, nếu đây cũng là mQ-cột, nó hiểu

Q cũng cần kết thúc nên không làm tái sinh Q (nếu Q không phải là tiến trình chính); ngƣợc lại nó hiểu Q cần đƣợc tái sinh để tiếp tục thực hiện nhiệm vụ, nó gửi thông báo chuyển tiến trình <yQ , mQ, 0, ., .> đến bộ xử lý tiếp sau trƣớc khi kết thúc, tức Q đƣợc tái sinh. Q xuất hiện trở lại trong giải thuật cải tiến này sẽ hoàn toàn tƣơng đƣơng với

Q trong giải thuật AS gốc vào thời điểm hai tiến trình con của nó kết thúc và bắt đầu ở chế độ mở mới.

Vấn đề cần xử lý ở đây là làm thế nào để một tiến trình biết nó là tiến trình con trên (của một tiến trình khác)? Trong các thông báo chuyển tiến trình, dạng <y, h, e, b, c>,

b không cần sử dụng nữa vì tất cả tiến trình đều ở chế độ mở (thay vì chuyển sang chế độ tách để đi theo tiến trình con, Q tự kết thúc, sau đó đƣợc tái sinh). Phƣơng pháp dễ nhận thấy là sử dụng b cho mục đích phân biệt tiến trình con trên (b = 1 nếu tiến trình là tiến trình con trên (của một tiến trình khác), b = 0 nếu ngƣợc lại). Tuy nhiên, cách xử lý này gặp phải vấn đề đệ quy không thể giải quyết đƣợc là khi khôi phục tiến trình cha, làm thế nào để tiến trình con biết cha của nó cũng là tiến trình con trên (của một tiến trình khác), rồi làm thế nào tiến trình cha nhận biết tiến trình ông cũng là một tiến trình con trên (của một tiến trình khác).

Rất may mắn, cả hai vấn đề vừa xem xét đều có thể đƣợc giải quyết một cách gọn nhẹ và hiệu quả. Một tiến trình sẽ đƣợc nhận biết là tiến trình con trên (của một tiến trình khác) nếu thƣơng của độ cao cộng 1 với chiều cao của tiến trình, (y+1)/h, là một lũy thừa của 2.

Hơn nữa, c cũng không cần thiết nữa vì ta có thể xem tiến trình chính là một tiến trình con trên với chiều cao m-1 và độ cao là m (các tiến trình con thực sự có chiều cao nhỏ hơn m). Tiến trình con trên của tiến trình chính là tiến trình duy nhất có chiều cao

m-1 và độ cao là m/2, bởi vậy, mỗi khi tiến trình này kết thúc, nó biết cần phải tái sinh tiến trình chính nếu đang còn bộ xử lý ở sau. Các tiến trình khác hiểu nó không phải là tiến trình con trên của tiến trình chính.

Nhƣ vậy, một thông báo chuyển tiến trình có thể rút gọn về dạng <y, h, e> - giảm đƣợc 2 bít. Thời gian để một tiến trình chuyển từ một bộ xử lý sang bộ xử lý kế cận

Việc tái sinh một tiến trình từ tiến trình con trên của nó đƣợc thực hiện nhƣ sau. Tiến trình bất kỳ Q, <yQ, mQ, eQ>, trƣớc khi kết thúc nhiệm vụ của nó tại mQ-cột không phải là bộ xử lý cuối cùng, tự xét nó có phải là tiến trình con trên (của một tiến trình khác) hay không bằng cách xét giá trị (yQ+1)/mQ có là một lũy thừa của 2 hay không? Nếu đúng nhƣ vậy, nó sẽ kiểm tra nếu cha của nó có là tiến trình chính hay không (yQ = m-1mQ = m/2) hoặc mQ-cột này không là 2*mQ-cột, Q sẽ gửi thông báo chuyển tiến trình <yQ, 2*mQ, 0> sang bộ xử lý tiếp theo trƣớc khi kết thúc. Thông báo <yQ, 2*mQ, 0> chính là tiến trình cha đƣợc tái sinh. Đó là do tiến trình con trên và tiến trình cha đều có cùng giá trị cao độ yQ , chiều cao của tiến trình cha bằng 2 chiều cao của tiến trình con, 2*mQ, với mQ là chiều cao của tiến trình con, và e=0 để chứng tỏ cha của Q đã đƣợc tái sinh.

Giải thuật AS cải tiến đƣợc thể hiện trong Hình 4.1. Trong giải thuật này, bộ xử lý nguồn đơn giản chỉ sinh ra tiến trình chính bằng cách gọi thủ tục Process(m-1, m, 0); các bộ xử lý khác nếu nhận đƣợc thông báo sửa lỗi, Error(j), thì thực hiện sửa lỗi, và khi nhận đƣợc thông báo chuyển tiến trình, MoveForward(y, h, e), thì tiếp nhận tiến trình bằng cách gọi Process(y, h, e).

Hoạt động của một tiến trình trên một bộ xử lý đƣợc thực hiện theo thủ tục

Process(y, h, e). Sau khi thực hiện hiện nhiệm vụ quét và sửa lỗi các bít dữ liệu trên phân đoạn thuộc bộ xử lý tiếp theo, nếu không đang ở h/2-cột, tiến trình sẽ chuyển sang bộ xử lý tiếp theo. Ngƣợc lại, nếu đang ở h-cột, nếu tiến trình là tiến trình chính, nó sẽ bắt đầu quét m-chữ nhật tiếp theo; nếu tiến trình là tiến trình con trên, nó làm tái sinh tiến trình cha trƣớc khi kết thúc; ngƣợc lại tiến trình kết thúc mà không làm thêm gì nữa. Nếu đang ở h/2-cột không phải là h-cột, tùy thuộc vào giá trị của e, tiến trình thực hiện tách hay đơn giản đặt e về 0 để tiếp tục quét vùng còn lại của h-chữ nhật.

---

Bộ xử lý nguồn:

Process(m-1, m, 0) // Phát sinh tiến trình chính

Các bộ xử lý khác:

Khi nhận đƣợc thông báo Error(j) từ bộ xử lý liền trƣớc Sửa bít có chỉ mục j trong dữ liệu của mình Khi nhận đƣợc thông báo MoveForward(y, h, e)

Nếu không phải là bộ xử lý cuối cùng, Process(y, h, e)

ProcedureProcess(y, h, e)

Với mỗi bít dữ liệu bj, y-h ≤ j ≤ y-1, thuộc bộ xử lý liền sau Nếu bj là bít lỗi

Gửi thông báo Error(j) đến bộ xử lý liền sau e := e + 1

Nếu bộ xử lý là một h-cột

Nếu là tiến trình chính (y = m-1 và h = m)

Bắt đầu quét m-chữ nhật tiếp theo bằng cách gửi thông báo

MoveForward(m-1, m, 0) đến bộ xử lý liền sau.

Ngƣợc lại, nếu là tiến trình con trên ((y+1)/h là một lũy thừa của 2) Tái sinh tiến trình cha bằng cách gửi thông báo MoveForward(y, 2*h, 0) đến bộ xử lý liền sau.

Ngƣợc lại, nếu bộ xử lý là một h/2-cột

Nếu e > h/2, thực hiện tách bằng cách gửi liên tiếp hai thông báo

MoveForward(y-h/2+1, h/2, 0) và MoveForward(y, h/2, 0) đến bộ xử lý

liền sau.

Ngƣợc lại, bắt đầu quét h-chữ nhật tiếp theo bằng cách gửi thông báo

MoveForward(y, h, 0) đến bộ xử lý liền sau.

Ngƣợc lại, chuyển đến bộ xử lý liền sau và tiếp tục thực hiện nhiệm vụ bằng cách gửi thông báo MoveForward(y, h, e) đến bộ xử lý liền sau.

4.3. Tính đúng đắn và độ phức tạp

Cũng nhƣ giải thuật AS gốc, dễ nhận ra tính đúng của giải thuật AS cải tiến vì trong thực hiện của giải thuật AS cải tiến, mỗi bít dữ liệu lỗi (thuộc bộ xử lý bất kỳ) có duy nhất một tiến trình quét nó. Nhƣ vậy, nếu giải thiết giải thuật thực hiện trên mỗi bộ xử lý đơn lẻ là đúng đắn thì mỗi bít lỗi đƣợc sửa (đảo) đúng một lần và trở thành bít đúng. Và cũng giống nhƣ giải thuật AS gốc, các tiến trình cũng sẽ dừng nếu gặp các mốc tƣơng ứng.

Với cải tiến do tôi đƣa ra, không những số thông báo chuyển tiến trình đƣợc giảm bớt mà kích thƣớc những thông báo chuyển tiến trình còn lại cũng đƣợc giảm bớt. Do vậy, cả độ phức tạp thời gian và truyền thông đều đƣợc giảm theo.

Trƣớc hết, để đƣa ra những khẳng định về các độ phức tạp, tôi có Bổ đề 4 nhƣ sau về giải thuật AS.

Bổ đề 4. Trong mọi thực hiện của giải thuật AS, tại mọi bộ xử lý Pi, số tiến trình hoạt động trên nó là một số lẻ pi = 2ki+1, ki 0, trong đó ki tiến trình ở chế độ tách, ki+1 tiến trình ở chế độ mở.

Chứng minh. Theo thực hiện của giải thuật AS, tiến trình cha di chuyển theo sau các tiến trình con, do vậy nếu p là tiến trình hoạt động trên Pi thì tất cả các tiến trình tổ tiên của nó cũng sẽ hoạt động trên Pi. Bởi vậy, nếu quan niệm mỗi tiến trình là một nút, quan hệ cha-con giữa hai tiến trình là một liên kết, ta có các tiến trình hoạt động trên một bộ xử lý và quan hệ cha-con giữa chúng tạo thành một cây nhị phân Ti (vì mỗi tiến trình cha sinh ra hai tiến trình con) có gốc là tiến trình chính.

Mặt khác, cũng theo thực hiện của giải thuật AS, nếu p không phải là tiến trình chính hoạt động trên Pi thì tiến trình song sinh với nó q cũng hoạt động trên Pi vì hai tiến trình song sinh có cùng quãng đƣờng đi (cùng đƣợc sinh ra tại một bộ xử lý và cùng kết thúc tại một bộ xử lý khác). Nhƣ vậy, Ti là một cây nhị phân đầy đủ, do vậy có pi = 2ki + 1 nút, ki 0, trong đó có ki nút trong và ki+1 lá. Lƣu ý, mỗi nút trong là một tiến trình cha nên ở chế độ tách, mỗi lá là một tiến trình chƣa sinh con nên ở chế độ mở.

Khẳng định 4.1. So với giải thuật AS, giải thuật AS cải tiến giảm được nhiều nhất (2n + (3∆/2) log m + 5∆/2) bít truyền thông trong mỗi thực hiện.

Chứng minh. Theo [3], trong giải thuật AS số thông báo chuyển tiến trình nhiều nhất là n + ∆. Do trong thực hiện của giải thuật AS, tiến trình chính di chuyển hết chuỗi nên có n thông báo chuyển tiến trình chính. Mỗi tiến trình khác tiến trình chính, có chiều cao m’ < m, sử dụng nhiều nhất m’ thông báo chuyển tiến trình, và đƣợc tạo ra nhƣ một tiến trình con trên hoặc con dƣới của một tiến trình (giả sử Q) có chiều cao

2m’, sau khi Q đã gặp 2m’ bít lỗi. Do vậy số thông báo chuyển tiến trình khác tiến trình chính nhiều nhất bằng số bít lỗi, tức là bằng .

Để ý rằng, mỗi tiến trình có mặt trên Pi (i > 0) là do một thông báo chuyển tiến trình từ Pi-1 gửi sang (trên P0 có duy nhất một tiến trình đó là tiến trình chính hoạt động ở chế độ mở, tự có mặt trên P0). Bổ đề 4 cho thấy có 2ki+1, ki 0, thông báo chuyển tiến trình đƣợc gửi đến Pi, trong đó có ki thông báo là di chuyển của một tiến trình cha khi đang ở chế độ tách theo các con của nó. Ta có tổng số thông báo chuyển tiến trình trong mỗi thực hiện đƣợc tính nhƣ sau:

n-1 n-1 n-1

 (2ki+1) = 2  ki + n, suy ra  ki = ∆/2 trong trƣờng hợp xấu nhất. i=0 i=0 i=0

Hay nói cách khác tổng số thông báo là di chuyển của một tiến trình cha khi đang ở chế độ tách theo các con của nó trong thực hiện nhiều nhất sẽ là ∆/2. Trong giải thuật cải tiến, các tiến trình cha không di chuyển theo các con của nó, do vậy số thông báo chuyển tiến trình nhiều nhất sẽ chỉ còn là n + ∆/2.

Theo phân tích ở mục 4.1 kết hợp với việc đã giảm kích thƣớc mỗi thông báo đi 2 bít, ta có trong giải thuật AS cải tiến, mỗi thông báo chuyển tiến trình sẽ có kích thƣớc còn là 1 + 3log m bít.

Thông báo sửa lỗi không thay đổi vẫn có kích thƣớc là (1 + log m) bít, trong đó bít đầu tiên bằng 1 để phân biệt thông báo sửa lỗi với thông báo chuyển tiến trình, log m

Tổng hợp lại có kết quả tổng số bít truyền thông trong giải thuật AS cải tiến là

(n + ∆/2)(1 + 3log m) + ∆ (1+log m). So với giải thuật AS gốc (n + ∆)(3 + 3log m) +

∆(1+log m), chúng ta đã có (2n + (3∆/2) log m + 5∆/2) bít truyền thông đƣợc cắt giảm trong giải thuật AS cải tiến. Khẳng định 4.1 đã đƣợc chứng minh.

Khẳng định 4.2. So với giải thuật AS, thời gian hoàn thành của giải thuật AS cải tiến giảm ít nhất (5 + 3 log m) đơn vị nếu ∆ > m, hoặc ∆ = m và dữ liệu của bộ xử lý cuối cùng không có lỗi; hoặc giảm 2 đơn vị nếu ngược lại.

Chứng minh. Trong mọi trƣờng hợp, các thông báo chuyển tiến trình đƣợc sử dụng trong giải thuật cải tiến có kích thƣớc nhỏ hơn 2 bít so với kích thƣớc của các thông báo chuyển tiến trình đƣợc sử dụng trong giải thuật AS gốc. Với kỹ thuật dẫn ống, 2 bít dữ liệu cắt giảm này làm giảm 2 đơn vị thời gian.

Trƣờng hợp > m, hoặc = m và dữ liệu của bộ xử lý cuối cùng không có lỗi. Theo giải thuật ta có biến đếm lỗi e sẽ đƣợc công thêm 1 sau mỗi lần sửa đƣợc 1 lỗi, nhƣng không đƣợc lớn hơn m, nếu e = m tiến trình chính sẽ thực hiện phân tách. Với giải thiết > m, hoặc = m và dữ liệu của bộ xử lý cuối cùng không có lỗi chúng ta chúng ta có thể rút ra đƣợc kết luận là tiến chính sẽ phải thực hiện phân tách ít nhất là một lần. Giả sử tiến trình chính thực hiện phân tách tại bộ xử lý Pi, tại bộ xử lý Pi+m/2 tiến trình chính trở lại chế độ mở. Trong giải thuật AS, sau khi tiến trình con trên của tiến trình chính kết thúc trên Pi+m/2, phải mất 3+3log m đơn vị thời gian nữa để tiến trình chính có mặt trên Pi+m/2. Là do theo 4.1, kích thƣớc của thông báo chuyển tiến trình của tiến trình chính thực hiện phân tách tại Pi là 3+3log m bít và chúng ta coi mỗi một bít dữ liệu sẽ mất 1 đơn vị thời gian để chuyển giao giữa các bộ xử lý.

Trong giải thuật cải tiến, ngay khi tiến trình con trên của tiến trình chính kết thúc, tiến trình chính đƣợc tái sinh trên Pi+m/2. Nhƣ vậy, trong trƣờng hợp này 5+3log m đơn vị thời gian đƣợc tiết kiệm.

Nếu tiến trình chính không thực hiện phân tách lần nào, chúng ta sẽ chỉ kết luận đƣợc giải thuật AS cải tiến tiết kiệm đƣợc 2 đơn vị thời gian thôi. Còn với trƣờng hợp tiến trình chính thực hiện phân tách nhiều hơn một lần, chúng ta cũng sẽ chỉ có thể

khẳng định đƣợc thời gian thực hiện AS cải tiến tiết kiệm hơn AS ít nhất là 5+3log m

đơn vị thời gian. Khẳng định 4.2 đã đƣợc chứng minh.

Cuối cùng, tổng kết các kết quả thu đƣợc ta có bảng so sánh thể hiện độ phức tạp thời gian và thông báo của các giải thuật đã xem xét và giải thuật đề xuất cải tiến.

Bảng 4. Độ phức tạp thời gian và thông báo của các giải thuật

Giải thuật Độ phức tạp thời gian Độ phức tạp thông báo

Phát tỏa Đầy đủ n + m nm

Cập nhật Tăng trưởng [ACK90]

(n + ∆) log m (n + ∆) log m

AS [AS97] (n + min{∆, m}) log3

m (3n+4∆) log m + 3n + 4∆

AS cải tiến (n + min{∆, m}) log3

m - (5 + 3 log m)

(3n +5∆/2) log m + n + 3∆/2

4.4. Ví dụ một thực hiện

Một thực hiện của giải thuật AS cải tiến đƣợc minh họa trong Hình 4. Trong hình này, mỗi tiến trình <y, h, e> chạy trên một bộ xử lý P hoặc đang di chuyển sang P

Một phần của tài liệu (LUẬN văn THẠC sĩ) thiết kế và phân tích giải thuật duy trì dữ liệu chung phân tán luận văn ths công nghệ thông tin 1 01 10 (Trang 45 - 58)