Tải bản đầy đủ (.pdf) (128 trang)

Thuật toán song song cho một số bài toán trên đồ thị

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.66 MB, 128 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

ĐỖ TRUNG KIÊN

THUẬT TOÁN SONG SONG CHO MỘT SỐ BÀI TỐN
TRÊN ĐỒ THỊ

LUẬN VĂN THẠC SĨ
NGÀNH CƠNG NGHỆ THƠNG TIN

Hà Nội, 2006


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

ĐỖ TRUNG KIÊN

THUẬT TOÁN SONG SONG CHO MỘT SỐ BÀI TỐN
TRÊN ĐỒ THỊ

LUẬN VĂN THẠC SĨ
NGÀNH CƠNG NGHỆ THƠNG TIN

Hà Nội, 2006


Chương I : Đại cương về tính tốn song song

Chương 1 : ĐẠI CƯƠNG VỀ TÍNH TỐN SONG SONG


1.1. Một số khái niệm và thuật ngữ
Tính tốn song song hay xử lý song song : là quá trình xử lý thơng tin trong đó nhấn
mạnh việc nhiều đơn vị dữ liệu được xử lý đồng thời bởi một hay nhiều bộ xử lý để
giải quyết một bài tốn.
Siêu máy tính : là những máy tính đa năng thơng thường có tốc độ tính tốn vơ cùng
lớn. Chúng chia làm hai loại
-

Máy tính song song dựa trên bộ vi xử lý : được thiết kế với rất nhiều bộ xử lý
có tốc độ vừa phải.

-

Siêu máy tính truyền thống (supercomputer) : ít bộ xử lý hơn nhưng tốc độ
của mỗi bộ xử lý đó lại cực cao.

Song song về dữ liệu (data parallelism) : Là cơ chế sử dụng nhiều đơn vị xử lý thực
hiện cùng một thao tác trên nhiều đơn vị dữ liệu.
Song song điều khiển (control parallelism) : là cơ chế trong đó nhiều thao tác khác
nhau tác động lên nhiều đơn vị dữ liệu khác nhau một cách đồng thời.
Dây chuyền (pipeline) : là cơ chế chia công việc thành nhiều chặng nối tiếp, mỗi
chặng được thực hiện bởi một bộ phận khác nhau. Đầu ra của bộ phận này là đầu
vào của bộ phận tiếp theo.
Tăng tốc : tăng tốc của thuật toán song song là tỉ số giữa thời gian thực hiện trong
tình huống xấu nhất của thuật toán tuần tự tốt nhất và thời gian thực hiện cũng cơng
việc đó của thuật tốn song song.

Liên quan đến tốc độ, năm 1967 Amdahl đã nêu ra định lý sau đây :

1


ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

Định lý Amdahl : Gọi f là tỷ lệ thao tác tuần tự trên tổng số thao tác phải làm, trong
đó 0 ≤ f ≤ 1 và S là tốc độ tối đa của một máy tính song song với p bộ xử lý khi đó
ta có
S≤

1
(
1
f + − f)

p

Hiệu quả (Efficient) của thuật tốn song song được tính bằng
Tốc độ / số bộ xử lý tham gia tính tốn
Flop : Một đơn vị đo tốc độ của máy tính song song. Flop là viết tắt của floating
point operating per second : số phép tính tốn hạng số thực dấu phẩy động thực hiện
được trong một giây.
Mega

Mflop/s = 10 6 flop/s

Giga

Gflop/s = 10 9


Tera

Tflop/s = 10 12

P

P

P

P

Giá (cost) của một quá trình tính tốn trên hệ thống song song được tính như sau :
Giá = độ phức tạp tính tốn × số lượng bộ xử lý tham gia tính tốn
Trong đó độ phức tạp tính tốn hay thời gian tính chính là số bước thực hiện thao
tác cơ bản (với giả thiết rằng thực hiện một thao tác cơ bản tốn một đơn vị thời
gian)

1.2. Các mức độ song song
Giả sử có 10 cơng việc từng đơi một khác nhau thì ta giao cho 10 máy làm, ta có
mức song song cao nhất, và chúng ta gọi là mức chương trình song song. Mỗi công
việc ta lại chia thành các công đoạn (Task) và có thể thực hiện song song, ta gọi
mức độ song song này là mức song song chương trình con. Mỗi chương trình cũng
như chương trình con lại có hàng loạt câu lệnh, ta có mức độ song song câu lệnh,
trong câu lệnh lại có hành loạt thao tác (operation) => mức độ song song thao tác.

2

ĐỖ TRUNG KIÊN



Chương I : Đại cương về tính tốn song song

1.3. Phân loại các kiến trúc song song
Một trong những phân loại hay được nhắc tới là của Flynn – 1972. Michael Flynn
phân các kiến trúc máy tính thành bốn loại dựa trên tương tác giữa lệnh và dữ liệu :

-

SISD(single instruction stream, single data stream) : Đây chính là kiến trúc
tuần tự Von Neuman, trong đó tại mỗi thời điểm chỉ một lệnh được thực
hiện.

-

MISD (multiple instruction stream, single data stream) : Kiến trúc này cho
phép một vài lệnh cùng thao tác trên một dữ liệu.

-

SIMD (single instruction stream, multiple data stream) : Cho phép một lệnh
được thực hiện đồng thời trên các dữ liệu khác nhau.

3

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song


-

MIMD (multiple instruction stream, multiple data stream) : Cho phép nhiều
lệnh khác nhau có thể đồng thời xử lý nhiều dữ liệu khác nhau trong cùng
một thời điểm.

1.4. Mơ hình SIMD
Mơ hình kiến trúc này cịn được gọi là PRAM (Parallel Random Access Machine –
Máy tính song song truy cập ngẫu nhiên). Trong mơ hình này, N bộ xử lý cùng chia
xẻ bộ nhớ chung. Mơ hình PRAM chia thành 4 lớp nhỏ :
-

