Tải bản đầy đủ

Xử lý song song áp dụng đối với một số bài toán trong lý thuyết đồ thị

i

LỜI CẢM ƠN

Trong quá trình học tập và nghiên cứu tại lớp Cao học khóa 9 chuyên ngành
Khoa học máy tính tại Trường Đại học Công nghệ thông tin và Truyền thông - Đại
học Thái Nguyên, Tôi đã nhận được rất nhiều sự giúp đỡ nhiệt tình của các thầy, cô
giáo trong Trường Đại học Công nghệ thông tin và Truyền thông; Viện công nghệ
thông tin thuộc Viện khoa học và Công nghệ Việt Nam. Các thầy, cô luôn giúp đỡ,
tạo điều kiện cho tôi trong quá trình học tập. Tôi xin bày tỏ lời cảm ơn chân thành
tới tập thể các thầy, cô giáo trong Trường Đại học Công nghệ thông tin và Truyền
thông; Viện công nghệ thông tin thuộc Viện khoa học và Công nghệ Việt Nam.
Đặc biệt Tôi xin gửi lời cảm ơn sâu sắc tới thầy giáo TS Vũ Vinh Quang đã định
hướng và tận tình hướng dẫn tôi hoàn thành nội dung bản luận văn này.
Tôi xin cảm ơn các bạn đồng nghiệp và người thân đã động viên, giúp đỡ tôi
trong quá trình nghiên cứu và thực hiện luận văn.
Trong một khoảng thời gian ngắn, với kiến thức của bản thân còn hạn chế nên
luận văn không tránh khỏi những thiếu sót về mặt khoa học, tôi rất mong nhận được
những đóng góp ý kiến của các Thầy cô giáo cùng bạn bè để bản luận văn được
hoàn chỉnh hơn.
Xin trân trọng cảm ơn!

Thái Nguyên, ngày

tháng

Học viên

Võ Quang Huy

năm 2013


ii

MỤC LỤC
Võ Quang Huy........................................i
1.3.2 Các cách tiếp cận trong thiết kế .....................................................10
1.5. Phân tích và đánh giá thuật toán song song .....................................12
1.7.2. Lập trình song song với PVM.......................................................21
Hình 2.1. Sơ đồ mạng máy tính với đa kênh thông báo..........................26
3.1. Một số thuật toán sắp xếp song song................................................47
3.1.1 Thuật toán sắp xếp đánh số............................................................47
Thuật toán trên có thể cải tiến khi sử dụng để xác định vị trí tức là việc
so sánh với các phần tử khác trong dãy cũng được thực hiện song song.
Trong trường hợp này, độ phức tạp thuật toán sẽ là . .............................49
3.1.2 Thuật toán sắp xếp so sánh và đổi chỗ ..........................................49
Bảng 3.1 Sắp xếp theo nguyên tắc hình ống sử dụng 8 bộ xử lý ...........50
3.1.3 Thuật toán sắp xếp MergeSort........................................................51


iii

DANH MỤC CÁC HÌNH VẼ
Võ Quang Huy........................................i
1.3.2 Các cách tiếp cận trong thiết kế .....................................................10
1.5. Phân tích và đánh giá thuật toán song song .....................................12
1.7.2. Lập trình song song với PVM.......................................................21
Hình 2.1. Sơ đồ mạng máy tính với đa kênh thông báo..........................26
3.1. Một số thuật toán sắp xếp song song................................................47
3.1.1 Thuật toán sắp xếp đánh số............................................................47
Thuật toán trên có thể cải tiến khi sử dụng để xác định vị trí tức là việc

so sánh với các phần tử khác trong dãy cũng được thực hiện song song.
Trong trường hợp này, độ phức tạp thuật toán sẽ là . .............................49
3.1.2 Thuật toán sắp xếp so sánh và đổi chỗ ..........................................49
Bảng 3.1 Sắp xếp theo nguyên tắc hình ống sử dụng 8 bộ xử lý ...........50
3.1.3 Thuật toán sắp xếp MergeSort........................................................51


1

LỜI NÓI ĐẦU
Trong thực tế, có rất nhiều lĩnh vực như xử lý đồ họa, trí tuệ nhận tạo, lý
thuyết đồ thị, lý thuyết nhận dạng, dự báo thời tiết... đều dẫn đến các bài toán xử lý
một khối lượng dữ liệu rất lớn dẫn tới yêu cầu cần phải có những hệ thống máy tính
thật mạnh mới thực hiện được những yêu cầu của thực tế. Hầu hết những bài toán
này, những máy tính xử lý tuần tự kiểu von Neumann là không đáp ứng yêu cầu.
Trong thời gian gần đây, vấn đề nghiên cứu xử lý song song là một hướng nghiên
cứu đang được quan tâm trong lĩnh vực toán học và Công nghệ thông tin. Một trong
những bài toán nổi bật là các bài toán tối ưu trên mô hình lý thuyết đồ thị.
Với mục đích nghiên cứu vấn đề thiết kế các thuật toán song song dựa trên các
thuật toán tuần tự, luận văn đặt vấn đề nghiên cứu về lý thuyết xử lý song song và
ứng dụng trên một số bài toán trong mô hình đồ thị.
Cấu trúc của luận văn gồm phần mở đầu và 3 chương nội dung như sau
Phần mở đầu giới thiệu về hướng nghiên cứu và các mục đích nghiên cứu
Chương 1: luận văn trình bày các khái niệm về vấn đề xử lý song song, mô
hình máy tính song song, thuật toán song song cùng một số ngôn ngữ song song.
Đây là các khái niệm quan trọng làm cơ sở cho các vấn đề được đưa ra trong các
chương tiếp sau.
Chương 2: luận văn đưa ra các khái niệm cơ bản về lý thuyết đồ thị, mô hình
các bài toán tối ưu và mô tả các thuật toán tuần tự kinh điển giải các bài toán tương
ứng, đánh giá độ phức tạp của các thuật toán tuần tự.
Chương 3: Trên cơ sở các thuật toán đã trình bày trong chương 2 kết hợp với
lý thuyết xử lý song song, luận văn đưa ra một số hướng thiết kế các thuật toán song
song giải các bài toán tối ưu trên mô hình đồ thị, đánh giá độ phức tạp của các thuật
toán tương ứng.
Kèm theo luận văn là các phần mềm thử nghiệm các thuật toán tuần tự được
viết bằng ngôn ngữ C++.


2

Chương 1
MỘT SỐ KIẾN THỨC CƠ BẢN VỀ XỬ LÝ SONG SONG
1.1 Khái niệm cơ bản về xử lý song song
Trong những thập niên 60, nền tảng để thiết kế máy tính đều dựa trên mô hình
của John Von Neumann (Xem ), với một đơn vị xử lý được nối với một vùng lưu trữ
làm bộ nhớ và tại một thời điểm chỉ có một lệnh được thực thi.

Hình 1.1. Mô tả kiến trúc Von Neumann
Với những bài toán yêu cầu về khả năng tính toán và lưu trữ lớn thì mô hình
kiến trúc này còn hạn chế. Để tăng cường sức mạnh tính toán giải quyết các bài toán
lớn có độ tính toán cao, người ta đưa ra kiến trúc mới, với ý tưởng kết hợp nhiều bộ
xử lý vào trong một máy tính, mà hay gọi là xử lý song song (Multiprocessor) hoặc
kết hợp sức mạnh tính toán của nhiều máy tính dựa trên kết nối mạng (gọi là máy
tính song song - multicomputer).
Trong thời đại thông tin bùng nổ, con người càng ngày càng trở nên bận rộn
thì nhu cầu của xử lý song song ngày càng được nâng cao nhằm xử lý được một
lượng dữ liệu lớn nhất trong thời gian nhanh nhất có thể. Xử lý song song ngày
càng được quan tâm trên thế giới vì 2 lý do chính sau đây:
- Đạt được hiệu năng cao hơn trong khi tiết kiệm được thời gian và tiền bạc.
Về lý thuyết, càng đầu tư nhiều tài nguyên cho một nhiệm vụ nào đó thì càng rút
ngắn được thời gian thực hiện nhiệm vụ đó, đồng thời tiết kiệm được càng nhiều chi


3

phí. Hơn nữa, nhiều hệ thống xử lý song song có thể được xây dựng từ những thành
phần rẻ tiền và phổ biến.
- Khả năng xử lý các bài toán lớn. Nhiều bài toán trong thực tế đòi hỏi tài
nguyên tính toán lớn đến mức không một máy tính đơn lẻ nào có thể đáp ứng nổi.
Nhiều lĩnh vực mới như đồ họa máy tính, trí tuệ nhận tạo, phân tích số, v.v. đòi hỏi
phải xử lý một khối lượng dữ liệu rất lớn do đó cần phải có những hệ thống máy
tính thật mạnh mới thực hiện được những yêu cầu của thực tế. Những vấn đề về xử
lý ngôn ngữ tự nhiên, nhận dạng, xử lý ảnh ba chiều (3-D), dự báo thời tiết, mô hình
và mô phỏng những hệ thống lớn, v.v. đều đòi hỏi phải xử lý dữ liệu với tốc độc rất
cao, với khối lượng dữ liệu rất lớn. Hầu hết những bài toán này, những máy tính xử
lý tuần tự kiểu von Neumann là không đáp ứng yêu cầu.
Mặc dù tốc độ xử lý của các BXL tăng nhiều trong những năm qua, nhưng do
giới hạn về vật lý nên khả năng tính toán của chúng không thể tăng mãi được. Điều
này dẫn tới là muốn tăng được khả năng tính toán của các hệ thống máy tính thì
đích cuối cùng là phải khai thác được khả năng xử lý song song của chúng.
Xét về mặt công nghệ, việc xây dựng, quản trị và ứng dụng một hệ thống xử lý
song song cũng không phải dễ dàng. Thông thường, chi phí phải trả cho việc quản
trị một hệ thống xử lý song song trong 1 năm còn cao hơn nhiều so với chi phí bỏ ra
để mua cả hệ thống. Ví dụ, một cluster có tốc độ tính toán 1 TeraFlops có chi phí
vào khoảng 100 nghìn USD, gần bằng chi phí phải trả cho một người quản trị hệ
thống trong một năm.
Nghiên cứu về xử lý song song vì vậy không chỉ mang ý nghĩa khoa học, mà
còn có ý nghĩa thực tiễn rất lớn. Việc nghiên cứu về xử lý song song, từ lý thuyết
cho đến ứng dụng, không chỉ giúp chúng ta nắm được nền tảng công nghệ, mà còn
giúp chúng ta nhìn thấy tiềm năng to lớn của xử lý song song trong công nghệ nói
riêng và các lĩnh vực kinh tế quốc dân nói chung.


4

Định nghĩa: Xử lý song song là quá trình xử lý gồm nhiều tiến trình được
kích hoạt đồng thời và cùng tham gia giải quyết một vấn đề, nói chung là thực hiện
trên những hệ thống đa bộ xử lý.
Sự khác nhau giữa song song với tuần tự:
+ Trong tính toán tuần tự với một BXL thì mỗi thời điểm chỉ thực hiện được
một phép toán.
+ Trong tính toán song song thì một số BXL cùng kết hợp với nhau để giải
quyết cùng một vấn đề cho nên giảm được thời gian xử lý vì mỗi thời điểm có thể
có nhiều phép toán được thực hiện đồng thời.
Ba yếu tố chính dẫn đến việc xử lý song song:
1. Hiện nay giá thành của phần cứng (CPU) giảm mạnh, tạo điều kiện để xây
dựng những hệ thống có nhiều BXL với giá thành hợp lý.
2. Sự phát triển của công nghệ mạch tích hợp VLSI cho phép tạo ra những
hệ phức hợp có hàng triệu transistor trên một chip.
3. Tốc độ xử lý của các BXL theo kiểu von Neumann đã dần tiến tới giới hạn,
không thể cải tiến thêm được do vậy dẫn tới đòi hỏi phải thực hiện xử lý
song song.
Vấn đề xử lý song song liên quan trực tiếp đến kiến trúc máy tính, phần mềm
hệ thống (hệ điều hành), thuật toán và ngôn ngữ lập trình, v.v.
Các máy tính song song có thể phân thành nhiều loại dựa vào các đặc trưng
của các kiến trúc và thể thực thao tác khác nhau. Cụ thể là có thể dựa vào các chỉ
tiêu về kiểu và số lượng các BXL, sự kết nối giữa chúng, dựa vào sơ đồ truyền
thông và các thao tác vào/ra, v.v.
Phần lớn các hệ điều hành ngày nay đều đã hỗ trợ đa xử lý / đa nhiệm và cho
phép nghiên cứu, khai thác các phương pháp lập trình song song. Vấn đề là chúng ta
phải có nhiều BXL (các đơn vị tính toán độc lập) cùng hoạt động. Nhưng điều quan
trọng là chúng phải tham gia "cùng giải một bài toán". Nói cách khác, những tiến