EREW (Exclusive Read, Exclusive Write) : Độc quyền đọc, độc quyền ghi.
Không cho phép hai bộ xử lý đọc hoặc ghi đồng thời trên cùng một ô nhớ.

-

CREW (Concurent Read Exclusive Write) : Đọc đồng thời, ghi độc quyền.
Các bộ xử lý có thể đọc đồng thời, nhưng không được phép ghi đồng thời
trên một ô nhớ.

-

ERCW (Exclusive Read Concurent Write) : Ghi đồng thời, đọc độc quyền.
Các bộ xử lý có thể ghi đồng thời, nhưng khơng được phép đọc đồng thời
trên một ô nhớ.

-


CRCW (Concurent Read Concurent Write) : đọc/ghi đồng thời. Các bộ xử lý
có thể đồng thời đọc ghi trên một ô nhớ.

Việc cho phép nhiều bộ xử lý đọc một ô nhớ không khó. Nhưng thiết kế cấu trúc
ghi đồng thời thì phức tạp hơn. Vấn đề là ở chỗ nếu các giá trị ghi vào là khác nhau
thì cuối cùng trong ơ nhớ sẽ lưu giá trị nào ?. Có ba cách giải quyết :
-

ECR (Equallity Conflict Resolution) : Chỉ thực hiện ghi nếu tất cả các bộ xử
lý đều cùng ghi một giá trị như nhau.

-

PCR (priority Conflict Resolution) : Mỗi bộ xử lý có một chỉ số ưu tiên, và
giá trị trên bộ xử lý có số thứ tự ưu tiên cao nhất sẽ được ghi.

-

ACR (arbitrary Conflict Resolution) : Trong cách giải quyết này sức mạnh
của máy tính tăng dần theo thứ tự trên.

Mặc dù yếu nhất, nhưng công nghệ chế tạo phổ biến hiện nay lại là các máy EREW,
cịn các máy CRCW, CREW thì đắt và khó chế tạo. Do đó ta phải nghĩ tới việc
dùng EREW để mơ phỏng các kiến trúc cịn lại như trình bày dưới đây.

4

ĐỖ TRUNG KIÊN



Chương I : Đại cương về tính tốn song song

1.5. Dùng công nghệ EREW mô phỏng các kiến trúc CRCW, CREW
1.5.1. Mơ phỏng đồng thời đọc
Tính năng đọc đồng thời được mô phỏng trên EREW bằng cách sử dụng thao tác
quảng bá giá trị cần đọc cho các bộ xử lý.
Gọi các bộ xử lý là P 0 , P 1 , ..., P n . Thao tác quảng bá giá trị x cho các bộ xử lý được
R

R

R

R

R

R

thực hiện như sau :
-

P 0 đọc x và báo cho P 1

-

P 0 và P 1 báo cho P 2 và P 3

-


P 0 , P 1 , P 2 , P 3 báo cho P 4 , P 5 , P 6 , P 7

-

.......................................................

R

R

R

R

R

R

R

R

R

R

R

R


R

R

R

R

R

R

R

R

R

R

R

R

R

Thao tác này đòi hỏi thời gian thực hiện O(logn).
1.5.2. Mô phỏng ghi đồng thời
Giả sử chúng ta qui định rằng các bộ xử lý chỉ được phép ghi nếu các giá trị cần ghi
trùng nhau. Như vậy thao tác ghi đồng thời được tiến hành trên máy mô phỏng như

sau :
1. Kiểm tra xem n giá trị cần ghi có trùng nhau khơng
2. Nếu trùng nhau thì tiến hành thao tác ghi. Nếu khơng thì dừng
Thao tác 2 chỉ tốn thời gian cỡ hằng số. Thao tác kiểm tra thứ nhất có thể diễn ra
như sau, với a i là giá trị thứ i.
R

For

R

i ← 1 to n/2

If a i = a i+n/2
R

R

R

then

R

R

R

R


R

i ← 1 to n/4

If (a i = a i+n/4
R

Else

b i := True

b i := False

Else
For

do

R

R

R

do
)

then

b i := True

R

R

b i := False
R

R


Sau logn bước, quá trình kiểm tra kết thúc. Như vậy bước kiểm tra địi hỏi thời
gian cỡ logn và đó cũng là giá phải trả cho việc mô phỏng.

5

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

1.6. Họ máy MIMD
Trong mục trên chúng ta đã xem xét họ máy SIMD, hay còn được gọi là PRAM.
Sau đây chúng ta xem xét một kiến trúc song song khác – lớp máy MIMD. Lớp này
phân làm 3 loại :
-

Hệ đa xử lý với bộ nhớ phân tán.

-


Hệ đa xử lý dùng chung bộ nhớ.

-

Hệ đa xử lý với bộ nhớ dùng chung phân tán.

1.6.1. Hệ đa xử lý với bộ nhớ phân tán (Multi processor system with
distributed memory)

-

Đây chính là hệ song song gồm nhiều máy tính kết nối thành mạng
(multicomputer system)

-

Các bộ xử lý chỉ được quyền truy nhập vùng nhớ cục bộ của mình

-

Liên kết giữa các bộ xử lý được thực hiện theo mơ hình chuyển thơng báo
(message passing)

-

Hệ thống có quy mơ lớn, có thể lên tới hàng chục ngàn bộ xử lý. Khi số bộ
xử lý quá lớn có thể làm cho đường truyền mạng trở nên quá tải.

-


Kỹ thuật lập trình khá phức tạp, tương ứng với các mơi trường lập trình
chuyển thơng báo như PVM, MPI

-

Còn được gọi dưới một tên khác là hệ NORMA (no remote memory access
model : mơ hình không cho phép truy cập vùng nhớ ở xa). Ta thấy mỗi bộ xử
lý có một vùng nhớ cục bộ riêng của mình (local memory) và chỉ được quyền

6

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