5

trình thực hiện trên mỗi BXL phải kết hợp, trao đổi với nhau để giải quyết một bài
toán cho trước.
1.2 Các mô hình máy tính song song
Định nghĩa: Một máy tính song song là tuyển tập các BXL, thường là cùng
một loại, kết nối với nhau theo một cách nào đó để có thể hợp tác với nhau trong
hoạt động và trao đổi dữ liệu được với nhau.
Dựa vào các đặc tính về số lượng BXL, số chương trình thực hiện, cấu trúc bộ
nhớ, v.v., Michael Flynn (1966) đã đưa ra cách phân loại nổi tiếng được nhiều
người chấp nhận.
1. Mô hình SISD (Single Instruction, Single Data Stream - Đơn dòng lệnh,
đơn dòng dữ liệu). Đây thực chất chính là kiến trúc Von Neumann.
2. SIMD (Single Instruction, Multiple Data Stream - Đơn dòng lệnh, đa dòng
dữ liệu). Kiến trúc này bao gồm các bộ xử lý kiểu vectơ cũng như các bộ xử lý song
song cực lớn (MPP).
3. Mô hình MISD (Multiple Instruction, Single Data Stream - Đa dòng lệnh,
đơn dòng dữ liệu).
4. Mô hình MIMD (Multiple Instruction, Multiple Data Stream - Đa dòng
lệnh, đa dòng dữ liệu). Kiến trúc này bao gồm các hệ đa vi xử lý truyền thống cũng
như các mạng máy trạm.
Sau đây chúng ta nghiên cứu chi tiết các mô hình trên:
1.2.1. Mô hình SISD: Đơn luồng lệnh, đơn luồng dữ liệu
Máy tính loại SISD chỉ có một CPU, ở mỗi thời điểm thực hiện một chỉ lệnh và chỉ
đọc, ghi một mục dữ liệu. Tất cả các máy tính SISD chỉ có một thanh ghi register được
gọi là bộ đếm chương trình (program counter) được sử dụng để nạp địa chỉ của lệnh tiếp
theo khi xử lý tuần tự và kết quả là thực hiện theo một thứ tự xác định của các câu lệnh.
Hình 1.2 mô tả hoạt động của máy tính theo mô hình SISD.


6

Tín hiệu
điều khiển

Đơn vị
điều khiển

BXL số học
Luồng
kết quả

Luồng lệnh

Luồng
dữ liệu

h

Hình 1.2. Mô hình của kiến trúc SISD
Mô hình SISD còn được gọi là SPSD, đơn chương trình và đơn luồng dữ liệu.
Đây chính là mô hình máy tính truyền thống kiểu von Neumann.
1.2.2. Mô hình SIMD: Đơn luồng lệnh, đa luồng dữ liệu
Máy tính loại SIMD có một đơn vị điều khiển để điều khiển nhiều đơn vị xử
lý (nhiều hơn một đơn vị) thực hiện theo một luồng các câu lệnh. CPU phát sinh tín
hiệu điều khiển tới tất cả các phần tử xử lý, những BXL này cùng thực hiện một
phép toán trên các mục dữ liệu khác nhau, nghĩa là mỗi BXL có luồng dữ liệu riêng.
Đây là kiểu tính toán lặp lại các đơn vị số học trong CPU, cho phép những đơn vị
khác nhau thực hiện trên những toán hạng khác nhau, nhưng thực hiện cùng một
lệnh. Máy tính SIMD có thể hỗ trợ xử lý kiểu vector, trong đó có thể gán các phần
tử của vector cho các phần tử xử lý để tính toán đồng thời. Máy tính vector và các
BXL mảng là mô hình chủ yếu thuộc loại này. Hình 1-3 mô tả hoạt động của máy
tính theo mô hình SIMD, còn được gọi là SPMD.

Đơn vị điều khiển (CU)

Tín hiệu
điều khiển

Tín hiệu
điều khiển
Phần tử
xử lý 1

Phần tử
xử lý 2

...

Phần tử
xử lý n

Hình 1.3. Mô hình của kiến trúc SIMD
Mô hình SIMD còn được gọi là SPMD, đơn chương trình và đa luồng dữ liệu.
Đây chính là mô hình máy tính phổ biến có trên thị trường như: ILLIAC IV, DAP
và Connection Machine CM-2.


7

1.2.3. Mô hình MISD: Đa luồng lệnh, đơn luồng dữ liệu
Máy tính loại MISD là ngược lại với SIMD. Máy tính MISD có thể thực hiện
nhiều chương trình (nhiều lệnh) trên cùng một mục dữ liệu, nên còn được gọi là
MPSD (đa chương trình, đơn luồng dữ liệu). Kiến trúc kiểu này có thể chia thành
hai nhóm:

 Lớp các máy tính yêu cầu những đơn vị xử lý (PU) khác nhau có thể nhận
được những chỉ lệnh khác nhau để thực hiện trên cùng một mục dữ liệu. Đây là kiến
trúc khó và hiện nay chưa có loại máy tính nào được sản xuất theo loại này.

 Lớp các máy tính có các luồng dữ liệu được chuyển tuần tự theo dãy các
CPU liên tiếp. Đây là loại kiến trúc hình ống thực hiện xử lý theo vector thông qua
một dãy các bước, trong đó mỗi bước thực hiện một chức năng và sau đó chuyển
kết quả cho PU thực hiện bước tiếp theo. Hoạt động của máy tính theo kiến trúc loại
này giống như hệ tuần hoàn nên còn được gọi là hệ tâm thu.

CU 1

Luồng lệnh
1

Phần tử xử
lý 1

CU 2

Luồng lệnh
2

Phần tử
xử lý 2

.
.
.
CU n

.
.
.
Luồng lệnh

n

Luồng
dữ liệu

Phần tử
xử lý n

Hình 1.4. Mô hình của kiến trúc MISD
1.2.4. Mô hình MIMD: Đa luồng lệnh, đa luồng dữ liệu
Máy tính loại MIMD còn gọi là đa BXL, trong đó mỗi BXL có thể thực hiện
những luồng lệnh (chương trình) khác nhau trên các luồng dữ liệu riêng. Hầu hết
các hệ thống MIMD đều có bộ nhớ riêng và cũng có thể truy cập vào được bộ nhớ
chung (global) khi cần, do vậy giảm thiểu được sự trao đổi giữa các BXL trong hệ


8

thống. Đây là kiến trúc phức tạp nhất, nhưng nó là mô hình hỗ trợ xử lý song song
cao nhất và đã có nhiều máy tính được sản xuất theo kiến trúc này, ví dụ: BBN
Butterfly, Alliant FX, iSPC của Intel, v.v.
Mô hình của kiến trúc MIMD được mô tả như hình 1.5.

CU 1
CU 2

Luồng lệnh 1

Luồng lệnh 2

.
.
.
CU n

Luồng lệnh n

Phần tử
xử lý 1
Phần tử
xử lý 2
.
.
.
Phần tử
xử lý n

Luồng dữ
liệu 1
Luồng dữ
liệu 2

Luồng dữ
liệu n

Hình 1.5. Mô hình của kiến trúc MIMD
Theo sự phân loại của Flynn thì có hai họ kiến trúc quan trọng cho các máy
tính song song đó là SIMD và MIMD. Những kiến trúc khác có thể xếp theo hai
mẫu đó. Mẫu hình các kiến trúc xử lý song song có thể phân chia như hình 1.6.

MIMD

Multiprocessor
Multicomputer
Data Flow Machine

SIMD

Array Processor
Pipelined Vector Processor

MISD

Pipelined Vector Processor
Systolic Array

Hybrid

SIMD-MIMD
MIMD-SIMD

Hình 1.6. Các mẫu hình kiến trúc xử lý song song


9

Những kiến trúc khác nhau có thể tạo ra những khả năng khác nhau cho việc
xử lý song song. Ngay trong kiến trúc tuần tự chúng ta cũng có thể tận dụng đốc độ
cực nhanh của các BXL để thực hiện xử lý song song theo nguyên lý chia sẻ thời
gian và chia sẻ tài nguyên. Tất nhiên đối với những kiến trúc máy tính song song thì
mục đích chính là khai thác triệt để khả năng của kiến trúc song song để viết các
chương trình song song.
1.3 Khái niệm về thuật toán song song
Một trong các mục đích chính của xử lý song song là nghiên cứu và xây dựng
những thuật toán thích hợp để cài đặt trên các máy tính song song, nghĩa là phát
triển các thuật toán song song. Câu hỏi tự nhiên là việc thiết kế một thuật toán song
song như thế nào được gọi là thích hợp cho xử lý song song? Đối với thuật toán
tuần tự thì chúng ta có thể thống nhất cách đánh giá dựa vào thời gian thực hiện
thuật toán, không gian bộ nhớ và khả năng lập trình, v.v. việc đánh giá thuật toán
song song thì phức tạp hơn nhiều, ngoài những tiêu chuẩn trên còn phải bổ sung
thêm những tham số về số BXL, khả năng của các bộ nhớ cục bộ, sơ đồ truyền
thông, và các giao thức đồng bộ hoá, v.v.
Để cài đặt các thuật toán song song trên các máy tính song song chúng ta phải
sử dụng những ngôn ngữ lập trình song song. Nhiều ngôn ngữ lập trình song song
đang được sử dụng như: Fortran 90, nCUBE C, Occam, C-Linda, PVM với C/C++,
CDC 6600, v.v.
1.3.1 Định nghĩa
Thuật toán song song là một tập các tiến trình hoặc các tác vụ có thể thực hiện
đồng thời và có thể trao đổi dữ liệu với nhau để kết hợp cùng giải một bài toán đặt
ra. Thuật toán song song có thể xem như là một tập hợp các đơn thể độc lập, một số
trong số chúng có thể thực hiện tương tranh trên máy tính song song.
Để thiết kế được các thuật toán song song cần phải trả lời các câu hỏi sau:
 Việc phân chia dữ liệu cho các tác vụ như thế nào?
 Dữ liệu được truy cập như thế nào, những dữ liệu nào cần phải chia sẻ?
 Phân các tác vụ cho các tiến trình (bộ xử lý) như thế nào?


10

 Các tiến trình được đồng bộ ra sao?
Các nguyên lý chính trong thiết kế thuật toán song song:
1. Các nguyên lý lập lịch: Sử dụng các thuật toán lập lịch cho các bộ xử lý để
giảm tối thiểu thời gian tính toán.
2. Nguyên lý hình ống: Nguyên lý này được áp dụng khi bài toán xuất hiện
một dãy các thao tác { T 1,T 2,...,T n } , trong đó T i + 1 thực hiện sau khi T i kết thúc.
3. Nguyên lý chia để trị: Chia bài toán thành những phần nhỏ hơn tương đối
độc lập với nhau và giải quyết chúng một cách song song.
1.3.2 Các cách tiếp cận trong thiết kế
Có ba cách tiếp cận để thiết kế thuật toán song song:
1. Thực hiện song song hoá những thuật toán tuần tự, biến đổi những cấu trúc
tuần tự để tận dụng được những khả năng song song tự nhiên của tất cả các thành
phần trong hệ thống xử lý.
2. Thiết kế những thuật toán song song mới phù hợp với kiến trúc song song.
3. Xây dựng những thuật toán song song từ những thuật toán song song đã
được xây dựng cho phù hợp với cấu hình tôpô và môi trường song song thực tế.
Như vậy, cách làm thông dụng là biến đổi các thuật toán tuần tự về song song,
hay chuyển từ một dạng song song về dạng song song phù hợp hơn sao vẫn bảo
toàn được tính tương đương trong tính toán. Do đó, khi biến đổi chúng ta cần trả lời
hai câu hỏi:
1. Kiến trúc nào phù hợp cho bài toán?
2. Những bài toán loại nào sẽ xử lý hiệu quả trong kiến trúc song song cho trước?
1.4 Đánh giá các chương trình song song
Sau đây chúng ta đưa ra cơ sở của phương pháp đánh giá độ phức tạp của
thuật toán song song.
Thời gian thực hiện song song
Để đánh giá được độ phức tạp tính toán của các thuật toán song song, ngoài số
bước tính toán chúng ta còn cần đánh giá thời gian truyền thông của các tiến trình.