truy nhập vào đó, và nó là vùng nhớ ở xa (remote memory) đối với các bộ
xử lý khác mà chúng không được quyền truy nhập vào đây.
1.6.2. Hệ đa xử lý dùng chung bộ nhớ (Multi processor system with shared
memory)
-

Đây là máy tính lớn với nhiều bộ xử lý (multi processor) hoạt động theo cơ
chế đa xử lý đối xứng SMP (Symmetric multi processing)

-

Các bộ xử lý có thể truy cập toàn bộ vùng nhớ dùng chung

-


Liên lạc giữa các bộ xử lý được thực hiện thông qua vùng nhớ dùng chung.
Giả sử bộ xử lý P 1 muốn gửi dữ liệu cho P 2 , dữ liệu đó sẽ được ghi vào vùng
R

R

R

R

nhớ dùng chung rồi báo địa chỉ cho P 2 . P 2 sẽ đọc tại địa chỉ đó lấy dữ liệu
R

R

R

R

về.
-

Qui mơ của hệ thống tương đối nhỏ, chỉ cỡ vài trăm bộ xử lý.

-

Kỹ thuật lập trình dễ dàng hơn so với mơ hình trên.

-


Cịn được gọi dưới một tên khác là UMA (uniform memory access model :
quản lý và đánh địa chỉ toàn bộ vùng nhớ dùng chung theo một dạng địa chỉ
thống nhất). Ta sẽ thấy hệ NUMA dưới đây tuy cũng quản lý được tồn bộ
vùng nhớ dùng chung nhưng khơng dùng một mà dùng nhiều dạng địa chỉ.

1.6.3. Hệ đa xử lý với bộ nhớ dùng chung phân tán
(Multi processor system with distributed shared memory)

7

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

-

Về mặt vật lý, mỗi bộ xử lý đều có một vùng nhớ cục bộ của mình.

-

Sự truy nhập tới các vùng nhớ khác được thực hiện nhờ các cơ chế truy nhập
mạng. Nhờ vậy tất cả các vùng nhớ cục bộ đều được gom lại và được đánh
địa chỉ như một vùng nhớ logic duy nhất. Các bộ xử lý đều có thể truy nhập
mọi địa chỉ trong vùng nhớ chung đó.

-

Cịn được gọi dưới một tên khác là hệ NUMA (non uniform memory access

model - quản lý và đánh địa chỉ vùng nhớ dùng chung theo nhiều dạng địa
chỉ). Ta thấy mỗi bộ xử lý, ngoài vùng nhớ cục bộ (local memory) của mình,
cịn có thể truy cập các vùng nhớ ở xa (remote memory : là vùng nhớ cục bộ
của các bộ xử lý khác). Hai vùng nhớ này được quản lý theo hai chế độ địa
chỉ khác nhau.

1.7. Mạng liên kết
Như đã thấy trong những mơ hình trên, các bộ xử lý được liên kết với nhau thông
qua môi trường là mạng liên kết (interconnection network). Ở đây tơi khơng đi sâu
vào phân tích mà chỉ liệt kê một số kiểu mạng liên kết cơ bản :
-

Mạng liên kết đầy đủ : Mỗi cặp bộ xử lý bất kì được kết nối với nhau bởi
một đường truyền. Vùng nhớ chung được chia đều cho các bộ xử lý.

-

Mạng liên kết tuyến tính : Là mơ hình đơn giản nhất, trong đó mỗi bộ xử lý
P i có hai láng giềng là P i-1 và P i+1 , các bộ xử lý đầu và cuối chỉ có một láng
R

R

R

R

R

R


giềng. Một đường truyền lần lượt chạy xuyên suốt qua các bộ xử lý.

8

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

-

Mạng hai chiều : Cịn được gọi là mơ hình lưới trong đó các bộ xử lý P (i,j)
R

R

được bố trị tại các nút của một mạng lưới đường truyền. Đặc trưng quan
trọng của mơ hình này là các đường nối có độ dài khơng đổi.

-

Mạng liên kết hình cây : Các bộ xử lý liên kết với nhau theo một mạng hình
cây nhị phân, tỏa ra từ nút gốc. Mỗi bộ xử lý nối trực tiếp với các bộ xử lý ở
nút mẹ và hai nút con.

-

Mạng liên kết dịch chuyển đầy đủ (perfect shuffle connection) : Gọi n là số
bộ xử lý, bộ xử lý P i được nối với P j trong đó

R

R

R

R

 2i ← 0 ≤ i ≤ n / 2 − 1
j=
2i + 1 − n ← n / 2 ≤ i ≤ n − 1

-

Mạng liên kết khối hộp (cube connection): Mỗi bộ xử lý có d láng giềng với
d là số chiều của liên kết.

1.8. Ngơn ngữ mơ tả thuật tốn song song
Tốn tử gán
Variable = expression
Câu lệnh if
If condition then
S1
R

S2
R

……..
else

S’ 1
P

PR

9

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

S’ 2
P

PR

……..
fi
Vòng lặp For
For

variable = s to e step

h

S1
R

S2

R

……..
od
Câu lệnh While
While

Cond

do

S1
R

S2
R

……..
odpar
Câu lệnh For song song
For

variable = 1 to n dopar
S1
R

S2
R

……..

odpar

1.9. Đánh giá độ phức tạp của thuật toán song song
Trong mục này chúng ta tham khảo các khái niệm liên quan đến độ phức tạp của
thuật toán song song để làm cơ sở cho việc đánh giá và thiết kế các thuật toán song
song hiệu quả. Trong thuật toán tuần tự chúng ta chỉ quan tâm tới độ phức tạp về
thời gian và khơng gian, nhưng trong thuật tốn song song thường có thêm một số
đại lượng đo lường khác. Hơn nữa, độ phức tạp thời gian của thuật toán song song

10

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