11

Trong một hệ thống truyền thông, thời gian truyền thông cũng phải được xem trong
thời gian thực hiện của thuật toán.
Thời gian thực hiện song song, ký hiệu là tp gồm hai phần t comp và t comm

t p = tcomp + t com m
Trong đó, t comp là thời gian tính toán và t comm - thời gian truyền thông dữ liệu.
Thời gian tính toán t comp được xác định giống như thuật toán tuần tự. Khi có
nhiều tiến trình tiến trình thực hiện đồng thời thì tính thời gian thực hiện của tiến
trình phức tạp nhất (thực hiện lâu nhất). Trong phân tích độ phức tạp tính toán,
chúng ta luôn giả thiết rằng, tất cả các bộ xử lý là giống nhau và thao tác cùng một
tốc độ như nhau. Đối với những cụm máy tính không thuần nhất thì điều này không
đảm bảo do vậy, việc đánh giá thời gian tính toán của những hệ như thế là rất phức tạp.
Thời gian truyền thông t comm lại phụ thuộc vào kích cỡ của các thông điệp, vào
cấu hình kết nối mạng đường truyền và cả cách thức truyền tải thông điệp, v.v.
Công thức ước lượng thời gian truyền thông được xác định như sau:

t comm = t startup + n * tdat a
Trong đó
+ t startup là thời gian cần thiết để gửi những thông điệp không phải là dữ liệu.
Nó bao gồm cả thời gian để đóng gói thông điệp ở nơi gửi và thời gian mở gói ở nơi
nhận. Để đơn giản chúng ta giả thiết thời gian này là hằng số.
+ t dat a là thời gian cần thiết để chuyển một từ dữ liệu (một mục dữ liệu) từ nơi
gửi tới nơi nhận, được giả thiết là hằng số và n là số từ dữ liệu được trao đổi trong
hệ thống.
Ví dụ: Giả sử cần thực hiện cộng n số trên hai máy tính, trong đó mỗi máy
cộng

n
số với nhau và tất cả các số đó được lưu ở máy tính thứ nhất. Kết quả của
2


12

máy tính thứ hai khi được tính xong sẽ được chuyển về máy tính thứ nhất để nó
cộng hai kết quả bộ phận với nhau. Bài toán này được phát biểu như sau:
1. Máy tính thứ nhất gửi

n
số cho máy tính thứ hai
2

2. Cả hai máy tính cộng

n
số một cách đồng thời
2

3. Máy tính thứ hai chuyển kết quả tính được về máy tính thứ nhất
4. Máy tính thứ nhất cộng hai kết quả để có kết quả cuối cùng.
Thời gian tính toán (ở bước 2 và 4):

t comp = n + 1
2
Thời gian truyền thông (ở bước 1 và 3):
t comm = (t startup +

n
* t ) + (t starup + tdat a )
2 dat a

= 2 * t startup + (

n
+ 1) * t dat a
2

Độ phức tạp tính toán là O (n ) và độ phức tạp truyền thông cũng là O (n ) ,
do vậy độ phức tạp nói chung của thuật toán trên cũng là O (n ) .
1.5. Phân tích và đánh giá thuật toán song song
Đánh giá thuật toán tuần tự có thể căn cứ chủ yếu vào thời gian thực hiện được
tính theo hàm của kích cỡ dữ liệu vào (input). Hàm này được gọi là độ phức tạp tính
toán thời gian f(n) của thuật toán và được ký hiệu là O ( f (n )) . Một cách hình thức
O (g(x )) được định nghĩa như sau:

Định nghĩa: Một thuật toán có độ phức tạp tính toán f (x ) = O (g(x )) Û f (x ) =
= O (g(x )) ⇔ Tồn tại số C dương và số nguyên x0 sao cho 0 ≤ f (x ) ≤ C * g(x), với
mọi số lượng dữ liệu vào x ≥ x0.
Hiển nhiên g(x ) , f (x ) là hai hàm có giá trị dương. O(1) ký hiệu cho một hằng
số bất kỳ.


13

Độ phức tạp tính toán của thuật toán song song không chỉ phụ thuộc vào kích
cỡ của dữ liệu đầu vào mà còn phụ thuộc vào kiến trúc máy tính song song và số
lượng các bộ xử lý được phép sử dụng trong hệ thống.
Độ phức tạp thời gian là thước đo quan trọng nhất đánh giá mức độ hiệu quả
của thuật toán song song. Chúng ta giả thiết rằng mô hình tính toán có p bộ xử lý.
Nghĩa là mức độ song song là có giới hạn. Ngược lại, mức độ song song không bị
giới hạn khi số các bộ xử lý là không bị chặn.
Độ phức tạp thời gian của thuật toán song song sử dụng p bộ xử lý để giải một
bài toán có kích cỡ n là hàm f(n,p) xác định thời gian cực đại trôi qua giữa thời điểm
bắt đầu thực hiện thuật toán bởi một bộ xử lý và thời điểm kết thúc của các bộ xử lý
đối với bộ dữ liệu vào bất kỳ. Có hai loại thao tác khác nhau trong các thuật toán
song song:
1. Các phép toán cơ sở như +, -, *, /, AND, OR, v.v.
2. Các phép toán truyền dữ liệu trên các kênh truyền.
Độ phức tạp thời gian của thuật toán song song được xác định bởi số các phép
toán cơ sở và số các bước truyền tải dữ liệu giữa các bộ xử lý với nhau. Từ đó suy
ra, độ phức tạp thời gian của thuật toán song song không chỉ phụ thuộc vào mô hình
tính toán mà còn phụ thuộc vào số bộ xử lý được sử dụng.
Nói chung, chương trình tính toán song song thường bắt đầu bằng việc nhập
dữ liệu vào bộ nhớ và kích hoạt một phần tử xử lý. Mỗi bước tính toán, phần tử xử
lý này có thể đọc một số dữ liệu từ bộ nhớ, thực hiện một số phép toán cơ sở và ghi
kết quả vào bộ nhớ riêng hoặc bộ nhớ chung. Đồng thời mỗi bước tính toán, một
phần tử xử lý có thể kích hoạt một hay một số phần tử xử lý khác. Thực tế thì các
máy tính đều có số bộ xử lý là hữu hạn, nên những thuật toán song song không bị
giới hạn chỉ có nghĩa sử dụng khi chúng có thể chuyển đổi về thuật toán song song
bị giới hạn.
Có ba cách định nghĩa khái niệm liên quan đến độ phức tạp của thuật toán
song song:


14

Định nghĩa 1: Một thuật toán song song có độ phức tạp tính toán O (T ) với P
bộ xử lý khi nó thực hiện nhiều nhất là O (T * P ) phép toán cơ sở (định lý Brent).
Định nghĩa 2: Một thuật toán song song có độ phức tạp tính toán O (T ) sử
dụng rất nhiều bộ xử lý để thực hiện O (e ) phép toán cơ sở khi cài đặt với P bộ xử lý
éù


+ T ).
thì sẽ có độ phức tạp thời gian là O ( ê
êú
êp ú

Định nghĩa 3: Một thuật toán song song có độ phức tạp tính toán O (T ) với P
éù

pú 1 £ p £ p
bộ xử lý có thể cài đặt với ê
bộ xử lý thì sẽ có độ phức tạp thời gian là
ê ú,
êp ú

O(p *T ) .

Định nghĩa 2 chỉ ra rằng khi số bộ xử lý được sử dụng giảm xuống trong một
phạm vi nhất định thì thuật toán tiếp tục làm việc nhưng thời gian thực hiện sẽ tăng lên.
Định nghĩa 3 khẳng định rằng có cách để cài đặt thuật toán song song khi số
các bộ xử lý được sử dụng bị giảm xuống.
Mức độ hiệu quả của thuật toán được thể hiện ở mức độ song song của thuật toán.
Mức độ song song của thuật toán là số lượng cực đại các phép toán độc lập có
thể thực hiện đồng thời ở mỗi thời điểm thực hiện của thuật toán.
Ký hiệu P(W) là độ song song của thuật toán, thì thuật toán hiệu quả giải để
giải bài toán có cỡ W là những thuật toán chỉ cần sử dụng nhiều nhất P(W) bộ xử lý.
Ngoài ra, để đánh giá được thuật toán song song chúng ta còn phải xét tới hệ
số gia tốc của nó.
Hệ số gia tốc của thuật toán song song sử dụng p bộ xử lý được xác định như sau:
S p = TS / T p

Trong đó
+ T s là thời gian thực hiện tính toán trên một bộ xử lý.
+ T p là thời gian thực hiện tính toán trên p bộ xử lý.
Với giả thiết là bộ xử lý tuần tự và bộ xử lý song song là như nhau.


15

1.6. Khái niệm chương trình dịch, hệ điều hành
Đối với các hệ thống song song thì một thành phần rất quan trọng là chương
trình dịch song song. Chương trình dịch làm giảm được thời gian thực hiện chương
trình (song song) bằng cách chia nhỏ bài toán thành các khối công việc và những
khối này được xử lý đồng thời bởi nhiều đơn vị xử lý. Một số chương trình chỉ làm
nhiệm vụ phát hiện những khối công việc thực hiện được song song và thực hiện phân
chia các đơn vị chức năng, một số khác tinh tế hơn, có thể lập lịch cho cả bài toán. Có
ba cách tiếp cận để xây dựng chương trình dịch cho các máy tính song song:
1. Run Time Partitioning and Run Time Scheduling. Cách tiếp cận này khá
phù hợp với một số ứng dụng thực tế. Tuy nhiên, nó có hạn chế là việc lập
lịch và phân hoạch được thực hiện lúc chạy chương trình sẽ làm giảm hiệu
xuất của hệ thống.
2. Compile Time Partitioning and Run Time Scheduling. Đây là mô hình
chung để xây dựng chương trình dịch cho những đa bộ xử lý. Lập lịch phân
việc được thực hiện lúc chương trình chạy, nhưng việc phân hoạch công
việc thành các khối được thực hiện bởi người lập trình và chương trình
dịch. Theo cách tiếp cận này, sự đồng bộ hóa các tiến trình và truyền thông
phải được xác định rõ trong hệ thống.
3. Compile Time Partitioning and Compile Time Scheduling. Phân hoạch
công việc và lập lịch được thực hiện ở giai đoạn dịch chương trình. Do vậy,
chương trình dịch loại này đòi hỏi phải rất hoàn hảo. Nhưng điều này khá
khó, bởi vì rất khó đánh giá được thời gian thực hiện chương trình, đặc biệt
là vấn đề lập lịch trước sẽ không thể thực hiện tối ưu được.
Nói chung, cho đến hiện nay khá nhiều chương trình dịch cho các máy tính
song song được xây dựng là cho ngôn ngữ lập trình Fortran.
Ví dụ chương trình dịch Paraphrase (do Kuck viết năm 1984) cho máy tính
Cedar Multiprocessor được phát triển ở Đại học Illinois, sử dụng đồ thị độc lập dữ


16

liệu để biến đổi chương trình Fortran từ dạng tuần tự sang dạng thích hợp để thực
hiện song song. Chương trình dịch này thực hiện theo hai giai đoạn:
1. Giai đoạn 1: thực hiện biến đổi độc lập với máy tính, chuyển chương
trình sang dạng trung gian thể hiện được dạng song song của mã
chương trình.
2. Giai đoạn 2: thực hiện ánh xạ để chuyển từ dạng trung gian sang kiến
trúc song song của máy tính.
Chương trình dịch Paraphrase được sử dụng khá thành công trên máy tính
máy tính các bộ xử lý vector như Cray X/MP, khai thác tốt các khả năng song song
của chương trình Fortran.
Một ví dụ khác là chương trình dịch song song Fortran D (Fox xây dựng năm
1991, Hiranandani cải tiến 1992, 1993). Fortran D mở rộng của Fortran, trong đó
cho phép người lập trình xác định được sự phân rã dữ liệu của chương trình song
song. Hai vấn đề: ánh xạ sử dụng phương pháp gán mảng và ánh xạ sử dụng phân
rã, phân tán dữ liệu đã được giải quyết hiệu quả trong Fortran D.
Hệ điều hành là một chương trình làm nhiệm vụ phối hợp các hoạt động của
máy tính. Hệ điều hành thực hiện các chức chính sau:

 Khởi động hệ thống
 Phân đoạn chương trình và lập lịch cho các tiến trình
 Trao đổi và đồng bộ hóa các tiến trình
 Quản lý và điều hành hệ thống, v.v.
Về mặt khái niệm, mục đích chính của hệ điều hành cho máy tính đơn bộ xử lý
có một chút khác với những hệ cho máy tính đa bộ xử lý. Trong hệ điều hành tập
trung (đơn bộ xử lý), mọi quyết định được thực hiện dựa trên sự hiểu biết về trạng
thái tổng thể và tức thời của cả hệ thống. Ngược lại, hệ điều hành đa bộ xử lý có thể
thực hiện mà không cần thiết phải biết trước về trạng thái của hệ thống phân tán.
Nhiệm vụ chính của hệ điều hành đa bộ xử lý là tích hợp các tài nguyên tính
toán và các bộ xử lý trao đổi với nhau thông qua mạng liên kết để tạo thành một hệ
thống nhất làm việc cho hiệu quả.


17

Nói chung, hệ điều hành đa bộ xử lý cũng giống như hệ điều hành tập trung,
phải chứa các thành phần quản trị hệ thống như: quản trị các tiến trình, quản trị bộ
nhớ, quản trị tài nguyên và quản trị các tệp (file). Người ta phân các hệ điều hành
cho các máy tính song song thành ba loại:
1. Những hệ điều hành mở rộng và phát triển từ những hệ đơn bộ xử lý để
chạy được trên những kiến trúc song song, như VMS, UNIX.
2. Những hệ điều hành được thiết kế riêng cho những kiến trúc song song,
như: hệ Hydra cho C.mmp, Medusa cho Cm*, cả hai đều được phat triển ở
Carnegie-Mellon University.
3. Những hệ điều hành tổng hợp được thiết kế để cài đặt được trên những kiến
trúc song song khác nhau, ví dụ MACH Multiprocessor.
Hầu hết các version mới của hệ điều hành UNIX đều thực hiện trên các hệ đa
bộ xử lý. Trong số đó có thể kể ra như Solaris của Sun, HP UNIX của HP, Digital
UNIX của Digital, AIX của IBM, v.v. Những hệ điều hành mới nhất như Window
NT của Microsoft cũng được thiết kế để chạy trên những hệ thống đa bộ xử lý.
1.7. Một số ngôn ngữ lập trình song song
1.7.1. Lập trình song song với OCCAM
Occam là ngôn ngữ lập trình song song được Inmos Company phát triển năm
1988, mục đích chính là để thiết kế và cài đặt các chip được gọi là transputer.
Transputer là một máy tính một chip đơn với một bộ xử lý, bộ nhớ riêng và
bốn kênh vào/ra. Transputer có hai loại 16 bit hoặc 32 bit với tốc độ 10 triệu phép
tính /giây và mỗi kênh có khả năng truyền tải 10 megabit/giây.
Chương trình Occam thường nhiều tiến trình và chúng có thể được ánh xạ
sang một số các transputer bất kỳ để thực hiện song song và trao đổi dữ liệu với
nhau thông qua các kênh vào/ra. Nói chung số lượng các transputer trong mạng có
thể tăng, hoặc giảm và chương trình có thể thực hiện mà không cần có sự thay đổi
nào cả.
Occam là ngôn ngữ lập trình bậc cao, được sử dụng để lập trình cho những
hệ thống gồm nhiều máy tính kết nối với nhau, hoặc các hệ phân tán. Tuy nhiên, so


18

với các ngôn ngữ lập trình bậc cao khác thì Occam còn thiếu một số đặc tính như hỗ
trợ cơ chế đệ qui, định nghĩa kiểu dữ liệu hay con trỏ.
Trong Occam, một hành động có thể thực hiện song song được gọi là một
tiến trình và mỗi câu lệnh cần phải khai báo như một tiến trình. Khi lập trình chúng
ta phải chỉ rõ là các tiến trình sẽ kết hợp với nhau một cách tuần tự hay song song.
Các tiến trình cơ bản trong Occam
Có ba tiến trình nguyên thuỷ trong Occam:
 Tiến trình gán: thay đổi giá trị của các biến
 Tiến trình Input: nhận dữ liệu vào từ các kênh vào (cổng vào)
 Tiến trình Output: gửi dữ liệu ra các kênh ra.
Ví dụ: Giả sử hai tiến trình A và B nhận các dữ liệu vào, tính bình phương của
chúng và gửi cho tiến trình C.
user ? x

Tiến trình A đọc dữ liệu vào cho x từ kênh user

C!x*x

Tiến trình A gửi x2 cho C

user ? y

Tiến trình A đọc dữ liệu vào cho y từ kênh user

C!y*y

Tiến trình A gửi y2 cho C

Các cấu trúc điều khiển
Tiến trình trong Occam còn được xây dựng từ tổ hợp ba cấu trúc điều khiển
sau để tạo ra những tiến trình phức hợp hơn.
 SEQ: cấu trúc tuần tự, các thành phần của các tiến trình trong đó thực hiện
lần lượt theo thứ tự và tiến trình này kết thúc khi thành phần cuối cùng kết
thúc.
 PAR: cấu trúc song song, các thành phần của các tiến trình trong đó thực
hiện đồng thời và tiến trình này kết thúc khi tất cả các thành phần của nó
kết thúc.
 ALT: cấu trúc tuyển chọn, chọn một trong các thành phần của các tiến
trình để thực hiện nếu nó thoả mãn điều kiện lựa chọn và tiến trình này kết
thúc khi thành phần được lựa chọn kết thúc.


19

Ngoài ra, còn có những cấu trúc điều khiển IF, gọi là tiến trình điều kiện để chọn
một tiến trình thành phần khi biểu thức Boolean có giá trị true và cấu trúc lặp
WHILE, gọi là tiến trình lặp để thực hiện lặp lại tiến trình thành phần cho đến khi
biểu thức điều kiện Boolean nhận giá trị true.
Ví dụ: Giả sử có hai tiến trình giống nhau cùng nhận dữ liệu vào và cộng
dồn vào tổng.
CHAN In1, In2:
CHAN Out1, Out2:
VAR Sum1, Sum2:
SEQ
Sum1:= 0
Sum2:= 0
PAR
-- Tiến trình thứ nhất
While TRUE
VAR Item1:
SEQ
In1 ? Item1
Sum1:= Sum1 + Item1
Out1 ! Sum1
-- Tiến trình thứ hai
While TRUE
VAR Item1:
SEQ
In2 ? Item2
Sum2:= Sum2 + Item2
Out2 ! Sum2
Sự trao đổi giữa các tiến trình


20

Trong ví dụ trên, các tiến trình không cần trao đổi với nhau vì mỗi tiến trình
đều sử dụng các biến cục bộ của riêng mình. Khi có nhiều tiến trình muốn trao đổi
dữ liệu với nhau thì phải trao đổi với nhau trên cùng một kênh truyền dữ liệu. Một
tiến trình gửi dữ liệu ra một kênh truyền và tiến trình kia nhận dữ liệu từ kênh đó.
Trong chương trình Occam, mỗi tiến trình thực hiện trên một bộ xử lý và truyền
thông điệp tới những bộ xử lý lân cận theo kiến trúc hình khối (hình 2-8).
Ví dụ: chương trình đơn giản trong Occam để tính số π sử dụng tích phân
của đường cong 4/(1+x2) trong khoảng 0 và 1. Các dòng 1-3 định nghĩa các hằng. N
là số các đoạn con tối đa để tính tích phân, PROCESS là số các tiến trình được tạo
ra và CHUNK lá số đoạn giao cho mỗi tiến trình. Trong các dòng 6-17 thì các tiến
trình thực hiện song song và sau đó, tiến trình cuối cùng thực hiện các lệnh từ 18-31
để tính tổng và in kết quả.
1. DEF N = 400000:
2. DEF PROCESS = 8:
3. DEF CHUNK = N / PROCESS:
4. CHAN sum[PROCESS]
5. PAR
6. PAR i = [0 FOR PROCESS]
7.

REAL64x, localsum, width:

8.

SEQ

9.

localsum:= 0.0

10. width:= 1.0 / N
11. x:= ((i * CHUNK) + 0.5) * width
12. SEQ i = [0 FOR CHUNK]
13.

SEQ

14.

localsum:=localsum+(4.0/(1.0+(x*x))))