khơng chỉ đơn giản là việc đếm số câu lệnh cơ bản như trong thuật tốn tuần tự mà
thay vào đó nó phụ thuộc vào các phép tốn cơ bản này có thể được thực hiện trên P
(P > 1) bộ xử lý như thế nào. Do vậy bên cạnh độ phức tạp thời gian, độ phức tạp về
số bộ xử lý cũng là một đại lượng quan trọng trong phân tích thuật tốn song song.
Thiết kế thuật tốn song song hiệu quả bao gồm việc lựa chọn cấu trúc dữ liệu phù
hợp, phân bố bộ xử lý hợp lý và cuối cùng là thực hiện thuật toán tối ưu. Ba đại
lượng này tác động lẫn nhau như một tổ chức tính tốn.
1.9.1. Song song giới hạn và song song khơng giới hạn
Tương tự như thuật toán tuần tự, độ phức tạp thời gian của thuật toán song song
cũng là một hàm của kích thước dữ liệu đầu vào – n . Độ phức tạp thời gian là đại
lượng quan trọng nhất của thuật tốn song song bởi vì động cơ chính của song song
là nhằm tăng tốc thời gian tính toán.
Độ phức tạp thời gian tồi nhất (hay đơn giản là độ phức tạp thời gian) của thuật
toán song song giải quyết bài tốn P n với kích thước đầu vào n là một hàm f(n) cho

R

R

thời gian lớn nhất từ lúc bắt đầu thực hiện thuật toán trên một hay nhiều bộ xử lý
đến lúc kết thúc thuật toán bởi một hay nhiều bộ xử lý với bất kỳ bộ dữ liệu nào.
Các thuật toán song song được thực hiện trên một tập các bộ xử lý nên nó bao
gồm hai hoạt động khác nhau. Một hoạt động tính toán (như các phép toán số học
hay logic) được thực hiện một cách cục bộ trên một bộ xử lý, hoạt động khác là
truyền dữ liệu giữa các bộ xử lý. Trong thuật toán song song, một bước cơ bản là
một tập các hoạt động cơ bản có thể được thực hiện một cách đồng thời bởi một tập
các bộ xử lý – độ phức tạp thời gian của một bước cơ bản là hằng số hay O(1). Độ
phức tạp thời gian của thuật toán song song được xác định bởi việc đếm số bước cơ
bản và số bước chuyển giao dữ liệu, trong đó thời gian chuyển giao dữ liệu tại mỗi
bước phụ thuộc vào mơ hình liên kết giữa các bộ xử lý. Một số tài liệu còn gọi độ
phức tạp thời gian của thuật toán song song là độ sâu.
Độ phức tạp thời gian của thuật toán song song phụ thuộc vào mơ hình tính tốn
và số lượng bộ xử lý sử dụng. Vì thế, khi đưa ra độ phức tạp thời gian của thuật
toán song song cần thiết đưa ra số lượng lớn nhất bộ xử lý cần sử dụng như một
hàm của kích thước dữ liệu đầu vào n, và gọi là độ phức tạp số bộ xử lý của thuật
tốn. Cũng có thể biểu diễn độ phức tạp thời gian như một hàm của số bộ xử lý

11

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

nhưng thường người ta sử dụng hai hàm riêng biệt. Cho ví dụ, một thuật tốn tuần

tự tìm giá trị lớn nhất trong một tập n phần tử có độ phức tạp là O(n), vì nó địi hỏi n
– 1 phép so sánh. Trong khi thuật toán song song tầm thường giải quyết bài tốn đó
có độ phức tạp thời gian là O(logn) sử dụng O(n) bộ xử lý. Tư tưởng của thuật tốn
là : tìm giá trị lớn nhất trong từng cặp một cách đồng thời, tại mỗi bước số lượng
phần tử còn lại để so sánh giảm đi một nửa. Lặp đi lặp lại thủ tục này sẽ tìm được
giá trị lớn nhất sau logn bước lặp song song. Số lượng bộ xử lý lớn nhất được xác
định bởi bước so sánh đầu tiên - n/2 .
Việc tổng hợp và phân tích một thuật tốn song song dưới mơ hình có P bộ xử lý
( P là một số nguyên cố định và P > 1) được gọi là mơ hình song song có giới hạn.
Ngược lại, mơ hình song song không giới hạn là khi mà chúng ta có và được phép
tùy ý sử dụng một số lượng bộ xử lý khơng giới hạn .
Thuật tốn song song thực hiện trên mơ hình P bộ xử lý được gọi là P-song
song. Nếu thuật toán P-song song giải bài tốn kích thước n địi hỏi t(n) bước song
song thì được gọi là P-có thể tính trong thời gian t. Giả sử thuật tốn song song A
có thể giải quyết bài tốn kích thước n với P bộ xử lý. Nếu tồn tại đa thức F sao cho
∀n , P ≤ F(n) , thì số lượng bộ xử lý được gọi là cận đa thức, ngược lại thì khơng có
cận đa thức.
Thuật tốn song song giới hạn là thích hợp trong thực tế. Tuy nhiên, các thuật
tốn song song khơng giới hạn có một sự quan tâm lớn về mặt lý thuyết, vì từ đó
chúng ta có các cận cho tính tốn song song. Và chúng ta khơng thể thiết kế một
thuật toán song song tốt hơn cận này.
Trên thực tế số lượng bộ xử lý là có giới hạn, nên thuật tốn trên mơ hình song
song khơng giới hạn chỉ có thể sử dụng nếu chúng được chuyển thành thuật tốn Psong song. Có hai phương pháp đưa ra các phép chuyển đổi này : phân tách bài toán
hoặc là phân tách thuật tốn. Ta có thuật tốn song song A giải bài tốn P n kích
R

R

thước đầu vào n trong thời gian t 1 (n) sử dụng p 1 (n) bộ xử lý. Giờ ta đi thiết kế thuật
R


R

R

R