15.

x:= x + width

16.

localsum:= localsum * width

17.

sum[i] ! localsum


21

18.

REAL64 pi:

19. INT got[PROCESS]:
20. SEQ
21.

pi:= 0.0

22.

SEQ i = [0 FOR PROCESS]

23.

got[i]:= FALSE

24.

SEQ i = [0 FOR PROCESS]

25.

REAL64 y:

26.

SEQ

27.

ALT i = [0 FOR PROCESS]

28.

(got[i] = FALSE) & sum’i]? Y

29.

got[i]:= TRUE

30.

pi:= pi + y

31. output ! “So Pi gần đúng là: “; pi
1.7.2. Lập trình song song với PVM
Phần này chúng ta giới thiệu tóm tắt cách phát triển các chương trình song
song thực hiện trên những máy tính nối mạng trong môi trường UNIX, hoặc mạng
LAN. PVM là hệ thống cho phép một tuyển tập các trạm máy tính không thuần nhất
và các máy tính kết nối với nhau để xử lý song song. Nó có những đặc tính chính:
 Thực hiện theo mô hình truyền thông điệp tường minh
 Hỗ trợ sự kết nối không thuần nhất: PVM hỗ trợ sự kết hợp của các máy
tính, mạng máy tính và nhiều loại chương trình ứng dụng.
 Hỗ trợ đa bộ xử lý: PVM sử dụng những khả năng truyền thông điệp trong