toán mới B giải bài toán P n trong thời gian t 2 (n) sử dụng p 2 (n) bộ xử lý, trong đó
R

R

R

R

R

R

p 2 (n) < p 1 (n). Cách thứ nhất phân tách bài toán thành các bài tốn nhỏ hơn với kích
R

R

R

R

thước m (m < n), mỗi bài toán được giải bởi thuật toán ban đầu với số lượng bộ xử

lý nhỏ hơn – p 2 (m). Cách thứ hai là phân tách một thuật toán, mỗi bước của nó
R

R

12

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

được phân tách thành các bước nhỏ hơn theo một cách nào đó sao cho chúng được
thực hiện với một số lượng bộ xử lý nhỏ hơn. Một số kết quả được đưa ra tại tài liệu
[].
1.9.2. Cận trên và cận dưới
Trong phân tích thuật tốn song song, ta cần xác định các đại lượng như cận trên và
cận dưới của thời gian có thể giải quyết bài tốn bởi một vài thuật toán được lựa
chọn từ lớp các thuật toán đã cho. Thuật toán song song nhanh nhất được biết để
giải quyết bài tốn cho ta cận trên của tính tốn đó. Nếu một ai đó thiết kế ra một
thuật tốn nhanh hơn thuật tốn nhanh nhất trước đó để giải quyết cùng một bài
tốn thì chúng ta nói rằng cận trên mới đã được thiết lập cho việc tính tốn lời giải
của bài tốn đó. Cận dưới xác định độ phức tạp của bài tốn, nghĩa là nó đưa ra
lượng thời gian tối thiểu để giải quyết bài toán sử dụng một thuật toán song song
tùy ý.
Bài toán P n kích thước n được gọi là hữu hạn đối với lớp các thuật toán C, nếu
R

R


tồn tại một thuật toán c ∈ C giải quyết P n trong thời gian lớn nhất T n sao cho T n <
R

R

R

R

R

R

∝ với n < ∝; ngược lại P n được gọi là bài tốn vơ hạn đối với C. Trên thực tế chúng
R

R

ta chỉ xét các bài toán hữu hạn.
Sau đây là một ví dụ minh họa cho việc xác định cận dưới để giải quyết bài tốn
có n đầu vào, một đầu ra, và chỉ bao hàm các phép toán nhị phân. Rõ ràng để giải
quyết bài toán thuật toán tuần tự cần n-1 phép toán nhị phân. Bây giờ ta cần xác
định có bao nhiêu phép tính có thể thực hiện một cách song song. Định nghĩa tập
B(P) của cây nhị phân như sau :
(i)

Cây chỉ có một nút đơn nằm trong B(P) và khi đó độ sâu của cây là 0.

(ii)


Cho một cây độ sâu d trong B(P), nếu chúng ta tăng tất cả các lá lên 1 và
thêm vào cả con trái và con phải nhiều nhất P lá với nhãn là 0 thì thu
được cây mới nằm trong B(P) và có độ sâu (d+1).

(iii)

Tất cả các cây trong B(P) thu được sử dụng (i) và (ii).

13

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

Mỗi cây trong B(P) diễn tả một xử lý tính tốn mà trong đó lá diễn tả tốn hạng
cịn nút trong diễn tả các phép toán nhị phân. Cây độ xâu d trong B(P) tương ứng
với d bước song song với P bộ xử lý. Hình 1.1 chỉ ra một ví dụ cây độ sâu 4 với số
lượng lá lớn nhất nằm trong B(3).
Gọi N(P, d) là số lượng lá lớn nhất của cây độ xâu d trong B(P), và t(P,n) là độ
xâu tối thiểu của mọi cây trong B(P) có n lá. Chúng ta có các cơng thức sau :
N(P,0) = 1
N(P, d+1) = N(P, d) + min(P, N(P, d))
Và N(P, d-1) < n ≤ N(P, d) hàm ý t(P, n) = d
Cũng có thể biểu diễn N(P, d) như sau
N ( P, d ) = 2min( log P , d ) + P × max(0, d − log P ) ,
t ( P, n) = min (log P , log n ) + max(0, (n − 2 log P  ) / P )

Rõ ràng cần ít nhất t(P, n) bước tính tốn để đưa ra kết quả từ n đầu vào sử dụng
P bộ xử lý; vì thế cận dưới của bài tốn là t(P,n). Ví dụ với kích thước bài tốn là n

= 12 và số lượng bộ xử lý là P = 3 thì cận dưới của số lượng bước song song là
t(3,12) = 2 + 3 = 5. Hình 1.2 minh họa các xử lý tính tốn cho cây độ xâu 5 trong
B(3).

14

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

Một cách tương tự Munro và Paterson (1973) đưa ra cận dưới của thời gian tính
tốn nhưng tổng qt hơn.
Định lý 1.1 : Nếu tính tốn một số X có địi hỏi ít nhất x phép tốn, thì bất kì thuật
tốn song song nào sử dụng P bộ xử lý cho việc tính tốn X phải chứa đựng ít nhất
t(P, x+1) bước.
Chứng minh định lý được nêu ra tại tài liệu [].
1.9.3. Chi phí, tăng tốc, và hiệu quả của thuật toán song song
Tăng tốc và hiệu suất : Xét bài toán P, thuật toán tuần tự tốt nhất giải bài tốn P có
thời gian tính là T s , thuật tốn song song trên N bộ xử lý có thời gian tính là T p .
Khi đó :
Tăng tốc = T s /T p
Hiệu suất = T s /(NT p )
Giá trị tăng tốc luôn luôn nhỏ hơn số bộ xử lý và cố gắng đạt tới bằng nên hiệu suất
tốt nhất là 1.
Hiện tại có rất nhiều cách định nghĩa quan hệ giữa thời gian tính tuần tự và song
song. Có 5 định nghĩa khác nhau
- Tăng tốc tương đối
- Tăng tốc thực tế
- Tăng tốc tuyệt đối

- Tăng tốc tiệm cận thực tế
- Tăng tốc tiệm cận tương đối
R

R

R

R

R

R

R

R

R

R

R

15

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song


Tăng tốc tương đối : Thời gian tính tuần tự được xác định như thời gian tính của
thuật tốn song song thực hiện trên một máy. Khi đó tăng tốc tương đối thu được từ
thuật toán A để giải bài toán đầu vào kích thước n sử dụng N bộ xử lý sẽ là

Tăng tốc tương đối(n, p) =
Tăng tốc thực tế : Thời gian nhanh nhất trong công thức tăng tốc được thay bằng
thời gian của thuật toán thường dùng nhất
Tăng tốc thực tế(n, p) =

Tăng tốc tuyệt đối : Thời gian nhanh nhất trong công thức tăng tốc được thay bằng
thời gian tính của thuật tốn tuần tự nhanh nhất trên máy tính tuần tự nhanh nhất
Tăng tốc tuyệt đối(n, p) =

Tăng tốc tiệm cận thực tế :
S(n) : Độ phức tạp tiệm cận của thuật toán tuần tự tốt nhất
P(n) : Độ phức tạp tiệm cận của thuật toán song song A với đủ số bộ xử lý.
Tăng tốc tiệm cận thực tế =
Tăng tốc tiệm cận tương đối : Thay độ phức tạp tiệm cận của thuật toán tuần tự tốt
nhất bằng độ phức tạp tiệm cận của thuật toán song song chạy trên một bộ xử lý.
1.9.4. Các kĩ thuật cho việc nâng cao hiệu quả của thuật tốn song song
Khi thực hiện bất kì thuật tốn song song nào ln ln có sự thỏa hiệp giữa thời
gian tính tốn và số lượng bộ xử lý được sử dụng. Theo định lý 1.1, khi giảm số
lượng bộ xử lý một thừa số thì sẽ nhân độ phức tạp thời gian một thừa số. Vì thế chi
phí và hiệu quả của thuật tốn vẫn khơng thay đổi. Tuy nhiên, trong một vài trường
hợp, ta có thể phân bố lại tính tốn trên các bộ xử lý để nâng cao hiệu quả của thuật
toán. Nâng cao hiệu quả thu được từ việc hoặc giảm số lượng bộ xử lý mà không

16


ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

làm tăng độ phức tạp thời gian hoặc giảm độ phức tạp thời gian mà không tăng số
lượng bộ xử lý. Sau đây là hai kỹ thuật tổng quát nhất
1.9.4.1. Giảm số lượng bộ xử lý
Xem xét bài tốn tính tổng n số ( n = 2 k ). Thuật toán đơn giản dựa trên mơ hình cây
P

P

nhị phân, mất thời gian O(logn) với n/2 ≡ O(n) bộ xử lý. Vì thế hiệu quả của thuật
tốn là n/(n × log n) = 1 / log n.
Giả sử số lượng bộ xử lý là P ≤ n/2. Bây giờ, để tính tốn tổng tại cấp thấp nhất
đòi hỏi thời gian nhiều nhất là n/2P. Cấp tiếp theo đòi hỏi thời gian nhiều nhất là
n/4P, … Vì thế, thời gian địi hỏi để tính tổng T thỏa mãn
T ≤ n / 2 P  + n / 4 P  + ..... + n / 2 log n  P 
= 1 + n / 2 P + 1 + n / 4 P + ........ + 1 + n / 2 log n  P
n
= log n  + 1 / 2 + 1 / 4 + .... + 1 / 2 log n 
P
≤ C × log n + D × (n / P)
= O(log n + (n / P))

[

]


trong đó C và D là các hằng số. Vì thế, trong trường hợp này, thuật toán mất thời
gian O(logn) nếu P = n/logn. Chi phí của thuật tốn này là logn×(n/logn) = n và hiệu
quả là 1. Nghĩa là, chúng ta đã giảm số lượng bộ xử lý mà không tăng độ phức tạp
thời gian nghĩa là có một sự cải tiến trong chi phí và vì thế làm tăng hiệu quả của
thuật toán.
1.9.4.2. Giảm độ phức tạp thời gian
Xét lại bài tốn tính tổng của dãy gồm n số. Chia dãy ban đầu ra thành các dãy con
nhỏ hơn với kích thước m và giao mỗi danh sách như thế cho một bộ xử lý tính
tốn. Ta thu được n/m giá trị sau thời gian O(m). Sau đó sử dụng mơ hình cây nhị
phân để tính tổng của n/m số này mất thời gian O(logn/m). Vì thế, độ phức tạp thời
gian của tồn bộ thuật tốn là T = O(m + log(n/m)). Với m = log(n/m), nghĩa là n =
m × 2 m thì T = O(log2 m ) với 2 m bộ xử lý. Do đó chi phí của thuật tốn là 2 m × log2 m
P

P

P

P

P

P

P

P

P


P

= 2 m × m = n và hiệu quả là 1. Trong trường hợp này chúng ta đã giảm độ phức tạp
P

P

thời gian mà không tăng số bộ xử lý.
1.9.5. Độ phức tạp của bài tốn
Dưới đây là mơ hình phân lớp độ phức tạp của bài toán

17

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

Từ trước tới nay xử lý song song được sử dụng chính cho việc tăng tốc thời gian
thực hiện của bài toán P.
Năm 1979, Niclaus Pippenger gợi ý rằng các bài tốn P có thể song song một
cách hiệu quả gồm các bài tốn có thể giải quyết trong một chu kỳ thời gian là log
của kích thước bài tốn, nghĩa là T(p) = O(logk n) với hằng số k, sử dụng một số
P

P

lượng đa thức bộ xử lý p = O(nl). Lớp bài tốn này sau đó được đặt tên là lớp NC
(Nick’s Class - NC). Lớp NC đã được nghiên cứu một cách rộng rãi và hình thành
lý thuyết độ phức tạp song song.