hệ đa bộ xử lý để khai thác hết khả năng của phần cứng.
 Tính toán dựa trên tiến trình: Đơn vị điều khiển thực hiện song song trong
PVM là một tác vụ, đó là một luồng (Thread) làm nhiệm vụ điều khiển sự
truyền thông và tính toán.
 Thay đổi cấu hình theo yêu cầu: Các chương trình có thể thực hiện trên tập
các máy được lựa chọn theo yêu cầu của NSD.


22

PVM xử lý tất cả các vấn đề định tuyến truyền thông điệp, chuyển đổi dữ
liệu, lập lịch trong mạng máy tính. Hệ thống PVM gồm hai thành phần chính:
 Khối pvmd hoặc pvm3 đặt thường trú trên tất cả các máy tính để tạo ra máy ảo.
 Thư viện các chương trình con giao diện của pvm: chứa các chương trình
con để truyền thông điệp, quản lý các tiến trình, phối hợp các tác vụ và thay
đổi các máy ảo.
Mô hình tính toán của PVM được xác định như hình 1.7. và một dạng kiến trúc
có thể thiết lập như hình 1.8.
Nhập dữ liệu và phân đoạn

Máy tính 1

Máy tính 2

Xuất dữ liệu và hiển
thị kết quả

Hình 1.7. Mô hình tính toán của PVM

Cụm 1

Bridg
e
MPP

Cụm 2
Cụm 3

SIMD


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×