Một hình thức yếu của lớp NC được chỉ ra như sau :
Bất kỳ thứ gì có thể tính được trên máy Turing sử dụng khơng gian cận đa thức
trong thời gian khơng giới hạn có thể tính được trên một máy song song trong
thời gian đa thức sử dụng số lượng không giới hạn số bộ xử lý và ngược lại.
Bài toán với lý thuyết này khơng giới hạn tài ngun tính tốn hơn là thời gian. Ý
nghĩa của NC, và tính phổ biến của nó, xuất phát từ việc thiết lập một cách đồng
thời cận thời gian và nguồn tài nguyên.
Hiện nay, câu hỏi NC = P là một bài toán mở của lý thuyết độ phức tạp song
song. Giống như câu hỏi P = NP vẫn chưa có ai biết câu trả lời tới câu hỏi này,
nhưng có một sự nghi ngờ lớn là NC ≠ P. Lý do đằng sau sự nghi ngờ này cũng
tương tự như P ≠ NP. Một bài toán P-đầy đủ là một bài toán sao cho bất kỳ bài tốn
P nào khác có thể qui dẫn về nó trong thời gian đa thức sử dụng một số lượng đa

18

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

thức bộ xử lý. Vì thế, nếu thuật tốn thời gian đa thức với số bộ xử lý đa thức tìm
thấy cho bất kỳ bài tốn P-đầy đủ nào, thì tất cả các bài tốn trong P có thể song
song một cách hiệu quả và NC = P. Một số bài toán này đã được nghiên cứu trong
vài năm gần đây.

1.10. Một số mẫu thiết kế thuật toán song song
1.10.1. Mẫu cây nhị phân
Xét bài tốn tính tổng của N số (n 1 , n 2 , ……., n N ), trong đó N là lũy thừa của 2. Giả
R


R

R

R

R

R

sử dữ liệu nằm trên các lá của cây nhị phân có thể được thực hiện tính tốn theo
cách sau. N/2 phần tử xử lý (Processing Elements - PE) được giao nhiệm vụ tính
tốn tổng các cặp dữ liệu, ví dụ (n 1 , n 2 ), (n 3 , n 4 ), …, (n N-1 , n N ). Kết quả này có thể
R

R

R

R

R

R

R

R

R


R

R

R

được thực hiện trong một bước tính tốn. Tiếp theo, N/4 phần tử xử lý thực hiện
cùng công việc trên N/4 cặp dữ liệu, và v..v. Rõ ràng các tính tốn tiến hành từ lá
tới gốc và tồn bộ q trình tính tốn sẽ kết thúc khi mà phần tử xử lý tại gốc thực
hiện xong tính tốn của nó.

Thuật tốn Sum
Đầu vào : mảng A(1..n), n = 2 i
P

Đầu ra : tổng lưu tại A(1)
Begin
1. p = n/2
2. While p > 0 do
a. For

i=1

to p

dopar

19


ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

i. A(i) = A(2i-1) + A(2i)
b. EndPar
c. p = p/2
3. EndWhile
End.

Phân tích độ phức tạp
P : số bộ xử lý.
Vịng While thực hiện logn lần, mỗi lần thời gian tính là O(1) và đòi hỏi p bộ xử
lý; Tại bước đầu tiên của thuật tốn địi hỏi nhiều bộ xử lý nhất p = n/2.
Do trong thuật tốn khơng có địi hỏi cạnh tranh đọc cũng như cạnh tranh ghi
nên thuật tốn có thể cài đặt với thời gian O(logn) với O(n) bộ xử lý trên mơ
hình EREW PRAM.
1.10.2. Phát triển bởi nhân đơi
Phương pháp phát triển bởi nhân đơi có thể được nhìn theo một cách khác. Tại mỗi
bước, mỗi phần tử xử lý nhân đơi số phần tử tính tốn. Vì thế “phát triển” thu được
bởi nhân đơi số lượng dữ liệu tại mỗi bước. Tất nhiên, có các cách khác nhau sử
dụng kĩ thuật này, thậm chí đối với các bài tốn khơng kết hợp với cấu trúc cây nhị
phân. Sau đây là một vài ví dụ.
Xét bài toán xếp hạng danh sách (list-ranking) : Cho một danh sách liên kết có N
phần tử được lưu trong mảng A[1:N], hãy tính tốn hạng của mỗi phần tử. Hạng của
mỗi phần tử trong danh sách là khoảng cách từ nó tới cuối danh sách. Vì thế phần tử
đầu tiên có hạng là N và phần tử cuối cùng có hạng là 1. Để giải bài toán này ta sử
dụng kĩ thuật nhân đôi, chúng ta phân một bộ xử lý tới mỗi phần tử. Ban đầu mỗi bộ
xử lý chỉ biết hàng xóm bên phía phải của nó trong danh sách. Tại bước đầu tiên,

mỗi bộ xử lý tìm kiếm hàng xóm của hàng xóm của nó. Nghĩa là, sau bước đầu tiên
mỗi bộ xử lý biết được phần tử có khoảng cách tới nó là 2. Gọi Next(i) là phần tử xa
nhất nằm phía phải phần tử thứ i …Khởi tạo, next(i) là hàng xóm bên phải của i
ngoại trừ phần tử cuối cùng trong danh sách thì hàng xóm bên phải của nó là Nil.
Tại mỗi bước p i cập nhật next(i) tới next(next(i)) cho đến khi đạt tới cuối danh sách.
R

R

Nếu tại bước k mỗi bộ xử lý biết phần tử cách nó là x thì trong bước tiếp theo mỗi

20

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

bộ xử lý biết phần tử cách nó 2x. Vì thế xử lý nhân đôi đảm bảo rằng mỗi bộ xử lý
sẽ đạt tới cuối danh sách trong nhiều nhất là logN bước và sẽ biết hạng của nó.
Thuật tốn xếp hạng trong danh sách
Input : A(1:n), link(1:n), head
Output : Rank(1:n)
Begin
1. For

i = 1 to n dopar
Rank(i) = 1
Next(i) = link(i)


EndPar
k = 1 to logn

2. For
2.a For

i=1

to n

do
dopar

if NEXT[i] <> 0
Rank(i) = Rank(i) + Rank(NEXT(i))
NEXT(i) = NEXT(NEXT(i))
endif
EndPar
End

Phân tích độ phức tạp
B1:

O(n) bộ xử lý với thời gian O(1)

B2:

Lặp lại O(n) lần,
2.a O(n) bộ xử lý với thời gian O(1)


=> Thuật toán có độ phức tạp thời gian là O(logn) sử dụng O(n) bộ xử lý trên mơ
hình EREW PRAM.
Một ví dụ khác là bài tốn tìm đường đi trên cây từ gốc tới mọi nút trong cây tổng
quát biểu diễn bởi quan hệ cha-con, nghĩa là mỗi nút ta biết cha của nó và kí hiệu là
parent(i). Với nút gốc r thì parent(r) = r. Với quan hệ cha-con này thì kết thúc bước
đầu tiên ta biết được cha (tổ tiên thứ nhất ) và cha của cha (tổ tiên thứ hai) của mọi
nút. Kết thúc bước thứ hai ta biết tổ tiên thứ nhất, thứ hai, thứ ba và thứ tư của mọi

21

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

nút. Rõ ràng nếu chiều cao của cây là h thì chỉ cần logh bước là ta thu được đường
đi trên cây từ gốc tới mọi nút. Chương sau sẽ minh họa chi tiết kĩ thuật này.
Cuối cùng ta xem xét các bài tốn lý thuyết đồ thị ví dụ như tìm cây khung độ
sâu tối thiểu, …hay đường đi ngắn nhất giữa mọi cặp nút. Các bài toán như thế có
thể được giải quyết bởi kỹ thuật nhân đơi cây khung cục bộ. Chúng ta bắt đầu với
các cây có gốc là một nút của đồ thị và chiều cao là 1. Nghĩa là, với mỗi nút x trong
đồ thị G tương ứng với một cây có gốc là x và chứa đựng tất cả các nút y sao cho (x,
y) là một cạnh trong đồ thị. Rõ ràng danh sách kề của mỗi nút diễn tả một cây như
thế. Bây giờ với mỗi cây chúng ta thực hiện trộn tất cả các cây mà gốc của nó là
một trong những nút nằm trong cây đang xét và sau đó xóa các nút xuất hiện nhiều
lần trên cây (nếu có). Nếu lặp đi lặp lại thủ tục trộn cây thì sau nhiều nhất logn
bước chúng ta sẽ có lời giải mong muốn của bài toán (n là số lượng nút trong G).
Hình sau minh họa cách xác định cây khung có chiều xâu tối thiểu cho đồ thị
digraph


Chúng ta bắt đầu với các cây có gốc tại một nút trong G và có chiều cao là 1 (hình
b). Sau khi trộn các cây theo cách diễn tả ở trên mà chưa xóa đi các nút xuất hiện
lặp chúng ta thu được cây có nhiều cao là 2 hoặc ít hơn trong hình c. Bây giờ nếu
các nút giống nhau xuất hiện nhiều hơn một lần trên cây thì chúng ta xóa tất cả các
nút trừ nút có khoảng cách tới gốc là tối thiểu (điều này để chắc chắn cây xây dựng

22

ĐỖ TRUNG KIÊN


Chương I : Đại cương về tính tốn song song

đảm bảo thuộc tính độ sâu tối thiểu). Các cây phải được xóa đi trong hình c được
đánh dấu là X. Vì đồ thị G có 6 nút nên cần 3 bước trộn cây như thế. Và cuối cùng
ta thu được cây khung tối thiểu có gốc 1 tại hình d.
1.10.3. Chia để trị
Ta chia bài toán thành các bài toán con nhỏ hơn, giải quyết bài toán con cho đến khi
bài tốn con nhỏ nhất có thể giải được.
Ví dụ : Xét bài tốn tính tổng n số lưu trong mảng A[1:n]. Ở trên ta đã thiết kế thuật
toán song song có độ phức tạp thời gian O(logn) với O(n) bộ xử lý. Sau đây ta sẽ sử
dụng kỹ thuật chia để trị để giảm số lượng bộ xử lý mà không làm thay đổi độ phức
tạp thời gian của thuật tốn.
Tiến hành phân chia dữ liệu ta sẽ có thuật toán với độ phức tạp thời gian O(logn)
với O(n/logn) bộ xử lý.
+ Phân các phần tử của mảng vào n/logn nhóm; mỗi nhóm chứa logn phần tử
k = logn và r = n/logn ; rk = n = 2 k
P

Nhóm 1 : A 1 A 2 ……..A logn

R

R

R

R

R

Nhóm 2 : A logn + 1 ……A 2logn
R

R

R

R

r = n/logn nhóm

……………………………
+ Phân mỗi nhóm cho một trong n/logn bộ xử lý.
+ Thời gian cộng trên mỗi bộ xử lý là O(logn) và lưu kết quả cất vào B i . Sau
R

R

đó sử dụng thuật tốn trong mục 1 để tính tổng của B 1 , B 2 , …., B n/logn với
R


R

R

R

R

R

thời gian O(log(n/logn)) ≡ O(logn) sử dụng O(n/logn) bộ xử lý.
Thuật tốn tính tổng tối ưu
Đầu vào : mảng A[1:n]
Đầu ra : tổng -> Sum
Begin
1. For

i=1

to n/logn

dopar

i. Sử dụng thuật tốn tuần tự để tính tổng A (i-1)logn+1 …..A ilogn và cất
R

R

R


R

vào biến B i
R

2. EndPar

23

ĐỖ TRUNG KIÊN


×