You are on page 1of 54

7/17/2010

THỌNG TIN V H C PH N
X Lụ SONG SONG
PARALLEL PROCESSING 1. Thông tin chung:
1.1. Tên học phần: X lỦ song song (Parallel Processing)
1.2. Mã học phần: KH.KM.515
1.3. Số tín chỉ: 2 TC
1.4. Loại học phần: Bắt buộc
1.5. Các học phần tiên quyết: Cơ s dữ liệu phân tán

THỌNG TIN V H C PH N THỌNG TIN V H C PH N


2. M c tiêu c a h c ph n: 3. Chính sách đ i v i h c ph n
2.1. Ki n thức: cung cấp cho ngư i học các kiến th c •Tham gia học tập trên lớp: đi học đầy đ , tích cực thảo
về máy tính song song, cách xây dựng các thuật toán luận nội dung bài giảng, tham gia chữa bài tập và chuẩn
song song. bị bài v tốt - 20%.

2.2. Kỹ năng: sử dụng công cụ lập trình song song như •Khả năng tự học, tự nghiên c u: hoàn thành bài tiểu
MPI, JAVA, VPM ... ngư i học phải cài đặt được một số luận (assignment) theo từng cá nhân. Bài kiểm tra đánh
thuật toán song song cơ bản. giá giữa kỳ - 20%.

2.3. Thái đ h c t p: ngư i học phải tham dự đầy đ •Kết quả thi cuối kỳ - 60%.
các gi lý thuyết và thảo luận.

THỌNG TIN V H C PH N N I DUNG CH NG TRỊNH


3. Phơn b s ti t: PH N 1: TệNH TOỄN SONG SONG
Ch ng 1 KI N TRÚC VÀ CỄC LO I MỄY TINH SONG SONG
• Lý thuyết: 20
Ch ng 2 CỄC THÀNH PH N C A MỄY TINH SONG SONG

• Tiểu luận, đọc thêm: 8 Ch ng 3 GI I THI U V L P TRỊNH SONG SONG


Ch ng 4 CỄC MỌ HỊNH L P TRỊNH SONG SONG
• Thảo luận: 2
Ch ng 5 THU T TOỄN SONG SONG

PH N 2: X Lụ SONG SONG CỄC C S D LI U


(Đ c thêm)

Ch ng 6 T NG QUAN V C S D LI U SONG SONG


Ch ng 7 T I U HịA TRUY V N SONG SONG
Ch ng 8 L P L CH T I U CHO CÂU TRUY V N SONG SONG

1
7/17/2010

TÀI LI U THAM KH O TÀI LI U THAM KH O


[0] Đoàn văn Ban, Nguyễn Mậu Hân, Xử lý song song và phân tán, [7] Clement T.Yu, Weiyi Meng, Principles of Database Query
NXB KH&KT, 2006.
Processing for Advanced Applications, Morgan Kaufman Inc.,
[1] Ananth Grama, Anshui Guptal George Karipis, Vipin Kumar,
Introduction to Parallel Computing, Pearson, 2003 1998. 185-225.
[2] Barry Wilkingson, Michael Allen, Parallel Programming, [8] Hasan Waqar, Optimization of SQL Query for Parallel
Technigues and Applications Using Networked Workstations and Machines, Springer, 1995.
Parallel Computers, Prentice Hall New Jersey, 1999 [9] Hong W., Parallel Query Processing Using Shared Memory
[3] M. Sasikumar, Dinesh Shikhare, P. Ravi Prakash, Introduction to
Multiprocessors and Disk Arrays, Univesity of California, 1992.
Parallel Processing, Prentice - Hall, 2000
[4] Seyed H. Roosta, Parallel Processing and Parallel Algorithms, [10] Hua, K.A., Parallel Database Technology, University of
Theory and Computation, Springer 1999. Central Florida Orlande FL 32846-2362, 1997.
[5] Michael J. Quinn, Parallel Computing Theory and Practice, [11] Zomaya A. Y. and Shaharuddin Salleh, Scheduling in
MaGraw-Hill,1994 parallel computing systems, Kluwer Academic Publishers, 1999.
[6] Shaharuddin Salleh, Albert Y. Zomaya, Scheduling in Parallel
Computing Systems, Kluwer Academic Publisher, 1999.

Đ A CH LIểN H

TS. NGUY N M U HÂN


KHOA CỌNG NGH THỌNG TIN
TR NG Đ I H C KHOA H C - Đ I H C HU PH N 1:
77, NGUY N HU ậ HU
TệNH TOỄN SONG SONG
ĐI N THO I:
CQ: 054 382 6767
DĐ: 01255213579

EMAIL: nmhan2005@yahoo.com
Nguyễn Mậu Hân
Khoa CNTT-ĐHKH HUẾ
nmhan2005@yahoo.com | nmhan@hueuni.edu.vn
back 10

CH NG 1. KI N TRÚC CỄC LO I MỄY TệNH SONG SONG 1.1 Gi i thi u chung

NỘI DUNG Xử lý song song (XLSS) là gì?


Trong xử lý tuần tự:
•Bài toán được tách thành một chuỗi các câu lệnh r i rạc
1.1 Gi i thi u chung
•Các câu lệnh được thực hiện một cách tuần tự
1.2 Ki n trúc máy tính ki u Von Neumann •Tại mỗi th i điểm chỉ thực hiện được một câu lệnh
1.3 Phơn lo i máy tính song song
1.4 Ki n trúc máy tính song song

11 12

2
7/17/2010

1.1 Gi i thi u chung (tt) 1.1 Gi i thi u chung (tt)


1 CPU Trong xử lý song song
Đơn giản
•Bài toán được tách thành nhiều phần và có thể thực hiện
Chậm quá !!!
đồng th i.
•Mỗi phần được tách thành các lệnh r i rạc
•Mỗi lệnh được thực hiện từ những CPU khác nhau

13 14

1.1 Gi i thi u chung (tt) 1.1 Gi i thi u chung (tt)


Nhiều CPU
Phức tạp hơn
Nhanh hơn !!!

Vậy xử lý song song là gì?

XLSS lƠ m t 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 đ trên h th ng có nhi u b x lỦ.

15 16

1.1 Gi i thi u chung (tt) 1.1 Gi i thi u chung (tt)

Tại sao phải xử lý song song?


Sự khác nhau cơ bản giữa XLSS và XLTT :
 Yêu c u c a ng i s d ng:
 Cần thực hiện một khối lượng lớn công việc
 Th i gian xử lý phải nhanh X lỦ tu n t X lỦ song song
Mỗi thời điểm chỉ thực hiện Mỗi thời điểm có thể thực
 Yêu c u th c t : đƣợc một phép toán hiện đƣợc nhiều phép toán
 Trong thực tế không tồn tại máy tính có bộ nhớ vô hạn Thời gian thực hiện phép Thời gian thực hiện phép
và khả năng tính toán vô hạn. toán chậm toán nhanh
Trong thực tế có nhiều bài toán mà máy tính xử lý tuần tự
(XLTT) kiểu von Neumann không đáp ng được.
Sử dụng hệ thống nhiều BXL để thực hiện những tính
toán nhanh hơn những hệ đơn BXL.
 Giải quyết được những bài toán lớn hơn, ph c tạp hơn
17 18

3
7/17/2010

1.1 Gi i thi u chung (tt) 1.1 Gi i thi u chung (tt)


Đối tƣợng nào sử dụng máy tính song song?
Tính khả thi của việc XLSS?
• Tốc độ xử lý c a các BXL theo kiểu Von Neumann bị giới
hạn, không thể cải tiến thêm được.
• Giá thành c a phần c ng (CPU) giảm, tạo điều kiện để xây
dựng những hệ thống có nhiều BXL với giá cả hợp lý.
• Sự phát triển công nghệ mạch tích hợp cao VLSI (very large
scale integration) cho phép tạo ra những hệ ph c hợp có
hàng triệu transistor trên một chip.

19 20

1.1 Gi i thi u chung (tt) 1.1 Gi i thi u chung (tt)

•Những thành phần liên quan đến vấn đề XLSS: Tiêu chí để đánh giá một thuật toán song song
 Kiến trúc máy tính song song  Đ i v i thu t toán tu n t
 Phần mềm hệ thống (hệ điều hành), •th i gian thực hiện thuật toán.
 Thuật toán song song •không gian bộ nhớ.
 Ngôn ngữ lập trình song song, v.v. •khả năng lập trình.

• Định nghĩa máy tính song song (MTSS):  Đ i v i thu t toán song song
MTSS là một tập các BXL (thư ng là cùng một loại) kết •các tiêu chuẩn như thuật toán tuần tự.
nối với nhau theo một kiểu nào đó để có thể hợp tác với nhau •những tham số về số BXL: số BXL, tốc độ xử lý.
cùng hoạt động và trao đổi dữ liệu với nhau. •khả năng c a các bộ nhớ cục bộ.
•sơ đồ truyền thông.
•thao tác I/O.
21 22

1.2 Ki n trúc máy tính ki u Von Neumann 1.2 Ki n trúc máy tính ki u Von Neumann

•John von Neumann (1903 –1957) : nhà toán học ngư i Hungary Máy tính kiểu V.Neumann được xây dựng từ các khối cơ s :
• Sử dụng khái niệm lưu trữ chương trình (stored-program concept) •Bộ nhớ: để lưu trữ dữ liệu
•Các đơn vị logic và số học ALU: thực hiện các phép toán
•Các phần tử xử lý: điều khiển CU và truyền dữ liệu I/O
•Đường truyền dữ liệu: BUS
B nh
Von Neumann computer có các đặc đi m sau:
• Bộ nhớ được dùng để lưu trữ chương trình và dữ liệu Cơu l nh Ghi d li u Đọc dữ liệu
• Chương trình được mã hoá (code) để máy tính có thể hiểu được
• Dữ liệu là những thông tin đơn giản được sử dụng b i chương trình B x lỦ
• CPU nạp (fetch) những lệnh và dữ liệu từ bộ nhớ, giải mã (decode) và thực
23 24
hiện tuần tự chúng.

4
7/17/2010

1.3 Phơn lo i máy tính song song 1.3 Phơn lo i máy tính song song

 Tiêu chí để phân loại máy tính song song?  Michael Flynn (1966)
 SISD: Single Instruction Stream, Single Data Stream
a) Dựa trên lệnh, dòng dữ liệu và cấu trúc bộ nhớ
Đơn luồng lệnh, đơn luồng dữ liệu
 SIMD: Single Instruction Stream, Multiple Data Stream
(Flynn)

b) Dựa trên kiến trúc: (xem 1.4) Đơn luồng lệnh, đa luồng dữ liệu

• Pipelined Computers  MISD: Multiple Instruction Stream, Single Data Stream


• Đa luồng lệnh, đơn luồng dữ liệu
 MIMD: Multiple Instruction Stream, Multiple Data Stream
Dataflow Architectures
• Data Parallel Systems
Đa luồng lệnh, đa luồng dữ liệu
• Multiprocessors
• Multicomputers
25 26

1.3 Phơn lo i máy tính song song 1.3 Phơn lo i máy tính song song
Mô hình SISD - Đơn luồng lệnh, đơn luồng dữ liệu Mô hình SISD - Đơn luồng lệnh, đơn luồng dữ liệu (tt)
Đặc đi m Tín hiệu điều
Đơn vị điều khiển BXL s h c

 Chỉ có một CPU


khiển

 mỗi th i điểm chỉ thực hiện một lệnh và chỉ đọc/ghi Lu ng l nh


Lu ng Lu ng
d li u
k t qu
một mục dữ liệu
 Có một thanh ghi, gọi là bộ đếm chương trình (program B nh

counter), được sử dụng để nạp địa chỉ c a lệnh tiếp theo


khi xử lý tuần tự
 Các câu lệnh được thực hiện theo một th tự xác định Ví d minh h a 
Đây chính là mô hình máy tính truyền thống kiểu Von Neumann

27 28

1.3 Phơn lo i máy tính song song 1.3 Phơn lo i máy tính song song

Mô hình SIMD - Đơn luồng lệnh, đa luồng dữ liệu Mô hình SIMD - Đơn luồng lệnh, đa luồng dữ liệu (tt)
 Có một đơn vị điều khiển (CU) để điều khiển nhiều đơn vị IS: Instruction Stream PU : Processing Unit
LM : Local Memory DS : Data Stream
xử lý (PE)
 CU phát sinh tín hiệu điều khiển đến các đơn vị xử lý
 Đơn luồng lệnh: các đơn vị xử lý thực hiện cùng một lệnh
DS DS
PU1 LM1
IS Data sets
trên các mục dữ liệu khác nhau CU IS
 Đa luồng dữ liệu: mỗi đơn vị xử lý có luồng dữ liệu riêng
loaded from host
Program loaded DS DS
 Đây là kiểu tính toán lặp lại các đơn vị số học trong CPU,
from host PUn LMn

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ô hình c a ki n trúc SIMD v i b nh phơn tán
 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. 29 30

5
7/17/2010

1.3 Phơn lo i máy tính song song 1.3 Phơn lo i máy tính song song

Mô hình SIMD - Đơn luồng lệnh, đa luồng dữ liệu (tt) Mô hình MISD - Đa luồng lệnh, đơn luồng dữ liệu
Đặc điểm:
 Đa luồng lệnh: có thể thực hiện nhiều lệnh trên cùng một mục
dữ liệu
 Đơn luồng dữ liệu: các PU xử lý trên cùng một luồng dữ liệu
 Kiến trúc kiểu này có thể chia thành hai nhóm:
 Các máy tính yêu cầu mỗi đơn vị xử lý (PU) nhận những
lệnh khác nhau để thực hiện trên cùng một mục dữ liệu.
 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-gọi là kiến trúc hình ống-xử lý
Các máy tính trên thị trư ng được sản xuất theo mô hình 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ả
SIMD: ILLIAC IV, DAP và Connection Machine CM-2
cho PU thực hiện bước tiếp theo.
31 32

1.3 Phơn lo i máy tính song song 1.3 Phơn lo i máy tính song song
Mô hình MISD – Đa luồng lệnh, Đơn luồng dữ liệu (tt) Mô hình MISD – Đa luồng lệnh, Đơn luồng dữ liệu (tt)
IS: Instruction Stream PU : Processing Unit CU : Control Unit
Ví d minh h a
LM : Local Memory DS : Data Stream

IS
IS
CU1 CU2 CUn
Memory:
(Program, IS IS IS
DS DS DS
Data) PU1 PU2 PUn

I/O
DS
MISD architecture (the systolic array)

33 34

1.3 Phơn lo i máy tính song song 1.3 Phơn lo i máy tính song song

Mô hình MIMD - Đa luồng lệnh, đa luồng dữ liệu Mô hình MIMD – Đa luồng lệnh, Đa luồng dữ liệu (tt)
 Mỗi BXL có thể thực hiện những luồng lệnh (chương trình)
IS
IS DS
khác nhau trên các luồng dữ liệu riêng. I/O
CU1 PU1
 Hầu hết các hệ thống MIMD đều có bộ nhớ riêng và cũng có Shared
thể truy cập vào được bộ nhớ chung (global) khi cần, do vậy Memory
I/O IS DS
giảm thiểu được sự trao đổi giữa các BXL trong hệ thống. CUn PUn

Nh n xét: IS
•Đây là kiến trúc ph c tạp nhất, nhưng nó là mô hình hỗ trợ MIMD architecture with shared memory
xử lý song song cao nhất
•Các máy tính được sản xuất theo kiến trúc này:
BBN Butterfly, Alliant FX, iSPC của Intel
35 36

6
7/17/2010

1.3 Phơn lo i máy tính song song 1.4 Ki n trúc máy tính song song
Một vài nhận xét:
Mô hình MIMD – Đa luồng lệnh, Đa luồng dữ liệu (tt)
 Theo Flynn: có hai họ kiến trúc quan trọng cho các máy tính
song song: SIMD và MIMD. Những kiến trúc khác có thể
xếp theo hai mẫu đó.
 M c tiêu c a xử lý song song là khai thác đến mức tối đa
các khả năng sử dụng của các thiết bị phần cứng nhằm giải
quyết nhanh những bài toán đặt ra trong thực tế.
 Kiến trúc phần c ng là trong su t đối với ngư i lập trình
 Trong kiến trúc tuần tự có thể tận dụng tốc độ cực nhanh
c a 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.
 Những chương trình song song trên máy đơn BXL có thể
Nh n xét:
•MIMD 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 thực hiện được nếu có HĐH cho phép nhiều tiến trình cùng
•Các máy tính được sản xuất theo kiến trúc này: thực hiện, nghĩa là có thể xem hệ thống như là đa bộ xử lý.
BBN Butterfly, Alliant FX, iSPC của Intel 37 38

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song
Song song hóa trong máy tính tuần tự: Song song hóa trong máy tính tuần tự (tt):
a. Đa đơn vị chức năng: b. Xử lý theo nguyên lý hình ống trong CPU
 Các máy tính truyền thống chỉ có một đơn vị số học và

 Câu lệnh được chia thành các giai đoạn (stage-phase)


logic (ALU) trong BXL. mỗi th i điểm nó chỉ có thể thực

 Tại một thời điểm có thể có nhiều lệnh được tải vào và được
hiện một ch c năng.
 Máy tính song song có nhiều đơn vị xử lý (PE). Những đơn
thực hiện trong những bước khác nhau
vị này có thể cùng nhau thực hiện song song.
Ví dụ: máy CDC 6600 (1964) có 10 PE được tổ ch c trong  Các giai đoạn thực hiện khác nhau của mỗi câu lệnh có thể
thực hiện gối đầu nhau.
một BXL. Những đơn vị ch c năng này độc lập với nhau và
có thể thực hiện đồng th i.  Đầu ra c a giai đoạn này có thể là đầu vào c a giai đoạn
 Xây dựng bộ lập lịch tối ưu để phân chia các câu lệnh thực
tiếp theo
hiện sao cho tận dụng được tối đa các đơn vị xử lý cũng  Thực hiện theo nguyên lý hình ống sẽ hiệu quả hơn vì
như các tài nguyên của máy tính. không cần vùng đệm dữ liệu.

39 40

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song

Song song hóa trong máy tính tuần tự (tt): IF: Instruction Fetch
b. Xử lý theo nguyên lý hình ống trong CPU ID: Instruction decode
 Ví dụ: OF: Operand Fetch

 Pha 1: nạp câu lệnh về từ bộ nhớ (Instruction Fetch)


IE: Instruction Execute

 Pha 2: giải mã (Instruction decode)


WB: Write-Back

 Pha 3: xác định các toán hạng (Operand Fetch) Cycles

 Pha 4: thực hiện câu lệnh (Instruction Execute)


 Pha 5: lưu trữ kết quả (Write-Back)
Instruction # 1 2 3 4 5 6 7 8
Instruction i IF ID OF IE WB
... quá trình này có thể phân cho mỗi PE thực hiện một
Instruction i+1 IF ID OF IE WB
công việc. Theo cách đó, tại một th i điểm BXL có thể
Instruction i+2 IF ID OF IE WB
thực hiện được nhiều câu lệnh gối đầu nhau. Trước khi
một câu lệnh kết thúc thực hiện thì câu lệnh tiếp theo đã Instruction i+3 IF ID OF IE WB
có thể thực hiện pha giải mã, câu lệnh khác lại có thể Instruction i+4 IF ID OF IE WB
được nạp về, v.v. 41 42

7
7/17/2010

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song
Ví d : Th c hi n tu n t vƠ hình ng c a 2 ti n trình g m 4 giai đo n Song song hóa trong máy tính tuần tự (tt):
Giả sử một tiến trình được chia thành 4 giai đoạn:
c. Sự gối đầu CPU và các thao tác vào/ra (I/O)
 Các phép vào/ra có thể thực hiện đồng th i đối với
Pha 1 Pha 2 Pha 3 Pha 4

 Thực hiện tuần tự 2 tiến trình phải qua 8 giai đoạn: nhiều nhiệm vụ tính toán khác nhau bằng cách sử
Pha 1 Pha 2 Pha 3 Pha 4 Pha 1 Pha 2 Pha 3 Pha 4 dụng những bộ điều khiển vào/ra, các kênh hay
những BXL vào/ra khác nhau.
Thực hiện theo hình ống chỉ cần trải qua 5 giai đoạn:
 Nhiều máy tính hiện nay có nhiều bộ điều khiển
Pha 1 Pha 2 Pha 3 Pha 4
thiết bị vào/ra, cho phép đa xử lý vào/ra làm tăng
Pha 1 Pha 2 Pha 3 Pha 4 được tốc độ trao đổi dữ liệu giữa các thiết bị ngoài
với CPU.
Tổng th i gian tính toán tuần tự là: 2 * (S1 + S2 + S3 + S4)
Tổng th i gian tính toán hình ống là: S1 + S2 + S3 + S4 + S4 43 44

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song
d. Các hệ thống bộ nhớ CPU Song song hóa trong máy tính tuần tự (tt):
phân cấp e. Đa chƣơng trình và chia sẻ thời gian
 Do tốc độ thực hiện các  Thực hiện song song dựa vào hệ điều hành đa nhiệm,
(Registers) Tăng về tốc
Cache độ truy cập
phép toán trong BXL nhanh phần mềm đa luồng, đa tiến trình.
hơn rất nhiều việc đọc dữ  Hệ điều hành đa nhiệm thư ng giải quyết các trư ng hợp:
liệu vào bộ nhớ trong
 Các thanh ghi được sử dụng
◘ Trong cùng một khoảng th i gian, có nhiều tiến trình
Main Memory cùng truy cập vào dữ liệu từ thiết bị vào/ra chung
trực tiếp cho ALU nên bộ
nhớ cache được xem như ◘ Một tiến trình tính toán với cư ng độ cao có thể tạm
vùng đệm giữa BXL và bộ th i chiếm dụng CPU để làm việc, trong khi một tiến
nhớ chính trình khác trước đó không đòi hỏi phải kết thúc công việc
 Khi dữ liệu được chuyển từ Fixed Disks sớm phải ngưng lại.
bộ nhớ cache vào bộ nhớ Tăng khả ◘ Bộ lập lịch chia sẻ th i gian làm nhiệm vụ phân chia
chính thì đồng th i có thể năng lưu
CPU cho mỗi tiến trình một khoảng th i gian cố định
trữ
chuyển dữ liệu từ cache vào ◘ Tạo các BXL ảo: mỗi tiến trình được cung cấp một môi
cho CPU xử lý Magnetic trư ng được xem như một BXL để thực hiện riêng cho
Tapes 45
tiến trình đó. 46

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song

Mô hình trừu tƣợng của máy tính song song a. Máy tính truy cập ngẫu nhiên song song PRAM

Mục đích: muốn thể hiện được những khả năng tính toán c a • Ch a một đơn vị điều khiển CU
MTSS mà không quan tâm đến những ràng buộc cụ thể c a • Một bộ nhớ chung
• Một tập không giới hạn các BXL
những máy tính có trong thực tế.
• Mỗi BXL lại có bộ nhớ riêng và có một chỉ số duy nhất
được sử dụng để xác định địa chỉ trong quá trình trao
Chú ý: khi xây dựng các thuật toán song song, chúng ta qui
đổi các tín hiệu và quản lý các ngắt.
ước là phát triển thuật toán cho mô hình trừu tượng này,
• Tất cả các BXL đều chia sẻ bộ nhớ chung với yêu cầu
sau đó ánh xạ sang những máy tính cụ thể với một số các
không bị giới hạn.
ràng buộc nào đó. Các câu lệnh có thể bắt đầu thực hiện bất kỳ th i điểm
nào, bất kỳ vị trí nào c a bộ nhớ (riêng hoặc chung)

47 48

8
7/17/2010

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song

a. Máy tính truy cập ngẫu nhiên song song PRAM Một số điều cần lƣu ý khi phát triển những thuật toán
cho các MTSS tổng quát
CU

 Không bị giới hạn về số lượng BXL


P1 P2 Pn  Mọi vị trí c a bộ nhớ đều truy cập được b i bất kỳ BXL
Private memory Private memory … Private memory
… … … nào
 Không giới hạn về dung lượng bộ nhớ chung chia sẻ
Interconnection network
trong hệ thống
 Các BXL có thể đọc bất kỳ một vị trí nào c a bộ nhớ,
Global memory

nghĩa là không cần phải ch để những BXL khác kết
thúc công việc truy cập vào bộ nhớ.
Đây cũng là mô hình tổng quát cho máy tính song song kiểu MIMD 49 50

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song

Một số điều cần lƣu ý khi chuyển những thuật toán xây b. Kiến trúc SIMD
dựng cho MTSS tổng quát sang máy tính cụ thể
 Phải áp dụng một số các ràng buộc để đảm bảo chương
C u trúc:
trình thực hiện được trên những máy tính đó.  Các phần tử xử lý (PE) đều được điều hành b i một
 Về hình th c, phải thực hiện một trong những điều kiện đơn vị điều khiển (CU).
sau:  Các phần tử xử lý nhận được cùng một lệnh từ CU
 EREW: loại trừ vấn đề xung đột đọc/ghi
(Exclusive Read + Exclusive Write) nhưng hoạt động trên những tập dữ liệu khác nhau.
 CREW: cho phép đọc đồng th i, nhưng không cho Đặc tính:
phép xung đột khi ghi  Phân tán việc xử lý trên nhiều phần c ng
 Thao tác đồng th i trên nhiều phần tử dữ liệu
(Concurrent Read + Exclusive Write)
 CRCW: Cho phép đọc, ghi đồng th i
(Concurrent Read + Concurrent Write)  Thực hiện cùng một tính toán trên tất cả các phần tử dữ
liệu.
51 52

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song
X1
b. Kiến trúc SIMD (tt) Ví dụ
M t s PE ki m tra X= ,
IS: Instruction Stream PE : Processing Element
LM : Local Memory DS : Data Stream X1
m t s khác r i

X= 
PE1 Yes X3
DS1 X3
CU
M t s PE ki m tra X ,
IS
No
m t s khác r i
PE2 DS2 X2
.
. X2
IS .
X4
T t c PE
PEn DSn
Result (a) thực hiện theo SISD, X4
Mô hình kiến trúc
kiểu SIMD Global memory Trong đó, X1, X2, X3, và X4 là các
khối các câu lệnh (b) thực hiện theo SIMD
53 54

9
7/17/2010

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song
b. Kiến trúc MISD Ví d : Th c hi n tu n t vƠ hình ng c a 2 ti n trình g m 4 giai đo n
BXL hình ống chính là BXL kiểu MISD Giả sử một tiến trình được chia thành 4 giai đoạn:
Nguyên lý hình ống (pipeline): dựa trên nguyên tắc: Pha 1 Pha 2 Pha 3 Pha 4
 Phân đoạn hoặc chia nhỏ một tiến trình thành một số tiến
con để thực hiện trong các pha liên tiếp.  Thực hiện tuần tự 2 tiến trình phải qua 8 giai đoạn:
 Mỗi một giai đoạn c a một tiến trình được thực hiện tuần tự. Pha 1 Pha 2 Pha 3 Pha 4 Pha 1 Pha 2 Pha 3 Pha 4
Sau khi thực hiện xong một pha thì bắt đầu thực hiện giai
đoạn c a tiến trình tiếp theo. Thực hiện theo hình ống chỉ cần trải qua 5 giai đoạn:
 Mỗi pha thực hiện xong sẽ truyền kết quả cho pha tiếp theo. Pha 1 Pha 2 Pha 3 Pha 4
Tóm lại, theo nguyên lý hình ống:
Khi một giai đoạn công việc đang thực hiện thì một giai Pha 1 Pha 2 Pha 3 Pha 4

đoạn khác có thể nạp dữ liệu vào, và dữ liệu vào c a giai


đoạn này có thể là kết quả c a giai đoạn trước nó. Tổng th i gian tính toán tuần tự là: 2 * (S1 + S2 + S3+ S4)
55
Tổng th i gian tính toán hình ống là: S1 + S2 + S3 + S4 + S4 56

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song

Nguyên lý hình ống có thể áp dụng theo hai m c: - Hình ng theo đ n v cơu l nh:
- Hình ng theo đ n v s h c: Các đơn vị điều khiển CU được phân đoạn và tổ ch c theo
Các đơn vị số học và logic ALU được tổ ch c thành mảng, hình ống.
các phép toán bên trong được thực hiện theo nguyên lý
hình ống. CU
CU ...
ALU CU
ALU CU
...
ALU
ALU
Bộ nhớ
Bộ nhớ
Xử lý hình ống theo CU
Xử lý hình ống theo ALU
57 58

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song
Xây dựng hình ống vòng tròn giữa các BXL, bộ nhớ và mạng
liên kết M t ví d đ n gi n
Read
Network Tính t ng n ph n t c a m t m ng a:
Shared Shared For (i=0; i<n; i++)
Memory Memory a[0] a[1] a[2] a[3] a[4]
Write s=s+a[i]
Network
read
Ví dụ về một hình ống vòng tròn
Phép toán thực hiện b i CU theo kiến trúc này có thể chia thành 5 giai đoạn: CPU
GĐ1: Đọc dữ liệu: đọc dữ liệu từ bộ nhớ chia sẻ (Shared Memory).
Th c hi n bình th ng
GĐ2: Chuyển tải dữ liệu: chuyển dữ liệu từ bộ nhớ tới các phần tử xử lý PE
thông qua mạng đọc (Read Network). s=s+a[i]
GĐ3. Thực hiện câu lệnh: sử dụng PE để thực hiện các câu lệnh.
read write
GĐ4. Chuyển tải dữ liệu: chuyển các kết quả từ các PE tới bộ nhớ
thông qua mạng ghi (Write Network).
s
GĐ5. Lưu trữ dữ liệu : ghi lại các kết quả vào bộ nhớ chia sẻ. 59 60

10
7/17/2010

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song

Tính t ng n ph n t c a m t m ng a: Ví d : S p x p n ph n t bằng kỹ thu t đ ng ng


sin = sout + a[i] ụ t ng thu t toán (insertion sort):
Th c hi n theo đ ng ng
• P0 nhận một dãy các số
• Lưu trữ số lớn nhất
• Chuyển các số nhỏ hơn đi
• Nếu số nhận được lớn hơn số lưu trữ hiện th i thì thay thế
a[0] a[1] a[2] a[3] a[4] nó và chuyển số nhỏ hơn đi

Recv(&number, Pi-1);
sin sout sin sout sin sout sin sout sin sout If (number > x) {
send(&x,Pi-1);
x= number;
} else send(number, Pi+1);
61 62

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song
P0 P1 P2 P3 P4
4,3,1,2,5 c. B x lỦ m ng tơm thu SAP (Systolic Array Processor)
• Do Kung và Leiserson đề xuất 1978
4,3,1,2 5
• Là một mảng các phần tử xử lý dữ liệu (DPU) được kết nối
2
4,3,1 5 cục bộ với nhau.
1
4,3 5 2 • Mỗi DPU được xem như một tế bào, một ô trong mảng, bao
3 1 gồm:
4 5 2
4 2 □ Một số thanh ghi (registers)
5 3 1
3 1
□ Một bộ cộng (adder)
5 4 2
□ Các mạch điều khiển
2
5 4 3 1 □ Đơn vị logic-số học ALU.
1
5 4 3 2
63 64
5 4 3 2 1

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song

c. B x lỦ m ng tơm thu SAP (cont.) c. B x lỦ m ng tơm thu SAP (tt)


D li u vƠo
DPU: Data processing Units

Systolic Tín hi u Host


Array Controller Processor

K t qu

Kiến trúc bộ xử lý mảng tâm thu

Trong kiến trúc SAP,


•Bộ điều khiển (Controller) làm nhiệm vụ giao diện cho BXL
chính (Host Processor) và gửi các tín hiệu điều khiển quá
trình vào/ra dữ liệu cho SA.
•Hoạt động của hệ thống theo từng nhịp và lặp lại một cách
đều đặn để tận dụng được khả năng song song của tất cả
các phần tử xử lý 65 66

11
7/17/2010

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song

c. B x lỦ m ng tơm thu SAP (cont.) c. B x lỦ m ng tơm thu SAP (tt)


SA có thể tổ ch c theo nhiều cấu hình tôpô khác nhau Xét bài toán nhân 2 ma trận c 2x2: AxB=C

 a11 a12   b11 b12   c11 c12 


  *     
 a 21 a 22   b21 b22   c21 c22 
cij   a ik * bkj
(a) mảng tuyến tính

c11  a11 * b11  a12 * b21 c12  a11 * b12  a12 * b22
k
(b) mảng hình tam giác

c21  a 21 * b11  a 22 * b21 c22  a 21 * b12  a 22 * b22

Sử dụng bộ nhớ SAP hai chiều hình vuông để tính


67 68
(c) mảng hai chiều hình vuông

1.4 Ki n trúc máy tính song song 1.4 Ki n trúc máy tính song song
a22
a21 Nhập theo hàng d. Kiến trúc MIMD
a11 a12 Nhịp 1: • Loại đa BXL hoặc còn gọi là hệ thống đa máy tính
Nhập a11, b11 vào ô số 1 và tính a11* b11 • Trong đó mỗi BXL có đơn vị điều khiển (CU) riêng và thực
b11 1 2 3 Nhập b21 vào ô số 4 và a12 vào ô số 2 hiện chương trình riêng c a mình.

b12 b21 4 5 6 Nhịp 3: Những đặc trƣng của MIMD:


Truyền c11 từ ô số 5 sang ô số 9
Truyền a21 *b11 từ ô 2 sang ô 6 • Xử lý phân tán trên một số BXL độc lập
b22 7 8 9
c21
Truyền b12 từ ô 5 sang ô 6 • Chia sẻ với nhau một số tài nguyên, trong đó có hệ thống
Nhập theo cột
c11 Nhập a22 vào ô 3 và nhập b22 vào ô 7 bộ nhớ.
c22
• Mỗi BXL thao tác độc lập và có thể thực hiện đồng th i với
Nhịp 2: c12 Nhịp 4: nhau.
Truyền b11 từ ô số 1 sang ô số 2 Truyền a22 từ ô số 3 sang ô số 6
Truyền a11 từ ô 1 sang ô 4 và tính a11* b21
• Mỗi BXL có thể thực hiện một chương trình riêng.
Tính a22* b21
Truyền b11 từ ô 1 sang ô 2 và tính a12* b11 Truyền a21 *b11 từ ô 2 sang ô 6
Truyền b12 từ ô 4 sang ô 5 và a12 từ ô 2 sang Cộng dồn kết quả được cuyển từ ô 2:
ô 5 và tính a12* b21 . Tính c11=a12*b11+a12*b21 Sẽ cho c21=a21 *b11 + a22* b21
69 70
Nhận tiếp b12 vào ô 4 và a21 vào ô số 2 Chuyển c11 từ ô 9 ra và gán cho c11

1.4 Ki n trúc máy tính song song Cơu h i ch ng 1


1. Nêu đặc trưng cơ bản c a kiến trúc máy tính tuần tự c a VN
IS1 2. Các kiến trúc máy tính có thể được phân loại như thế nào?
CU 1
PE1
dựa vào những yếu tố nào để phân loại?
3. Một hệ thống như thế nào được gọi là máy tính song song?
4. Máy tính kiểu MIMD khác với mạng các máy tính như thế
CU 2 IS2 nào?
PE2 5. Nêu nguyên lý xử lý theo hình ống. Những bài toán có những
tính chất gì thì thích hợp với kiến trúc xử lý hình ống?
6. Cần bao nhiêu nhịp để thực hiện nhân hai ma trận 100  100
. . DS
. .
trên SAP có 100100 phần tử xử lý? Nếu sử dụng hệ
. .
10001000 PE thì hệ nào tốt hơn (nhanh hơn)?
CU n ISn 7. Một công việc được chia thành m công việc con, mỗi công
PEn việc con đòi hỏi một đơn vị th i gian để thưc hiện. Hỏi cần bao
nhiêu đơn vị th i gian để hệ hình ống gồm m-bộ xử lý tuyến
Kiến trúc MIMD tính (gồm m-pha thực hiện) thực hiện được nhiệm vụ cho
71 trước? 72

12
7/17/2010

CH NG 2. CỄC THÀNH PH N C A MT SONG SONG 2.1 B nh c a MTSS

M t s v n đ c n quan tơm trong ki n trúc MTSS


NỘI DUNG
 Sử dụng nhiều thanh ghi:
 sẽ làm giảm hiệu ng phụ c a các ngắt
2.1 B nh c a MTSS  Sử dụng không gian nhớ lớn:
 làm giảm hiệu ng phụ c a sự đổi chỗ khi thực hiện một
2.2 M ng k t n i các thƠnh ph n c a MTSS lệnh.
 tăng hiệu quả trao đổi dữ liệu c a hệ thống.
ng trình d ch vƠ h đi u hƠnh
 Xây dựng bộ lập lịch (Scheduling): nhằm cấp phát hữu hiệu
2.3 Ch

2.4 K t lu n từng nhiệm vụ đơn lẻ cho các BXL cho một cách động.
 Đồng bộ các BXL (Synchronization): điều khiển nhiều tiến trình
hoạt động đồng th i, cùng truy cập đến một số hữu hạn các tài
73 nguyên dùng chung, tránh được sự tắc nghẽn (deadlock) 74

2.1 B nh c a MTSS 2.1 B nh c a MTSS

M t s v n đ c n quan tơm trong ki n trúc MTSS (cont.) Bộ nhớ của MTSS đƣợc chia thành nhiều mức
Thiết kế cấu hình mạng: tập trung vào việc kết nối giữa BXL Bộ nhớ m c 1: m c cao nhất, có dung lượng nhỏ nhất, truy
với BXL, giữa BXL với bộ nhớ trong hệ thống. Cấu hình tôpô cập nhanh và đắt nhất, thư ng gắn chặt với mỗi BXL thành
c a mạng kết nối là vấn đề rất quan trọng trong thiết kế hệ bộ nhớ cục bộ (local memory-khác với bộ nhớ chia sẻ).
thống song song. Bộ nhớ m c 2: Truy cập chậm hơn và rẻ hơn m c 1, v.v.
 Phân đoạn( Partitioning): xác định m c độ song song trong
Về nguyên tắc, dữ liệu được chuyển đổi giữa các m c lân
các thuật toán để xác định được các luồng xử lý đồng th i. cận c a các bộ nhớ và hoàn toàn được điều khiển b i bộ nhớ
Sự phân đoạn có thể thể hiện nhiều m c khác nhau: m c m c 1.
lệnh, m c th tục, hoặc m c chương trình, v.v. Về lý thuyết, trong cấu trúc phân cấp bộ nhớ, tốc độ truy cập
bộ nhớ trung bình gần bằng tốc độ truy cập ở mức cao nhất
 Đảm bảo tin cậy (Reliability): nếu có một BXL nào đó không (mức 1), nhưng chi phí của các đơn vị nhớ trung bình lại gần
thực hiện được công việc đảm nhiệm thì một BXL khác sẽ với giá của bộ nhớ ở mức thấp nhất (mức n).
được thay thế để đảm bảo trong mọi tình huống công việc
chung vẫn được hoàn thành.
75 76

2.1 B nh c a MTSS 2.1 B nh c a MTSS


2.1.1 B nh k t h p (AM – Associative Memory)
BXL
AM bao gồm các ô nhớ (cell)
M i ô nh c a AM có 4 đ u vƠo vƠ hai đ u ra
Các đ u vƠo (input) c a m i ô nh bao g m: . Bit đ i s a,
. Bit đ c/ghi R/W xác đ nh thao tác t ng ứng c n th c hi n
Mức cao nhất B nh mức 1 Nhỏ, nhanh và đắt . Bit khoá k
. Bit l a ch n s đ xác đ nh ô nh thích h p cho vi c th c hi n đ c/ghi.
B nh mức 2
Hai k t qu đ u ra:
. Bit đ i sánh m ch ra d li u đ c l u trong b nh có đ i sánh đ c
v i bit đ i s a.
. Bit k t qu ra q. s
Select
q Output
Mức thấp nhất B nh mức n Key
Lớn, chậm và rẻ k

Argument a
Phân cấp hệ thống bộ nhớ
m Match
Read/Write
R/W
77 78

13
7/17/2010

2.1 B nh c a MTSS - C u trúc c a b nh k t h p 2.1 B nh c a MTSS

Input Input Ví dụ, tìm trong AM tất cả các từ có 8 bit cao nhất ch a giá trị
(1101 1100)2 và trả lại từ đầu tiên được tìm thấy.
Argument Register Mask Register • Giá trị (1101 1100)2 là đối số để tìm
Tags
Match • Thanh ghi đánh dấu (mask register) là 8 bit cao nhất. Quá
Register
trình tìm kiếm thực hiện như sau:
0 1 ... n-1
0
1. Từ cần tìm (1101 1100)2 được nạp vào thanh ghi đối số
1 Argument Register
.
. Array of memory locations 2. Đoạn mà chúng ta quan tâm là 8 bit cao nhất, những bit
.
m-1 này được đưa vào thanh ghi đánh dấu Mask Register để
đánh dấu.
3. Tất cả các từ trong bộ nhớ được so sánh song song với
Buffer Register
thanh ghi đối số.
Output 79 80

2.1 B nh c a MTSS 2.1 B nh c a MTSS

2.1.2 Mô hình b nh truy c p ng u nhiên song song Các ph ng thức truy c p b nh


Bộ nhớ PRAM gồm: •Concurrent Read (CR): nhiều BXL có thể đọc đồng th i cùng
một ô nhớ.
•m vùng bộ nhớ đủ lớn để chia sẻ cho p bộ xử lý.
•Exlusive Read (ER): p BXL đọc được p vùng nhớ khác nhau
•được sử dụng để lưu trữ dữ liệu và là vùng để trao đổi dữ liệu
và mỗi BXL đọc được duy nhất một vùng nhớ và mỗi vùng nhớ
giữa các BXL. được đọc b i một BXL.
•các BXL có thể truy cập vào bộ nhớ PRAM đồng thời và có thể
•Concurrent Write (CW): cùng một th i điểm cho phép nhiều
hoạt động một cách dị bộ. BXL ghi vào cùng một vùng nhớ.
Ví dụ, bộ xử lý Pi ghi dữ liệu vào một vùng nhớ và dữ liệu này có •Exlusive Write (EW): p BXL ghi được vào p vùng nhớ khác
thể được Pj truy cập, nghĩa là Pi và Pj có thể dùng bộ nhớ chung nhau. Mỗi BXL ghi được vào một vùng nhớ và mỗi vùng nhớ
để trao đổi với nhau. được ghi bới một BXL.

Mô hình loại này có các phương th c truy cập sau: Người ta phân CW thành các loại như sau:

81 82

2.1 B nh c a MTSS 2.1 B nh c a MTSS Share Memory

•Ghi đồng thời có ƣu tiên (Priority CW): các BXL được gắn m c ưu
2.1.2 B nh chia s (Share Memory)
tiên và khi có nhiều BXL muốn ghi dữ liệu vào một vùng nhớ thì ưu
Đặc tr ng:
tiên cho BXL có m c ưu tiên cao nhất. Các m c ưu tiên có thể gắn
tĩnh hoặc động theo những qui tắc được xác định khi thực hiện. • Dung lượng lớn
•Ghi đồng thời chung (Common CW): Khi các BXL ghi cùng một giá • Các BXL đều có thể truy cập vào SM
trị thì chúng được phép ghi vào cùng một vùng nhớ. Trong trư ng
hợp này, một BXL sẽ được chọn để ghi dữ liệu đó. • Các BXL có thể hoạt động độc lập nhưng luôn chia sẻ địa chỉ
•Ghi đồng thời tự do (Arbitrary CW): một số BXL muốn ghi dữ liệu các ô nhớ (không đọc độc quyền)
đồng th i vào một vùng nhớ, nhưng có một BXL được phép thay đổi
giá trị c a vùng nhớ đó. Trong trư ng hợp này, chúng ta phải chỉ ra • Những thay đổi nội dung ô nhớ được thực hiện bởi một BXL
cách để lựa chọn BXL thực hiện việc ghi. nào đó sẽ được nhìn thấy bởi các BXL khác.
•Ghi đồng thời ngẫu nhiên (Random CW): BXL được lựa chọn để
ghi dữ liệu là ngẫu nhiên. • Các máy tính sử dụng bộ nhớ chia sẻ được phân làm 2 loại:
•Ghi đồng thời tổ hợp (Combining CW): tất cả các dữ liệu mà các  UMA (Uniform Memory Access)
BXL định ghi đồng th i vào bộ nhớ được tổ hợp lại thành một giá trị.  NUMA (NonUniform Memory Access)
Giá trị này sẽ được ghi vào bộ nhớ đó. 83 84

14
7/17/2010

2.1 B nh c a MTSS 2.1 B nh c a MTSS

a. Mô hình UMA c a b nh chia s a. Mô hình UMA c a b nh chia s (tt)


Đặc đi m: • Nếu tất cả các BXL c a máy tính đều có th i gian truy cập đến
•Các BXL làm việc nh cơ chế chuyển mạch tập trung (central các thiết bị là như nhau thì gọi là máy tính đa bộ xử lý đối xứng
switching mechanism) để điều khiển việc truy cập tới bộ nhớ - Symmetric MultiProcessor (SMP) machines
chia sẻ. • Máy tính với kiến trúc UMA còn được gọi: CC-UMA - Cache
• Các BXL đều có thể truy cập đến bộ nhớ chia sẻ toàn cục Coherent UMA
(global shared memory)
C1 C2 Cn
•Th i gian truy cập vào bộ nhớ là như nhau đối với mọi BXL.
•Một BXL này có thể trao đổi thông tin với một BXL khác bằng
P1 P2 … Pn

cách ghi thông tin vào bộ nhớ toàn cục và BXL kia sẽ đọc dữ
Switching mechanism Pi Processor i
liệu tại cùng vị trí đó trong bộ nhớ.
I/O Memory banks Ci Cache i
85 86

2.1 B nh c a MTSS 2.1 B nh c a MTSS

a. Mô hình UMA c a b nh chia s (tt) b. Mô hình NUMA c a b nh chia s


Đặc đi m
• Bộ nhớ chia sẻ được phân tán và chia thành các mođun nhớ
độc lập.
• Bộ nhớ chia sẻ được phân tán cho tất cả các BXL thành bộ
nhớ cục bộ và tất cả các mođun nhớ sẽ là bộ nhớ chung cho
các BXL.
• Mô hình NUMA thư ng được tạo thành từ hai hoặc nhiều
SMPs nối với lại với nhau b i một đư ng truyền vật lý.
• Một SMP có thể truy cập trực tiếp đến một SMP khác
• Các BXL được phép truy cập đồng th i tới một hay nhiều mô
đun nhớ và có thể hoạt động độc lập với nhau.
• Không phải tất cả các BXL đều có th i gian truy cập đến các
bộ nhớ là như nhau. Truy cập bộ nhớ qua link sẽ chậm hơn
87 88

2.1 B nh c a MTSS 2.1 B nh c a MTSS


2.1.3. B nh phơn tán
b. Mô hình NUMA c a b nh chia s (tt)
P P Đặc đi m:
Mem Cache Mem Cache
• Có một đư ng kết nối giữa
các BXL
• Các BXL đều có bộ nhớ riêng.
Network
• Địa chỉ bộ nhớ c a một BXL nào đó không được biết b i BXL
khác. Do đó không có khái niệm không gian địa chỉ tổng thể
Mem Cache Mem Cache (global address space) qua các BXL khác.
• Vì BXL này không thể tự do đọc/ghi vào bộ nhớ c a một BXL
P P
khác nên khái niệm Cache coherent không áp dụng đây.
NUMA v i Distributed Memory • Khi cần thiết ngư i lập trình có nhiệm vụ chuyển dữ liệu từ ô
nhớ c a BXL này sang ô nhớ c a một BXL khác.
89 90

15
7/17/2010

2.1 B nh c a MTSS 2.1 B nh c a MTSS

2.1.3. B nh phơn tán 2.1.3. B nh đa máy tính Memory BXL Memory BXL

Đặc đi m:
Memory BXL Memory BXL

•Mỗi nút trong hệ thống đa máy tính cũng chính là một máy tính
có bộ nhớ riêng, không chia sẻ với những BXL khác.
• Các BXL trao đổi với nhau thông qua việc gửi và nhận các
thông điệp (messages)
•Không tồn tại bộ nhớ chia sẻ chung mà mỗi BXL có bộ nhớ cục
bộ riêng c a chúng.
•Việc trao đổi dữ liệu trong mạng theo mô hình point to point
thông qua sự liên kết tĩnh giữa các BXL.
91 92

2.1 B nh c a MTSS 2.1 B nh c a MTSS

2.1.4 Máy tính v i b nh lai (Hybrid Memory) 6. Máy tính v i b nh lai


• Kết hợp giữa kiến trúc chia sẻ bộ nhớ chung và bộ nhớ phân
tán.
• Hệ thống là nhiều cụm máy tính khác nhau. Mỗi cụm là các
máy tính với bộ nhớ có kiến trúc chia sẻ và có bộ nhớ toàn cục
riêng cho cụm đó.
• Các BXL trong một cụm chia sẻ bộ nhớ chung có thể truy cập
đến bộ nhớ toàn cục riêng c a cụm đó.
• Thành phần bộ nhớ phân tán được hiểu như là một cụm các
bộ nhớ toàn cục c a mỗi cụm.
• Các BXL chỉ có thể truy cập đến bộ nhớ toàn cục trong thành Hybrid Distributed-Shared Memory
phần chia sẻ bộ nhớ phân tán c a chúng, ch không truy cập
được bộ nhớ c a các thành phần chia sẻ bộ nhớ chung khác. 93 94

2.1 B nh c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

Tóm lại, M t vƠi nh n xét:


Hai điều cần phải quan tâm trong thiết kế bộ nhớ c a hệ thống
song song. Đó là, •Trong hầu hết các kiến trúc song song như: những hệ
•Băng thông (bandwidth): đư ng kết nối các BXL, bộ nhớ đa BXL chia sẻ bộ nhớ, đa bộ xử lý đa bộ nhớ , v.v. thì
•Độ trể bộ nhớ (memory latency), độ trễ bộ nhớ được hiểu như
vấn đề quan trọng nhất trong thiết kế là xác định sự kết
là khoảng th i gian từ khi BXL yêu cầu dữ liệu từ bộ nhớ đến khi
BXL nhận được dữ liệu tương ứng. nối giữa các BXL và bộ nhớ với nhau.
•Một kiến trúc lý tư ng là kiến trúc trong đó, mỗi BXL
Trong hệ thống máy tính song song băng thông phải đ rộng để
thực hiện việc truyền thông c a các BXL. đều kết nối được với các BXL còn lại. Khi đó nó tạo ra
một đồ thị đầy đ .
Khi các môđun nhớ được chia sẻ thì việc cạnh tranh sử dụng
•Ví dụ, nếu hệ có p BXL thì sẽ có p*(p – 1)/2 đư ng
không gian nhớ phải được cực tiểu hóa. Do đó, độ trể bộ nhớ
cũng phải được cực tiểu hóa. liên kết. Dễ nhận thấy kiến trúc loại này sẽ rất ph c
95
tạp, nhất là khi p đ lớn. 96

16
7/17/2010

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

2.2.1 Liên k t tuy n tính vƠ vòng (linear and ring)


•Có hai loại cấu hình tôpô cho mạng liên kết: liên kết a. Liên k t tuy n tính
tĩnh và liên kết động. Các BXL được liên kết với nhau theo dãy và được đánh số theo
th tự tăng dần
Mạng liên kết tĩnh là mạng các thành phần c a hệ
P0 P1 Pn-1
...
Nh n xét:
thống máy tính, trong đó các BXL, bộ nhớ được liên
•Trong mạng lên kết tuyến tính, trừ hai phần tử đầu và cuối, tất
kết với nhau một cách cố định, không thay đổi được. cả các BXL bên trong đều có hai láng giềng là BXL trước và sau
nó.
Mạng liên kết động là mạng các thành phần c a hệ •Đây là dạng liên kết đơn giản, nhưng dữ liệu cũng cần phải
thống máy tính, trong đó sự liên kết giữa các BXL, bộ chuyển qua nhiều BXL, do đó sự truyền thông dữ liệu giữa các
nhớ có thể thay đổi được. BXL, đặc biệt là giữa BXL đầu và cuối sẽ bị chậm lại khi số BXL
97
khá lớn. 98

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

2.2.1 Liên k t tuy n tính vƠ vòng 2.2.2 M ng liên k t xáo tr n hoƠn h o (Perfect Shuffle Exchange)
b. Liên k t vòng Giả sử có N BXL: P0, P1, …, PN-1, với N là lũy thừa c a 2.
Được tổ ch c tương tự như liên kết tuyến tính nhưng BXL đầu Trong mạng liên kết xáo trộn hoàn hảo, đường liên kết một
P2
và cuối được nối vòng với nhau P3
chiều từ Pi tới Pj được xác định như sau:
với 0  i  N/2 - 1
với N/2  i  N - 1
2i
P0 P4 j= {
2i+1-N
Nh n xét:
P6 P5

P6 P7
•Trong mạng liên kết vòng, sự trao đổi giữa các BXL có thể thực P0 P1 P2 P3 P4 P5

hiện theo một chiều, gọi là mạng đơn, hoặc theo cả hai chiều gọi
là mạng kép.
•Tất nhiên sự truyền thông trong mạng liên kết vòng, nhất là giữa
những BXL xa nhau thì cũng vẫn bị trễ. M ng liên k t xáo tr n hoƠn h o m t chi u v i N = 8=23,
trong đó s liên k t xáo tr n đ c kỦ hi u bằng mũi tên.
99 100

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

M t bi u di n khác c a m ng liên k t xáo tr n hoƠn h o 2.2.2 M ng liên k t xáo tr n hoƠn h o hai chi u

P000 P000

P001 P001 P4 P5 P6 P7
P0 P1 P2 P3

P010 P010

P011 P011

P100 P100
M ng liên k t xáo tr n hoƠn h o hai chi u v i N = 8,
P101 P101 trong đó s liên k t xáo tr n đ c kỦ hi u bằng mũi tên hai chi u.

P110 P110

P111 P111

101 102

17
7/17/2010

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

2.2.3 M ng liên k t l i hai chi u (two-dimentional mesh) 2.2.4 M ng liên k t siêu kh i hoặc hình kh i n-chi u
Đặc điểm: Giả sử có n bộ xử lý: P0, P1, …, Pn-1, với n = 2q, q  0. Nếu mỗi
Mỗi BXL được liên kết với bốn láng giềng: trên, dưới, bên trái và BXL cần liên kết với đúng q bộ xử lý lân cận thì có thể dùng
bên phải. mạng liên kết theo hình siêu khối n chiều.
Mạng liên kết lưới hai chiều được sử dụng để thiết kế các máy Trong mạng liên kết hình khối các chỉ số c a các BXL được
tính ILLIAC IV, MPP (Massively Parallel Processor), DAP (ICL đánh nhị phân, hai BXL được gọi là láng giềng với nhau nếu
Distributed Array Processor), v.v. nhãn chỉ số của chúng sai khác nhau đúng một bit.
Có hai dạng liên kết lưới: P110
6 P111
7

2 P010 3 P011

P100 4 5
P101
0 1
P000 P001
(a) L i không quay vòng (b) L i quay vòng
103 104
M ng liên k t hình kh i v i n=8 (q=3)

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

2.2.5 M ng liên k t hình sao (star)


6 7
• Ký hiệu là Sn
• Có n! bộ xử lý
• Nhãn c a mỗi BXL sẽ tương ng với một hoán vị c a n ký hiệu.
• BXL Pi được kết nối với BXL Pj  j nhận được từ i bằng cách
2 3

4 5 thay ký hiệu th k c a hoán vị n phần tử 1,..., n, với 2kn.


6 7
0 1
Ví dụ, trong S4 (n = 4) có 4! = 24 BXL. P1234
2 3 Hai BXL P2134 và P3124 là có liên kết với
P3214 P2134
5 = 0101 nhau vì 3124 nhận được từ 2134 bằng
4 5
1 = 0001 cách đổi chỗ vị trí đầu (số 2) với vị trí
P2314 P3124
0 1 th ba (số 3). Tương tự suy ra P2134 và
4 = 0100
P4132 là có liên kết với nhau. P1324
13 = 1101
M ng liên k t hình kh i v i n=16 (q=4)
105 106

M ng liên k t hình sao v i 24 b x lỦ 2.2 M ng k t n i các thƠnh ph n c a MTSS

P1234 P4231 2.2.5 M ng liên k t Butterfly


P3214 P2134 P3241 P2431 •(k+1)2k nút được chia thành (k+1) ranks, mỗi rank chứa n=2k nút.

P2341 P3421
•Các ranks được đánh số từ 0 đến k
P2314 P3124
•Ký hiệu Node(i,j): nút thứ j trên rank thứ i
P1324 P4321
•Node(i,j) được nối với 2 nút trên rank i-1: node(i-1,j) và node (i-1,m), ở

P3412 P2413 đây m là số nguyên có được bằng cách đảo bit thứ i trong xâu nhị

P4213 P1423
phân biểu diễn j
P4312 P1432
•Nếu node(i,j) được nối đến node(i-1,m), thì node (i,m) được nối với
P1342 P4132 P1243 P4123
node(i-1,j)
P3142 P2143
107 108

18
7/17/2010

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

2.2.5 M ng liên k t Butterfly (tt) 2.2.6 M ng liên k t Pyramid


0 1 2 3 4 5 6 7 • Một tháp chiều cao d gồm (4d+1-1)/3 Level 2
Rank 0 BXL được phân tán trong d+1 mức có
các tính chất sau:
 Có 4d-2 BXL ở mức d.
Node(1,5): i=1, j=5
 Có 4d-1 BXL ở mức d-1, và
j = 5 = 101 (binary)
i=1  Có 4d BXL ở mức d-2
Rank 1 001 = 1 • Chỉ có 01 BXL ở mức d Level 1

Node(1,5) được nối với • Đối với mức x:


Rank 2
node(0,5) và node(0,1)  Được nối với 04 nút láng giềng ở
cũng một mức nếu x<d
Rank 3  Được nối với 04 nút con ở mức x-
1 nếu x1 Level 0
Mạng liên kết Butterfly với 4 ranks và 32 BXL  Được nối với 04 nút con ở mức M ng liên k t Pyramid
109 x+1 nếu x≤d-1 Có d=2 và (42+1-1)/3 =21 BXL 110

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

2.2.7 M ng liên k t nh phơn (binary tree) 2.2.8 M ng Hypertree


• Chiều cao của cây gồm k mức, được đánh số từ 0 đến k-1 Đặc điểm:
• Mỗi BXL là một node của cây, có N=2k-1 nodes
• Mỗi BXL ở mức i được nối với nút cha ở mức i+1 và 2 nút • d là chiều cao cây được đánh số từ 0 đến d-1 với 4d nút lá
con ở mức i-1 • Có 2d(2d-1-1) nodes
• Nhìn từ phía trước mạng như một cây có chiều cao d
Level 3 • Nhìn từ phía bên mạng như một cây nhị phân đảo ngược có
chiều cao d
Level 2

Level 1

Level 0

Mạng nhị phân có chiều cao k=4, số node N= 24-1=15 Front view Side view
111

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

2.2.8 M ng Hypertree 2.2.9 M ng liên k t De Bruijn


Gồm N = dk BXL
Chỉ số mỗi BXL biểu diễn với k chữ số (ak-1ak-2…aj…a1a0), với
aj  {0, 1,…d-1} , j = 0, 1,…, k-1.
số bộ xử lý có thể đạt được b i (ak-1ak-2…a1a0) là
Front view Side view (ak-2ak-3…a0q) và (qak-1ak-2…a2a1), q = 0, 1,…, d-1.

P001 P011

P000 P010 P101 P111

P100 P110

Ví dụ một mạng De Bruijn với d = 2, và k = 3, N = 2 3 , có ba


M ng hypertree b c 4, chi u cao 2
chữ số a2, a1, a0 114

19
7/17/2010

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.2 M ng k t n i các thƠnh ph n c a MTSS

2.2.10 M ng liên k t Delta 2.2.10 M ng liên k t Delta


• Có k tầng. tầng 1 tầng 2 tầng 3
• Mỗi tầng gồm các thanh chéo có m input và n output. tổng M0 P0
cộng m*n thanh chéo. M1 P1
• Mạng bao gồm mk input và nk output; do đó nó mạng có M2 P2
mk*nk chuyển mạch.
M3 P3
• Các kết nối chuyển mạch cho phép tạo một đư ng dẫn
P4
chính xác từ các input đến các output. M4
P5
• Nếu A là địa chỉ đích c a một kết nối mong muốn trên cơ s M5
c a n, thì các số c a A biểu diển các thanh chéo đặt ra để M6 P6
thiết lập kết nối theo dư kiến đó. P7
M7
m ng delta 3 t ng, có 23*23 đ ng k t n i, dùng 2*2 thanh chéo.
M i t ng có 23 input vƠ 23 output.
115 116

2.2 M ng k t n i các thƠnh ph n c a MTSS 2.4 K t lu n

2.2.8 M t s m ng k t n i khác Vấn đề trọng tâm của chƣơng 2


1. Tìm hiểu các tài nguyên và mối quan hệ c a chúng trong hệ
thống để tận dụng được hết khả năng xử lý song song.
Tham khảo: 2. Các bộ nhớ được tổ ch c thành bộ nhớ kết hợp, bộ nhớ truy
[6] M. Sasikumar, Dinesh Shikhare, P. Ravi Prakash, Introduction to Parallel cập ngẫu nhiên, bộ nhớ chia sẻ, v.v. là các mô hình chính cho
Processing, Prentice ậ Hall. 2002 việc thiết kế bộ nhớ MTSS.
[7] Seyed H. Roosta, Parallel Processing and Parallel Algorithms, Theory and
Computation, Springer, 2006.
3. Vấn đề quan trọng trong thiết kế kiến trúc c a MTSS là xác
[8] Michael J. Quinn, Parallel Computing Theory and Practice, MaGraw-Hill, định cách đề kết nối các bộ xử lý với nhau sao cho hiệu quả
2004 nhất.
4. Các bộ xử lý có thể kết nối theo mạng liên kết tĩnh hoặc liên
kết động.
5. Khảo sát một số cấu hình tôpô c a mạng liên kết các bộ xử
lý như: liên kết tuyến tính, liên kết xáo trộn, liên kết lưới, liên
kết hình sao và liên kết hình khối...
117 118

2.3 Ch ng trình d ch vƠ các h đi u hƠnh Ti u lu n

Cơu h i cu i ch ng 1. Kiến trúc kết nối mạng


1. Nêu những vấn đề cần quan tâm khi thiết kế kiến trúc máy De Bruijn, Mạng cây nhị phân, Mạng Delta, Mạng Butterfly,
tính song song Mạng Omega, Mạng Pyramid ([7] Seyed H. Roosta, Parallel Processing
2. Bộ nhớ kết hợp là gì? nêu nguyên lý họat động c a bộ nhớ and Parallel Algorithms, Theory and Computation, Springer, page 72-80)
kết hợp.
3. Tại sao mạng liên kết lại đóng vai trò quan trọng trong kiến 2. Chương trình dịch song song ([7] Seyed H. Roosta, Parallel
trúc MTSS? Processing and Parallel Algorithms, Theory and Computation,
4. Dựa vào định nghĩa chung c a mạng liên kết hình khối để xây Springer, page 83-90)
dựng cấu trúc tôpô cho mạng liên kết hình khối cho 16 bộ xử
lý. 3. Hệ điều hành đa xử lý ([7] Seyed H. Roosta, Parallel Processing and
5. Nêu những đặc trưng cơ bản c a chương trình dịch song Parallel Algorithms, Theory and Computation, Springer, page 91-100)
song?
6. Nếu mục đích chính c a hệ điều hành cho máy tính song 4. Tìm hiểu hệ điều hành Linus-Windows (liên quan đến đa luồng đa
song? tiến trình)
7. Xây dựng mạng liên kết theo mô hình xáo trộn hoàn hảo cho
16 phần tử. 119 120

20
7/17/2010

CH NG 3. GI I THI U V L P TRỊNH SONG SONG 3.1 Gi i thi u chung

S khác nhau c b n gi a LT tu n t vƠ LT song song


NỘI DUNG
Trong môi trường lập trình tuần tự:
1. Nh ng khái ni m c s c a l p trình song song
•Các câu lệnh được thực hiện tuần tự.

2. Các ngôn ng l p trình song song •Mỗi chương trình thực hiện sẽ tạo ra những tiến trình bên

trong hệ thống mà ngư i lập trình không quan sát được.


3. Các lo i ph thu c d li u trong ch ng trình
•Mỗi câu lệnh thực hiện không gây tr ngại cho các câu lệnh
4. Ph ng pháp bi n đ i ch ng trình tu n t khác trong chương trình.
sang ch ng trình song song

121 122

3.1 Gi i thi u chung 3.1 Gi i thi u chung

Trong môi trường song song: V n đ quan tr ng trong LTSS lƠ ph i t n d ng đ c kh


•Các câu lệnh c a chương trình có thể thực hiện đan xen lẫn năng c a các b x lỦ.
nhau. Có hai cách tiếp cận để tận dụng khai thác các bộ xử lý:
• cùng một th i điểm có thể có nhiều hơn một lệnh được 1. Phát triển những ngôn ngữ lập trình cho phép thể hiện
thực hiện, nghĩa là mỗi chương trình sẽ tự ch thực hiện các
được việc thực hiện song song m c thuật toán, ví dụ như
tiến trình c a mình.
•Các chương trình phải tương tác với nhau và việc thực hiện Fortran, C, v.v.
c a chúng ảnh hư ng tới nhịp độ thực hiện c a nhau. 2. Xây dựng những chương trình dịch đ mạnh để nhận
•Trong LTSS, ngư i lập trình không chỉ viết chương trình, dữ
dạng được các phân đoạn chương trình có thể thực hiện
liệu như trong môi trư ng tuần tự mà còn phải sử dụng các
công cụ để đồng bộ hoá (synchronize) và điều khiển sự tương song song hay tuần tự.
tác giữa các tiến trình. Hai cách tiếp cận trên là bổ sung cho nhau, nếu chỉ áp dụng
•Ngư i lập trình cần tạo ra và lập lịch cho các tiến trình, nghĩa một cách thì không hiệu quả.
là sự thực hiện chương trình có thể nhìn thấy được b i ngư i
lập trình. 123 124

3.1 Gi i thi u chung 3.2 Các ngôn ng l p trình song song

Một số phương pháp tiếp cận trong lập trình song song: Các yêu c u đ i v i m t NNLT song song
NgoƠi các yêu c u đ i v i m t NNLT tu n t , m t NNLT song song
• Lập trình song song kiểu SIMD với bộ nhớ chia sẻ, trong đó
c n ph i có các chức năng sau:
truy cập bộ nhớ là đồng bộ (Synchronous).
• Lập trình song song kiểu MIMD với bộ nhớ chia sẻ, trong 1. Cung cấp cho ngư i lập trình những cơ chế để kh i tạo,
đó truy cập bộ nhớ là dị bộ (Asynchronous). đồng bộ và trao đổi giữa các tiến trình.
• Lập trình song song kiểu MIMD với bộ nhớ phân tán, trong
đó truy cập bộ nhớ là dị bộ. 2. Tạo ra được những chương trình độc lập với máy tính
• Lập trình song song kiểu SPMD với bộ nhớ chia sẻ, trong 3. Phải hỗ trợ để tạo ra được những chương trình dễ đọc, dễ
đó truy cập bộ nhớ là dị bộ.
• Lập trình song song kiểu SPMD với bộ nhớ phân tán, trong viết, dễ chuyển đổi, v.v.
đó truy cập bộ nhớ là dị bộ. 4. Mô hình hoá được việc thực hiện song song.
• Lập trình song song kiểu MPMD với bộ nhớ chia sẻ, trong
đó truy cập bộ nhớ là dị bộ. 5. Có khả năng điều chỉnh các tình huống mà đó các tiến

125
trình đòi hỏi phải trao đổi, tương tác với nhau. 126

21
7/17/2010

3.2 Các ngôn ng l p trình song song 3.2 Các ngôn ng l p trình song song

Các tình hu ng th ng gặp trong LT song song


1. Tại một thời điểm có một số tiến trình muốn truy cập vào một
1. Tất cả các tiến trình phải sử dụng cấu trúc dữ liệu
tài nguyên chung hoặc cập nhật vào một biến chia sẻ. Mà
chung để tiện trong việc cập nhật và trao đổi với
những tài nguyên đó chỉ cho phép một tiến trình truy cập tại
nhau.
mỗi th i điểm.
2. Khi một tiến trình được quyền truy cập vào tài nguyên chung 2. Tất cả các tiến trình thực hiện sự đồng bộ bằng
thì nó sử dụng tài nguyên đó nhưng không được ngăn cản cách sử dụng hai hàm wait() và pass(). Khi trao đổi
hoạt động c a những tiến trình khác. với nhau, một tiến trình ch để nhận được một tín
3. Khi một số tiến trình cùng kết hợp để thực hiện một số phép hiệu c a tiến trình đối tác và khi nhận được thì hai
toán trên cơ sở quan sát hành động của nhau thì ngư i lập tiến trình đó trao đổi trực tiếp với nhau.
trình phải lập lịch cho những tiến trình đó.

Có hai cách để giải quyết các tình huống trên: 127 128

3.2 Các ngôn ng l p trình song song 3.2 Các ngôn ng l p trình song song

3.2.1 Ví d minh h a
Tổng quát, có hai cách phát triển NNLT song song: a. Cài đặt song song trên kiến trúc UMA với 4 BXL:

1. M rộng những ngôn ngữ lập trình tuần tự hiện có, BXL1 BXL2 BXL3 BXL4

bổ sung thêm những cấu trúc mới để thực hiện


được song song và giải quyết được sự xung đột Switching mechanism
... ...
trong truy cập dữ liệu.
Memory I/O Devices

2. Xây dựng một ngôn ngữ lập trình song song mới.
BƠi toán: Xác định phương sai (variance) c a một mẫu được

(r  m) 2
cho b i một danh sách các số thực r 1, r2, ...., rn . Nghĩa là phải

 m  1
tính:
n i
r
n i
1 trong đó
129 n n 130

m  1
(ri  m) 2

r
3.2 Các ngôn ng l p trình song song
n n i
1
n=12; (ri)=(4,2,1,3,3,2,2,4,5,1,4,5)
n n
Shared memory (a): M i ti n trình c ng 3
CƠi đặt song song: Process 1 giá tr đ c phơn chia
Values Temporary 7
Các số thực ri được lưu trữ trong bộ nhớ chia sẻ. vƠ l u vƠo bi n t m th i
4 2 1 3 3 2 2 4 5 1 4 5
Process 2
8 c a nó. Sau khi các ti n
Temporary

 1 ri
trình đƣ th c hi n xong
Bốn biến sau đây cũng được tạo ra trong bộ nhớ chia sẻ: Sum of Process 3
vi c tính các t ng con,
Temporary 11
Sum Mean Squares Variance s có m t ti n trình

• Mean (lưu giá trị trung bình): m  


n
• Sum (lưu tổng giá trị): S 36 0
Process 4
Temporary 10 c ng d n các giá tr nƠy
r l i vƠ l u vƠo bi n Sum

SS  1 (ri  m) 2
n i
b nh chia s .
1
n n Shared memory

SS 1 (ri  m)
• Sum of square (lưu tổng bình phương) Values
Process 1
Temporary 7


n 2 4 2 1 3 3 2 2 4 5 1 4 5 Process 2
8 (b): M t ti n trình đ n s
Temporary
tính giá tr trung bình vƠ
• Variance (lưu giá trị phương sai) Sum of Process 3
11
n n Sum Mean Squares Variance Temporary l u vƠo bi n b nh
Process 4
36 3 0 Temporary 10 chia s Mean.

Quá trình thực hiện song song được mô tả như sau: 131 132

22
7/17/2010

( ri  m) 2
 m 
n ri
3.2 Các ngôn ng l p trình song song
n
1 1
n=12; (ri)=(4,2,1,3,3,2,2,4,5,1,4,5)
n n
Shared memory 3.2.1 Ví d minh h a (ti p)
(c): M i ti n trình ph i xác
b. Cài đặt song song trên NUMA với kiến trúc siêu khối 4 BXL:
Process 1
Values Temporary 6
đ nh:(xi-Mean)2, ∑(xi-Mean)2
4 2 1 3 3 2 2 4 5 1 4 5 Process 2 BƠi toán: Xác định phương sai (variance) c a một mẫu được
Temporary 1 l u vƠo bi n t m th i vƠ

n ( ri  m)
 n
Sum of Process 3 cu i cùng c ng d n đ l u cho b i một danh sách các số thực r1, r2, ...., rn . Nghĩa là phải

m
Temporary 6
Sum Mean Squares Variance
Process 4
vƠo bi n c a b nh chia tính: 2
n ri
36 3 22 Temporary 9
s . trong đó
1 1
n
Shared memory
CƠi đặt song song
Process 1
Values Temporary 6 •Kiến trúc này không có bộ nhớ chia sẻ chung; n giá trị r1, r2,
4 2 1 3 3 2 2 4 5 1 4 5 Process 2
Temporary 1
(d): M t ti n trình đ n xác ...., rn được phân phối các bộ nhớ cục bộ c a mỗi BXL.
Sum of Process 3
đ nh variance bằng cách •Mỗi nút có 4 biến: 2 biến để lưu trữ các giá trị cộng dồn là
Sum Mean Squares Variance Temporary 6 chia giá tr c a Sum of Sum và Sum of Squares; một biến để lưu giá trị trung bình
Squares cho 12.
36 3 22 1.83
Process 4
Temporary 9 Mean và biến còn lại để lưu trữ giá trị phương sai variance.
•Quá trình tiếp tục thực hiện được mô tả như hình dưới đây.
133 134

m  1
( ri  m) 2

n
r
n i
3.2 Các ngôn ng l p trình song song n=12; (ri)=(4,2,1,3,3,2,2,4,5,1,4,5)
1
n n
P P Values Values Values Values
Mem Cache Mem Cache
Nh c l i, 4 2 1 3 3 2 4 2 1 3 3 2

Sum1 7 Sum1 8 Sum1 36 Sum1 36


Network
Mean Mean Mean 3 Mean 3

Mem Cache Mem Cache Sum2 Sum2 Sum2 Sum2


P P Variance Variance Variance Variance

NUMA v i Distributed Memory


Đặc đi m c a NUMA: Values Values Values Values
2 4 5 1 4 5 2 4 5 1 4 5
•Có một đư ng kết nối các BXL lại với nhau. 11
Sum1 Sum1 10 Sum1 36 Sum1 36
•Bộ nhớ chia sẻ được phân tán cho tất cả các BXL thành bộ Mean Mean Mean 3 Mean 3

nhớ cục bộ và tất cả các mođun nhớ sẽ là bộ nhớ chung cho Sum2 Sum2 Sum2 Sum2
Variance Variance Variance Variance
các BXL. (a): (b):
•Các BXL được phép truy cập đồng th i tới một hay nhiều mô
(b):Các BXL th c hi n hoán đ i vƠ
đun nhớ và có thể hoạt động độc lập với nhau. (a):Các ti n trình tính t ng các giá tr c ng d n, sau đó cùng chia cho 12
135 t i m i nút. đ xác đ nh Mean. 136

m  1
( ri  m) 2

n
r
n i
n=12; (ri)=(4,2,1,3,3,2,2,4,5,1,4,5) 3.2 Các ngôn ng l p trình song song
1
n n
Values Values Values Values
4 2 1 3 3 2 4 2 1 3 3 2
Gi i thi u m t s s ngôn ng l p trình song song
Sum1 36 Sum1 36 Sum1 36 Sum1 36 3.2.2 Fortran 90
• Fortran 90 là ngôn ngữ lập trình chuẩn ANSI.
Mean 3 Mean 3 Mean 3 Mean 3
Sum2 6 Sum2 1 Sum2 22 Sum2 22
Variance Variance Variance 1.83 Variance 1.83 • Fortran 90 là ngôn ngữ lập trình song song theo dữ liệu
được nâng cấp từ Fortran 77 bằng cách bổ sung thêm một
Values Values Values Values
2 4 5 1 4 5 2 4 5 1 4 5
số đặc tính như:
Sum1 36 Sum1 36 Sum1 36 Sum1 36 • Kiểu dữ liệu do User định nghĩa
3
• Phép toán về Array, con trỏ
Mean Mean 3 Mean 3 Mean 3
Sum2 6 Sum2 9 Sum2 22 Sum2 22
Variance Variance Variance 1.83 Variance 1.83 • Các BXL hỗ trợ việc sử dụng các kiểu dữ liệu Short
(c): (d):
Integer, Packed logical,...
(c) M i ti n trình, v i các giá tr (d) Các BXL th c hi n hoán đ i • Cấp phát bộ nhớ động.
riêng hi n có t i nút c a mình s vƠ c ng d n, sau đó cùng chia
th c hi n tính ∑(xi-Mean)2 vƠ l u cho 12 đ xác đ nh Variance. 137 138
vao bi n Sum2.

23
7/17/2010

3.2 Các ngôn ng l p trình song song 3.2 Các ngôn ng l p trình song song - Fortran 90

Ngư i lập trình Fortran 90 dựa vào mô hình song song tương Fortran 90 có các kiểu dữ liệu chuẩn:
REAL, INTEGER, CHARACTER, LOGICAL, v.v.
tự như PRAM gồm có những thành phần: Dạng khai báo tổng quát:
 Một CU (đơn vị điều khiển) Type [(kind)] [, attribute] … :: Variable-List
 Một đơn vị xử lý logic, số học ALU
Trong đó,
• Type là kiểu cơ sở hoặc kiểu được định nghĩa bởi NSD
 Bộ nhớ chia sẻ. • kind là phần tuỳ chọn cùng một số kiểu được sử dụng để
 Một tập các BXL định nghĩa về kiểu cụ thể
Ví dụ: CHARACTER (LEN = 10) :: s1
• CPU thực hiện các câu lệnh tuần tự bằng cách truy cập vào Định nghĩa biến s1 kiểu CHARACTER có thể chứa 10 ký tự.
các biến được lưu trữ trong bộ nhớ chia sẻ. • [, attribute] là danh sách các thuộc tính của Fortran được sử
dụng để định nghĩa các đặc tính riêng của danh sách các
• Đơn vị vector lưu trữ, đọc, ghi dữ liệu vào bộ nhớ chia sẻ và
biến.
được CPU điều khiển để thực hiện song song. + :: phần tử phân cách giữa phần mô tả kiểu và danh sách các
biến.
139
• Variable-List: danh sách các biến 140

3.2 Các ngôn ng l p trình song song - Fortran 90 3.2 Các ngôn ng l p trình song song - Fortran 90

Ví dụ về khai báo về mảng: C u trúc ch ng trình Fortran


INTEGER, DIMENSION (1 : 10) :: SA
{Biến mảng SA có 10 phần tử kiểu số nguyên.} PROGRAM <tên chương trình>
+ Khai báo một hằng mảng:
(/ 2,4,6,8,10 /) hoặc (/ (I, I = 2, 10, 2) /) IMPLICIT NONE
+ Fortran 90 cho phép áp dụng các phép toán số học cho các [phần đặc tả]
biến mảng, nghĩa là toán hạng của các phép toán số học (+,
-, *, /) có thể là biến đơn hoặc biến mảng. [phần thực hiện]
Ví dụ về phép toán trên biến mảng: [phần chương trình con]
INTEGER A(10), B(10), C
DO I = 1, 10, 1 END PROGRAM <tên chương trình>
A(I) = B(I) + C
END DO
Ta có thể viết ngắn gọn hơn.
A= B + C
141 142

3.2 Các ngôn ng l p trình song song - Fortran 90 Ví dụ: tính số  từ công thức bằng NNLT Fortran 90
.

1. INTEGER, PARAMETER :: N = 131000


2. INTEGER, PARAMETER :: LONG =SELECTED_REAL_KIND(13,99)
3. REAL(KIND=LONG) PI, WIDTH
4. INTEGER, DIMENSION(N)::id khai báo tham s N lƠ
s các đo n con t i đa
5. REAL(KIND=LONG), DIMENSION(N)::X, Y đ tính tích phơn
khai báo tham s LONG đ s
6. WIDTH = 1.0_LONG/N d ng cho các bi n s th c v i
Khai báo bi n m ng id có
7. ID = (/(I,I = 1, N)/) ph n tĩnh có ít nh t 13 ch s
N phxác
đ n t đ nh
ki u s nguyên
vƠ ph đn rđ ng ng c (mũ)
a m i thu c
8. X = (ID – 0.5)* WIDTH kho ngkhocon.ngBi [10
n -99
m ,10
ng99].
ID gCác
m bi n
N ph thn t c nƠy
khaiđbáoc khai dòngbáo4, dòng
9. Y = 4.0 / (1.0 + X * X) đ c kh3 vƠi 5t o dòng 7
tính toán song song đi m gi a
10.PI = SUM(Y) * WIDTH c a m i kho ng con
tính toán song song giá tr hƠm
11.10 FORMAT(„PI = „, F14.12) t ng ứng t i các đi m gi a X
12.PRINT 10, PI
Xơy d ng m t ch ng trình FORTRAN g i hƠm tính t ng SUM
13.END
143 144

24
7/17/2010

3.2 Các ngôn ng l p trình song song - OCCAM

Tiểu luận: Fortran 90 Tutorial (02 học viên) 3.2.3 L p trình song song v i OCCAM
Giới thiệu về OCCAM:
Professor Dr.Shene • NNLT song song được Inmos Company (Anh) phát triển
năm 1988,
Department of Computer Science • Mục đích chính là để thiết kế và cài đặt các chip được gọi là
Michigan Technological University transputer.
• Chương trình Occam thư ng nhiều tiến trình và chúng có
www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/fortran.html thể được ánh xạ sang một số các transputer bất kỳ để thực
http://www.fortran-2000.com/ hiện song song và trao đổi dữ liệu với nhau thông qua các
kênh vào/ra.
• Occam là NNLT 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.
• Trong Occam, các hành động có thể thực hiện song song
được gọi là tiến trình và mỗi câu lệnh cần phải khai báo như
145
một tiến trình. 146

Mô phỏng mô hình lập trình trong Occam 3.2 Các ngôn ng l p trình song song - Occam

Các tiến trình trong Occam


E Có ba tiến trình nguyên thuỷ trong Occam:
D • Tiến trình gán: thay đổi giá trị c a các biến
C • Tiến trình Input: nhận dữ liệu vào từ các kênh vào (c ng vƠo)
B • Tiến trình Output: gửi dữ liệu ra các kênh ra.
A
A: Các ti n trình th c Cấu trúc ngôn ngữ
hi n tu n t
• Tiến trình gán:
B: Các ti n trình th c
hi n song song sum := partion1 + partion2
C: Các ti n trình th c /*g n gtr cho bi n sum lƠ t ng hai gtr partion1vƠ partion2 */
hi n tu n t • Tiến trình Input: user1 ? x
D: Các ti n trình th c /*gán giá tr t kênh user1 cho x */
hi n song song
• Tiến trình Output: C!x*x
E: Các ti n trình th c
/*g i giá tr x2 ra kênh C */
hi n tu n t 147 148

3.2 Các ngôn ng l p trình song song - Occam 3.2 Các ngôn ng l p trình song song - Occam

Các c u trúc đi u khi n Các c u trúc đi u khi n (cont.)


SEQ: cấu trúc tuần tự, các thành phần trong tiến trình này PAR: cấu trúc song song, các thành phần c a tiến trình này
được thực hiện theo th tự và tiến trình này kết thúc khi được thực hiện đồng th i và tiến trình này sẽ kết thúc khi tất
thành phần cuối cùng thực hiện xong. Mỗi thành phần c a cả các thành phần c a nó đều kết thúc.
tiến trình này có thể là một tiến trình song song. Ví dụ:
Ví dụ: SEQ
SEQ Các số nguyên được nhập
PAR
Các số nguyên được
channel1 ? partial1 vào tuần tự từ 2 kênh khác channel1 ? partial1
nhập vào song song từ 2
channel2 ? partial2 nhau sau đó cộng lại và channel2 ? partial2 kênh khác nhau sau đó
chuyển sang kênh 3 sum:= partial1 + partial2 cộng lại
sum:= partial1 + partial2
partial3 ! Sum

149 150

25
7/17/2010

3.2 Các ngôn ng l p trình song song - Occam 3.2 Các ngôn ng l p trình song song - Occam

Các c u trúc đi u khi n (cont.) Các c u trúc khác


1. Cấu trúc điều khiển IF, gọi là tiến trình điều kiện để chọn một
ALT: cấu trúc tuyển chọn, chọn một trong các thành phần c a
tiến trình để thực hiện nếu nó thoả mãn điều kiện lựa chọn tiến trình thành phần khi biểu th c Boolean có giá trị true;
và tiến trình này kết thúc khi thành phần được lựa chọn kết 2. Cấu trúc lặp WHILE, gọi là tiến trình lặp để thực hiện lặp lại
thúc. (xem ví dụ tính tích phân)
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.
3. Cấu trúc lặp FOR, gọi là tiến trình lặp có số vòng lặp xác
định trước, i = [0 FOR n]
Ví dụ: PAR i = [0 FOR 9]: tạo ra 10 tiến trình song song, i
nhận giá trị từ 0 đến 9
151 152

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. 3.2 Các ngôn ng l p trình song song - Occam
CHAN In1, In2:
CHAN Out1, Out2: S trao đ i gi a các ti n trình
VAR Sum1, Sum2:
SEQ &các l nh d i đơy th c hi n tu n t • Trong ví dụ trên, các tiến trình không cần trao đổi với nhau vì
Sum1 := 0 &gán giá tr đ u cho Sum1 vƠ Sum2 mỗi tiến trình đều sử dụng các biến cục bộ c a riêng nó.
Sum2 := 0
PAR &b t đ u th c hi n song song • Tuy nhiên, khi có nhiều tiến trình muốn trao đổi dữ liệu với
-- Ti n trình thứ nh t
While TRUE nhau thì phải trao đổi trên cùng một kênh truyền dữ liệu.
VAR Item1:
SEQ Nghĩa là, một tiến trình gửi dữ liệu ra một kênh truyền và
In1 ? Item1 &gán giá tr kênh In1 cho Item1
Sum1 := Sum1 + Item1
Out1 ! Item1
tiến trình kia nhận dữ liệu từ kênh đó.
-- Ti n trình thứ hai • Trong Occam, mỗi tiến trình thực hiện trên một bộ xử lý và
While TRUE
VAR Item1:
SEQ truyền thông điệp (Passed-Message) tới những bộ xử lý lân
In2 ? Item2
Sum2 := Sum2 + Item2 cận theo kiến trúc hình khối.
Out2 ! Item2
153 154

Ví dụ: tính số  từ công thức bằng NNLT Occam Ví dụ: tính số  từ công thức bằng NNLT Occam
1. DEF N = 400000: T dòng 1-3: 16. localsum := localsum * width T dòng 18-31: lƠ ti n
đ nh nghĩa các hằng:
2. DEF PROCESS = 8: • N lƠ s kho ng chia; 17. sum[i] ! localsum trình cu i cùng, đ xác
Dòng 4: đ nh nghĩa lƠ sm tit n đ nh t ng sau cùng vƠ
3. DEF CHUNK = N / PROCESS: • PROCESSES 18. REAL64 pi : chuy n cho ti n trình
T kênh 5-31:smlƠđi nh
dòng trình
cho ti cntngo;
trình.
ti n
4. CHAN sum[PROCESS] trìnhTi song
•n trình
CHUNKs s lƠ
song d sng
vƠ kênh
tu kho
n t ng , 19. INT got [PROCESS] : output đ in k t qu pi
5. PAR g mnƠycóđ cho g imd i li
(PROCESS+1) ti u n ctrình
a tinó(đ
n 20. SEQ
M ichti nra
(subtotal)
trình. ng titrình
trình n trìnhth c
trong bênhi n
các
6. PAR i = [0 FOR PROCESS] ti n ngoƠi
trình chính
(grand
th c hi xác
total) nên ch
n song songn N 21. pi := 0.0
7. REAL64x, localsum, width: t dòng 6-17,lƠ sb xác i đsnh t ng c a 22. SEQ i = [0 FOR PROCESS]
di n tích PROCESSES
các hình ch nh t
8. SEQ đ c chia s 23. got[i] := FALSE
9. localsum := 0.0 24. SEQ i = [0 FOR PROCESS]
10. width := 1.0 / N 25. REAL64 y:
11. x := ((i * CHUNK) + 0.5) * width 26. SEQ
12. SEQ i = [0 FOR CHUNK] 27. ALT i = [0 FOR PROCESS]
13. SEQ 28. (got[i] = FALSE) & sum[i] ? Y
14. localsum:=localsum+(4.0/(1.0+(x*x)))) 29. got[i] := TRUE
15. x := x + width 30. pi := pi + y
cont. 155
31. Output ! “Approximation to pi is: ”; pi 156

26
7/17/2010

3.2 Các ngôn ng l p trình song song - PVM

Ti u lu n (02 h c viên): 3.2.4 L p trình song song v i PVM (Parallel Virtual Machine)
OCCAM Language
http://en.wikipedia.org/wiki/Occam_programming_language •PVM được phát triển b i University of Tennessee, Oak Ridge
http://www.wotug.org/ National Laboratory and Emory University (1989)
•PVM là một phần mềm sử dụng cho hệ thống bao gồm các
máy tính không thuần nhất (heterogeneous) được kết nối với
Ti u lu n (02 h c viên): ThreadMentor nhau để xử lý song song.
http://cs.mtu.edu/~shene/NSF-3/e-Book/index.html
•PVM thư ng được sử dụng cho những máy tính nối mạng
trong môi trư ng UNIX hoặc Windows

157 158

3.2 Các ngôn ng l p trình song song - PVM 3.2 Các ngôn ng l p trình song song - PVM

Các đặc đi m chính c a PVM: PVM x lỦ t t c các v n đ :


•Thực hiện theo mô hình truyền thông điệp (Message Passing) • định tuyến truyền thông điệp
•Hỗ trợ sự kết nối không thuần nhất (Heterogeneity): PVM hỗ trợ • chuyển đổi dữ liệu
sự kết nối c a nhiều máy tính, nhiều mạng máy tính và nhiều • lập lịch trong mạng máy tính
loại chương trình ng dụng khác nhau.
•Hỗ trợ đa bộ xử lý: PVM sử dụng những khả năng truyền thông
H th ng PVM g m hai thƠnh ph n chính:
điệp trong hệ đa bộ xử lý để khai thác hết khả năng c a phần
1. Khối pvmd (hoặc pvm3) đặt thư ng trú trên tất cả các máy
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 tính để tạo ra máy ảo (các BXL giả lập).
song trong PVM là một tác vụ, đó là một luồng (thread) làm 2. Thư viện các chương trình con giao diện của pvm: ch a các
nhiệm vụ điều khiển sự truyền thông và tính toán. chương trình con để truyền thông điệp, quản lý các tiến trình,
•Thay đổi cấu hình theo yêu cầu: Các chương trình có thể thực phối hợp các tác vụ và thay đổi các máy ảo.
hiện trên tập các máy được lựa chọn theo yêu cầu c a NSD.
159 160

3.2 Các ngôn ng l p trình song song - PVM 3.2 Các ngôn ng l p trình song song - PVM

Mô hình tính toán c a PVM Một kiến trúc c a PVM

Nhập dữ liệu và phân đoạn Cluster 1

Bridge

Máy tính 1 Máy tính 2

MPP SIMD

Cluster 2
Xu t d li u vƠ hi n th
k t qu Cluster 3

161 162

27
7/17/2010

3.2 Các ngôn ng l p trình song song - PVM 3.2 Các ngôn ng l p trình song song - PVM

Phƣơng thức thực hiện chƣơng trình trong PVM: Một vài thông tin về PVM:
• Những chương trình viết bằng C/C ++, Fortran 77 có thể ch a  User muốn chạy một ng dụng trên PVM thì phải kh i động
những l i gọi các hàm thư viện c a PVM (đây là những ngôn PVM và tạo ra một máy ảo.
ngữ lập trình được PVM hỗ trợ)  Một ng dụng PVM có thể được gọi từ dấu nhắc c a hệ điều
hành UNIX một host nào đó
 Các Users có thể cấu hình máy ảo và thực hiện các ng
• Các chương trình được dịch theo kiến trúc c a hệ thống
(host pool), các tệp mã đích (object file) được đặt vào những
dụng c a mình với PMV
nơi mà mọi máy tính c a hệ thống đều truy cập được.  Trong PVM mọi tiến trình đều có thể giao tiếp và/hoặc đồng
• Các USER tạo ra bản sao c a tác vụ ch (master) hoặc kh i bộ với những tiến trình khác
động một tác vụ để thực hiện các ng dụng c a mình. • Các files PVM có thể truy cập địa chỉ:
• Một tiến trình được kh i động b i một tiến trình khác được http://www.netlib.org/pvm3/index.html
gọi là tiến trình tớ (slave). • Nhiều máy tính hỗ trợ hệ thống PVM thực hiện như: BBN
• Những tiến trình này có thể thực hiện một số tính toán cục bộ Butterfly TC2000, 80386/486 PC chạy với UNIX, Thinking
và trao đổi với nhau để giải quyết bài toán đặt ra. Machine‟s CM-2, CM-5, Cray-2, Cray-5MP, HP-9000 PA-
163
RISC, Intel Paragon, Silicon Graphics IRIS, Sun 4, DEC Micro
164
VAX, v.v.

3.2 Các ngôn ng l p trình song song - PVM 3.2 Các ngôn ng l p trình song song - PVM

Giới thiệu một chƣơng trình trên PVM Giới thiệu một chƣơng trình trên PVM (cont.)

Chương trình slave:


Chương trình in ra màn hình (master) định danh c a tác vụ (ID task)
nhận được từ hàm pvm_mytid(), pvm_parent() để xác định ID task c a master.
Sau đó sử dụng các hàm: Sau đó dùng các hàm dưới đây để xác định hostname và chuyển

• pvm_spawn(): tạo ra một bản sao và gọi chương trình hello_other hotname này cho master:

pvm_initsend(): kh i tạo buffer để gửi


• pvm_recv(): nhận và thực hiện khối thông điệp gửi đến.
pvm_pkstr(): đặt một xâu vào buffer để gửi đi
• pvm_exit(): kết thúc chương trình trong hệ thống PVM. pvm_upkstr(): đọc một xâu vào buffer

pvm_send(): chuyển dữ liệu buffer tới tiến trình nhận được xác

định b i pvm_mptid.
165 166

3.2 Các ngôn ng l p trình song song - PVM 3.2 Các ngôn ng l p trình song song - PVM
/* Chương trình master có tên Hello.c */ /* Chương trình slave có tên: hello_other.c */
#include “pvm3.h” pvm_parent() nhận một tác vụ
#include “pvm3.h” tạo ra một bản sao và gọi
c a tiến trình tớ từ tiến trình ch
chương trình hello_other main(){
main(){ int ptid, msg;
char buf[100]; pvm_initsend() kh i
int cc, tid, msg;
ptid = pvm_parent(); tạo buffer để gửi
char buf[100];
strcpy(buf, “Hello world from “);
printf(“Master ID number %x\n”, pvm_mytid()); gethostname(buff + strlen(buf), 64);
cc= pvm_spawn(“Hello_other”,(char**)0,0,“”, 1, &tid); msg = 1;
if(cc== 1){ pvm_initsend(PvmDataDefault); pvm_pkstr() đặt một xâu
nhận và thực hiện khối
thông điệp gửi đến pvm_pkstr(buf); vào buffer để gửi đi
msg = 1; pvm_send(ptid, msg);
pvm_recv(tid, msg); đọc một xâu vào buffer pvm_exit(); pvm_send() chuyển dữ liệu buffer tới
} tiến trình nhận được xác định b i ptid.
pvm_upkstr(buf);
printf(“From master %x: %s\n”, tid, buf);
} else printf(“Cannot start hello_other\n”);
pvm_exit(); kết thúc chương trình
trong hệ thống PVM 167 168
}

28
7/17/2010

Ti u lu n Ti u lu n

1. Tìm hiểu về PVM 2. Thread trong JAVA


http://www.csm.ornl.gov/pvm/intro.html – http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thr
ead.html
http://www.csm.ornl.gov/pvm/
– http://en.wikipedia.org/wiki/Multithreading
http://search.cpan.org/dist/Parallel-Pvm/
Một số ví dụ về cách tạo thread trong JAVA
http://www.parallels.com/ • http://www.niitvn.com/niitwcms/dt/QLT/MotcachtaoT
http://www.netlib.org/pvm3/book/node1.html hreadtrongJava.pdf

• http://www.niit-n.com/4rum/showthread.php?p=8754
Introduction to Java threads:
http://www.javaworld.com/javaworld/jw-04-1996/jw-
04-threads.html

169 170

3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình
L nh S3 tính giá tr c a bi n A vƠ
Mục đích: bi n nƠy đ c s d ng trong S2 vƠ Đ th ph thu c d li u?
• Xác định m c độ phụ thuộc dữ liệuS3.vàDoquan
v y, có hệs ưu ph tiênthu tính
c c a • là một đồ thị có hướng G=(V,E), trong đó V là tập các lệnh
S2, S3 vƠo S3 (kỦ hi u lƠ d6, d7).
toán giữa các tiến trình L nh S1 tính giá tr c a bi n trong chương trình, E là các phụ thuộc dữ liệu.
A vƠ bi n nƠy đ c s dcùng
C hai l nh S1 vƠ S3 ng
• Ví dụ: Xét dãy các lệnh sau: tính giá tr Sc . aDobi vny,Acó
vƠ do • Ví dụ
trong 2 vƠ
L Snh S2 tính
3 giá tr c sa bi n
S1: A := B + C v y,thu
ph có sc cpha S thu c d5. S
B vƠ bi n nƠy2,đS3 vƠoc s d1 ng S1: A := B + C S2: B := A + E S3: A := A + B
(kỦ hi u lƠS3.d1, Dod2). v y, có s ph
S2: B := A + E Nh n xét: CácGiá
trong
ph trcthu trc a ccS3nƠy
đó c a bi
thu vƠo S2n (kỦ
B
S3: A := A + B chẳng gi ng nhau tí
đhi uc lƠ nƠo
s d3).
d ng c !!! S1. Do v y,
có s ph thu c d4.
d4 d6
S1

d1 d5
d1 d3 d7
S1 S2 S3 d4 d2

d2
S2 d6 S3 d7
d5 d3
Đ th ph thu c d li u
171 172

3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình
Phân loại các phụ thuộc dữ liệu:
Ký hiệu: Xét các câu lệnh S1: A := B + C; S2: B := A + E ; S3: A := A + B
1. Ph thu c dòng d li u (Data Flow Dependency):
DEF(S) - tập tất cả các biến có giá trị bị thay đổi khi thực hiện • là sự phụ thuộc dữ liệu giữa S1 và S2 khi DEF(S1)∩USE(S2) ≠ 
câu lệnh S. • Đây là loại phụ thuộc rất chung và rất khó loại bỏ b i vì lệnh S2
USE(S) - tập tất cả các biến được truy cập (được sử dụng) yêu cầu giá trị c a một biến và giá trị này phải được tính S 1.
khi thực hiện câu lệnh S. • Khi xuất hiện phụ thuộc dòng dữ liệu giữa các câu lệnh thì
Ví dụ: S1: A := B + C S2: B := A + E S3: A := A + B chúng không th c hi n song song đ c.
• Quan hệ phụ thuộc dòng dữ liệu được ký hiệu
• Ví dụ: các phụ thuộc d1, d2, d3 là loại phụ thuộc dòng dữ liệu.
DEF(S1) = {A} USE(S1) = {B,C}
d1 d3
DEF(S2) = {B} USE(S2) = {A,E} S1 S2 S3
DEF(S3) = {A} USE(S3) = {A,B} d2

Ph thu c dòng d li u
173 174

29
7/17/2010

3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình
2. Ph n ph thu c d li u (Data Anti-Dependency): 3. Ph thu c d li u ra (Data Output Dependency):
• là sự phụ thuộc dữ liệu giữa S1 và S2 khi DEF(S2)∩USE(S1) ≠  • là sự phụ thuộc dữ liệu giữa S1 và S2 khi DEF(S2)∩DEF(S1) ≠ 
• Sự phụ thuộc này xuất hiện khi chúng ta sử dụng lại tên gọi • Sự phụ thuộc này xuất hiện do hai nguyên nhân:
c a các biến, một biến đã được sử dụng trong S 1 và sau đó  Sử dụng lại tên c a các biến (dùng chung)
được định nghĩa lại S2.  Tính tăng giá trị c a cùng một biến.
• Khi xuất hiện phản phụ thuộc dữ liệu giữa các câu lệnh thì Nếu những lệnh này thực hiện đồng th i thì chúng sẽ ghi đè
chúng cũng không th c hi n song song đ c. các giá trị vào cùng một ô nhớ. Do vậy, cần phải xác định
• Quan hệ phản phụ thuộc dữ liệu được ký hiệu: chính xác th tự thực hiện để ngăn ngừa việc sử dụng
• Ví dụ: các phụ thuộc d4, d6 . d7 là các phản phụ thuộc dữ liệu. những giá trị không đúng.
• Quan hệ phụ thuộc dữ liệu ra được ký hiệu là:
S1: A := B + C; S2: B := A + E ; S3: A := A + B • Ví dụ: phụ thuộc d5 là loại phụ thuộc dữ liệu ra.
d4 d6
S1: A := B + C; S3
S3: A := A + B S1
d7
DEF(S1)∩DEF(S3) ={A}≠ 
S1 S2 S3 d5
175 Ph thu c d li u ra 176
Ph n ph thu c d li u

3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình
4. Ph thu c d li u vƠo (Data Input Dependency):
• là sự phụ thuộc dữ liệu giữa S1 và S2 khi USE(S2)∩USE(S1) ≠ 
5. Ph thu c đi u khi n d li u (Data Control Dependency):
• là sự phụ thuộc dữ liệu giữa S1 và S2 khi sự thực hiện c a
• B i vì các lệnh này chỉ truy cập (đọc) và không làm thay đổi giá lệnh này phụ thuộc vào giá trị c a các biến được tính lệnh
trị c a các biến đó, do vậy các lệnh này có thể thực hiện theo kia.
bất kỳ th tự nào cũng được, nghĩa là có th th c hi n song • Quan hệ phụ thuộc điều khiển dữ liệu
song. được ký hiệu là:
• Quan hệ phụ thuộc dữ liệu vào được ký hiệu:
• Ví dụ S4: P = (B => 0)
S2: B := A + E ; S3: A := A + B S5: if (P is true) then
S4 S5
USE(S3) ∩ USE(S2) ={A} ≠ 
D=1
else D = 2
Ph thu c đi u khi n d li u
endif
S2 S3
d3
Ph thu c d li u vƠo 177 178

3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình
Nhận xét:
+ Sử dụng các biến khác nhau để loại bỏ phụ thuộc dữ liệu ra.
• Để tăng được mức độ song song của chương trình chúng ta có
Ví dụ:
thể khử hoặc giảm các phản phụ thuộc dữ liệu và phụ thuộc dữ
liệu ra trong đồ thị phụ thuộc dữ liệu.
• Thông thư ng để khử các phụ thuộc dữ liệu này là đặt lại tên
A= B + C A =B+C
cho các biến để tránh việc chia sẻ các biến đó.
A= C * X A1 = C * X
• Ví dụ: Xét đoạn chương trình sau:

DEF(S2) ∩ DEF(S1) = {A} ≠ 


for i = 1, n, 1 for i = 1, n, 1
X = A[i] + B[i] X = A[i] + B[i]
Y[i] = 2 * X Y[i] = 2 * X Nhận xét:
X = C[i] * D[i] XX = C[i] * D[i] • Hai lệnh trên có sự phụ thuộc dữ liệu ra.
P = X + 15 P = XX + 15 • Có thể loại bỏ phụ thuộc này bằng cách
endfor endfor thay biến A c a câu lệnh th hai bằng A1
Nhận xét:
• Có ph n ph thu c d li u. N u hai l nh sau ta đặt X thƠnh XX thì s t o
ra hai đo n ch ng trình có th th c hi n song song: 179 180

30
7/17/2010

3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình
+ Sử dụng các biến khác nhau để loại bỏ phản phụ thuộc dữ + Thực hiện một số phép biến đổi (phép thế) cũng có thể loại
liệu bỏ được phản phụ thuộc dữ liệu.
Ví dụ: Ví d : Xét dãy các câu lệnh sau:
S1
S1: A= B + C
A= B + C A =B+C S3 S2
S2: B=A*3
B=C*X B1 = C * X
S3: A= 2 * C
DEF(S2)∩USE(S1) = {B} ≠ 
S4: P = (B => 0) S4
if (P is true) then
S5: D=1
Nhận xét:
S6: else D = 2 S5 S6
• Hai lệnh trên có quan hệ phản phụ thuộc dữ liệu.
endif Đ th ph thu c d li u
• Có thể loại bỏ sự phụ thuộc này bằng cách sử
dụng một biến khác cho câu lệnh th hai
Nhận xét: Để xử lý song song, thì cần thiết phải loại bỏ đi một số loại phụ
thuộc dữ liệu có thể.
181 182

Ví dụ: loại bỏ những quan hệ phản phụ thuộc dữ liệu và phụ


thuộc dữ liệu kết quả 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình

DEF(S2)∩USE(S1) ={B}≠  Tuy nhiên, những phép biến đổi đơn giản như thế không phải
S1: A= B + C S2‟: B = (B + C) *3
(phản phụ thuộc dữ liệu)
S2: B=A*3 S3: A= 2 * C lúc nào cũng áp dụng thành công. Ví dụ, xét chu trình sau:
S3: A= 2 * C S4: P = (B => 0)
S4: P = (B => 0) if (P is true) then i = 0;
if (P is true) then S5: D=1 aa: if(i > N) stop;
for (i = 0; i < N; i++) không s d ng FOR
S5: D=1 S6: else D = 2 a = a + i;
A = A + i;
S6: else D = 2 endif i++;
endif goto aa;
S1 S3 S2’
Nh n xét:
S3 S2 • Trong mỗi bước lặp đều phải sử dụng những tên biến khác nhau nếu muốn
S4 loại bỏ phản phụ thuộc dữ liệu. Điều này khó thực hiện được trong trư ng
hợp số vòng lặp lớn hoặc bất kỳ.
S4
• Quan hệ phụ thuộc dữ liệu là không có tính bắc cầu. Nghĩa là nếu S 2 phụ
S5 S6 thuộc vào S1, S3 phụ thuộc vào S2 thì không kết luận được S3 phụ thuộc dữ
S5 S6 liệu vào S1.
183 184
Đ th ph thu c d li u rút g n

3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình

Ph thu c theo chu trình vƠ theo m ng Vấn đề: khi xây dựng các chu trình lặp phải xét xem những dãy
Mục đích: khử phụ thuộc dữ liệu trong các vòng lặp. lặp khác nhau c a chúng có thể thực hiện song song được
Xét đoạn chương trình sau: không?
Nói cách khác, khi một bộ xử lý P thực hiện một dãy các câu
DO i
hai câu lệnh (1) và (2) lệnh với i = 1 (biến điều khiển vòng lặp) thì bộ xử lý Q có thể cùng
A[2*i+1] = B[i]
D[i] = A[2*i]
ENDDO
(1)
(2)
? có thực hiện song song
được không?
thực hiện dãy các câu lệnh đó với i=2 hay không?

Xét ví dụ sau:
•Nếu xem mảng A như một thực thể đơn thì hai lệnh trên là phụ FOR I=1 DO
thuộc theo dòng dữ liệu (vì A xuất hiện trong DEF c a (1) và A[I] = A[I-1] + 1 (3)
cũng xuất hiện trong USE c a (2)).
•Nhưng nếu ta xét thêm chỉ số mảng thì trong câu lệnh (1) sử Chu trình trên có thể khai triển thành:
dụng các phần tử mảng A có chỉ số lẻ; còn (2) lại sử dụng A[1] = A[0] + 1; A[2] = A[1] + 1;
phần tử mảng A có chỉ số chẵn. A[3] = A[2] + 1; A[4] = A[3] + 1; . . .
Do đó, đây không có sự phụ thuộc dữ liệu. 185 186

31
7/17/2010

3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình 3.3 Sự phụ thuộc dữ liệu và đồ thị ƣu tiên của các tiến trình

Xét hai vòng lặp th i và th j tương ng với I = i và I = j. Nhận xét:


Không mất tính tổng quát ta có thể giả thiết i < j. Chu trình sẽ có • Nói chung, việc xác định sự phụ thuộc theo cách như trên là
dạng: bài toán khó. Sự ph c tạp sẽ xuất hiện b i vì có nhiều dạng
phương trình không hiển nhiên. Những phương trình này không
... USE(i) = {A[i-1]}
A[i] = A[i-1] + 1; có l i giải trực tiếp trong các công cụ toán học kinh điển.
... USE(j) = {A[j-1]} • Trư ng hợp tổng quát, khi xét n vòng lặp mà dẫn đến dạng
A[j] = A[j-1] + 1; DEF(i) = {A[i]} phương trình a1x1 + a2x2 + … + anxn = c với ai và c là các số
... DEF(j) = {A[j]} nguyên (gọi là phương trình Diophantine) thì kết luận chu trình
Nhận xét: không thể thực hiện song song.
•Các tập trên không ch a biến đơn mà chỉ có các biến có chỉ số
và khi i và j khác nhau thì các biến đó khác nhau. Lưu ý: Phương trình Diophantine có dạng tổng quát:
•Hai tập DEF(i)= {A[i]} và USE(j) = {A[j-1]} có ch a phần tử a1x1 + a2x2 + ầ + anxn = c với ai và c là các số nguyên.
chung khi i = j – 1, Vì phương trình i = j – 1 có vô số nghiệm Năm 1991 Zima và Chapman đã ch ng minh được rằng nếu
ước số chung lớn nhất (a1,a2,… an) chia hết cho c thì phương
•Vậy kết luận chu trình trên không thực hiện song song được. trình Diophantine có một nghiệm nguyên.
187 Trư ng hợp tổng quát, giải phương trình trên là không thể. 188

3.4 Biến đổi chƣơng trình 3.4 Biến đổi chƣơng trình

M c đích: m = 0;
1. Loại bỏ được sự phụ thuộc c a các câu lệnh trong ch.trình. Do i = 1 to N Do i = 1 to N
2. Khắc phục được những tr ngại c a cách xác định các vòng m = m + k; x[i*k] = a[i]
lặp có thể thực hiện song song dẫn tới phương trình Diophantine. x[m] = a[i] End
End
3.4.1 Các bi n qui n p
Biến qui nạp là loại biến trong chu trình mà các giá trị liên tiếp
Nhận xét:
c a nó tạo ra dãy cấp số cộng.
• Hai câu lệnh trên có sự phụ thuộc dữ liệu vì m được sử dụng
chéo giữa các vòng lặp.
Ví d : xét đoạn chương trình sau:
• Khi vòng lặp trước tính giá trị c a m thì m lại được sử dụng
m = 0; lệnh th hai nên chúng phải thực hiện tuần tự.
DO i = 1 to N • Nếu mỗi vòng lặp chúng ta dự báo được giá trị c a m thì có
m = m + k; {m là biến qui nạp} thể sẽ loại bỏ được sự phụ thuộc dữ liệu liên quan đến m.
x[m] = a[i] • Giá trị k là bất biến trong các vòng lặp và được cộng liên tiếp
END 189 vào sau mỗi vòng lặp, do vậy, vòng lặp th i, m = i * k. 190

3.4 Biến đổi chƣơng trình 3.4 Biến đổi chƣơng trình

3.4.2 S ph thu c ti n 3.4.3 S ph thu c lùi


Phụ thuộc tiến là loại phản phụ thuộc dữ liệu giữa các vòng Trư ng hợp các phần tử c a mảng trong chu trình lại được
lặp c a chu trình. Do i = 1 to N xác định thông qua những phần tử đ ng trước chúng (lùi về
x1[i] = x[i] phía trước)
Do i = 1 to N
x[i] = x[i+1] Có th th c hi n song
End song ? Do i = 1 to N Do i = 1 to N
End Do i = 1 to N x[i] = x[i-1] + y[i] x[i] = x[0]+y[1]+y[2]+ … +y[i]
Có th x[i] = x1[i+1] End End
Nhận xét: End
•Chu trình không thực hiện song song được Nhận xét:
•Việc loại bỏ những phụ thuộc dữ liệu kiểu này không đơn giản
•Chu trình làm nhiệm vụ sao tất cả các phần tử c a một mảng
sang chính mảng đó với chỉ số giảm đi một, do vậy nó phải thực •Không có giải pháp chung để loại bỏ phụ thuộc dữ liệu trong
trư ng tổng quát. Nếu có giải pháp loại bỏ thì giá phải trả cũng
hiện tuần tự.
khá đắt.
Cách giải quyết
Sử dụng 2 mảng: một bản gốc và một bản sao c a mảng gốc để Hiển nhiên không còn sự phụ thuộc lùi trong chu trình, tuy nhiên
viết lại chương trình 191 th i gian tính toán trong mỗi câu lệnh lại tăng lên khá nhiều. 192

32
7/17/2010

3.4 Biến đổi chƣơng trình 3.4 Biến đổi chƣơng trình

3.4.4 S phơn tách chu trình (ph thu c lùi) 3.4.4 S phơn tách chu trình (ph thu c ti n)
Tách một chu trình thành nhiều chu trình con để thực hiện song
song Do i = 1 to N
Do i = 1 to N x[i] = c[i];
Do i = 1 to N a[i] = b[i] + c[i]; Do i = 1 to N c[i] = a[i+1]
a[i] = b[i] + c[i]; End a[i] = b[i] + c[i]; End
c[i] = a[i-1] Do i = 1 to N c[i] = a[i+1] Do i = 1 to N
End c[i] = a[i-1] End a[i] = b[i] + x[i];
Nhận xét: End Nhận xét: End
• Sự tham chiếu giữa các mảng a và c dẫn đến sự phụ thuộc • Phần tử c[i] lệnh hai được tính theo giá trị c a a[i+1], là giá
giữa các vòng lặp của chu trình. trị trước khi nó được cập nhật lệnh th nhất
• Giá trị c[i] lệnh th nhất luôn là những giá trị lưu trữ cũ c a • Ngược lại c[i] được sử dụng lệnh th nhất lại là giá trị cũ
mảng c (được xác định ở lệnh thứ 2) trước khi được cập nhật lệnh th hai.
• a[i-1] được sử dụng lệnh th hai là giá trị đã được tính Cách giải quyết
vòng lặp trước đó (vòng th i -1) • Sao mảng c sang mảng phụ x. Kết quả biến đổi chu trình này
193 194
thành hai chu trình trong đó không còn sự phụ thuộc dữ liệu

3.4 Biến đổi chƣơng trình Bài tập


3.3.5 Các chu trình l ng nhau
Xét trư ng hợp nhiều chu trình lồng nhau (chu trình nhiều chỉ số) 3.1 Xác định sự phụ thuộc dữ liệu c a các lệnh trong chu trình
sau:
Do i = 1 to N
Do i = 1 to N
Do j = 1 to N
e[i] = x[i] - z[i];
x[i,j] = x[i, j-1] + z[i];
a[i+1] = e[i] + 2*d[i]
Nh n xét: End
a[i] = e[i]
• Mảng z được sử dụng trong chu trình hoàn toàn không gây ra end
sự phụ thuộc nào cả. 3.2 Hai chu trình sau có tương đương về nội dung tính toán hay
• Chỉ số th nhất c a mảng x là i, cũng chính là chỉ số c a chu không? hãy bình luận về khả năng thực hiện song song c a
trình, nhưng không có sự tham chiếu chéo giữa các vòng lặp. các chu trình đó.
Vậy, chu trình lặp bên trong (chu trình lặp theo i) có thể thực 1. Do i = 1 to N
hiện song song. a[i] = a[i+1] + i
• Chỉ số th hai c a mảng x là j, là chỉ số c a chu trình th nhất end
do đó có sự phụ thuộc dòng dữ liệu c a các lần lặp vòng 2. Do i = N downto 1
ngoài. Cũng như 3.4.3, trư ng hợp này không có cách biến a[i] = a[i+1] + i
đổi đơn giản về dạng khả song song. 195
end
196

Bài tập Bài tập

3.3 Xác định tất cả các sự phụ thuộc dữ liệu trong đoạn
chương trình sau: 3.5 Phân tích đoạn chương trình sau, xác định các phụ thuộc dữ
int a[MAX]; liệu và vẽ đồ thị phụ thuộc dữ liệu c a đoạn chương trình đó.
read(a); A = B + C;
for(i = 0; i < N; i++) for(i = 0; i < N; i++){
for(j = 0; j < i; j++){ D[i] = A + b[i]);
a[i] = max(a[i], a[j]); S = b[i] * 5;
a[j] = min(a[i], a[j]); T = T + S;
} }
3.4 Loại bỏ các phụ thuộc dữ liệu ra và phản phụ thuộc dữ liệu 3.6 Viết chương trình giải phương trình bậc hai và vẽ đồ thị phụ
c a chu trình sau thuộc dữ liệu c a nó.
for(i = 0; i < N; i++){
x = a[i]+ b[i]);
y[i] = 2 * x;
} 197 198

33
7/17/2010

CH NG 4. CỄC MỌ HỊNH V L P TRỊNH SONG SONG 1. L P TRỊNH B NH CHIA S


M t vƠi chú Ủ (1/4)
NỘI DUNG 1. Hệ thống đa bộ xử lý đối x ng SMP (symmetric multiprocessor Sysstem)
• Các bộ xử lý là như nhau
1. L p trình b nh chia s • Không có những BXL đặc biệt để xử lý vào/ra
• Không có BXL được gán nhiệm vụ đặc biệt nào khác.
2. L p trình song song d a vƠo các ti n trình 2. Để nghiên c u về XLSS, chúng ta không nhất thiết phải có hệ
đa bộ xử lý vật lý.
3. L p trình song song d a vƠo các lu ng
3. Trong môi trư ng UNIX, chúng ta có thể tạo ra nhiều tiến trình
4. L p trình theo mô hình truy n thông đi p. khác nhau trong hệ thống và chúng được sử dụng để mô
phỏng lập trình đa bộ xử lý.
5. L p trình trên c m máy tính v i PVM 4. Hầu hết các hệ UNIX đều cho phép tạo ra một số các tiến trình
bất kỳ và chúng được lập lịch cho những bộ xử lý thích hợp
199 200

1. L P TRỊNH B NH CHIA S 1. L P TRỊNH B NH CHIA S

M t vƠi chú Ủ (2/4) M t vƠi chú Ủ (3/4)


5. Về nguyên tắc, chương trình là tập các tiến trình và việc viết Trong môi trư ng lập trình chia sẻ bộ nhớ có hai ràng buộc
chương trình là độc lập với các bộ xử lý, việc phân chia các quan trọng:
tiến trình cho các bộ xử lý là công việc của hệ điều hành.. 1. Một tiến trình có thể chờ một khoảng thời gian bất kỳ giữa hai
6. Trong những hệ thống đa nhiệm như UNIX, số bộ xử lý và số lệnh cần thực hiện. Giả sử bộ xử lý P thực hiện một chương
trình có một 100 lệnh, bộ xử lý Q thực hiện chương trình có 10
các tiến trình không nhất thiết phải bằng nhau. Nhưng nên tổ
lệnh và cùng bắt đầu thực hiện đồng th i. Thậm chí, tất cả các
ch c một tiến trình có một BXL đảm nhiệm để tiện việc lập lịch. lệnh có tốc độ thực hiện như nhau cũng không thể nói rằng Q
7. Một vấn đề quan trọng cần xem xét khi XLSS là cần bao nhiêu sẽ kết thúc trước P.
nút (BXL) để chương trình song song thực hiện hiệu quả nhất? 2. Không thể xem các lệnh thực hiện là nguyên tố ở mức các
8. Nhiều chương trình được xây dựng phụ thuộc vào một cấu ngôn ngữ lập trình. Ví dụ, một lệnh đơn giản như: a = a + 1 sẽ
là một dãy bốn lệnh trong ngôn ngữ máy. Mà ta cũng biết rằng,
hình xác định. Nói chung, loại chương trình phụ thuộc như vậy
các tiến trình và hệ điều hành chỉ nhận biết được các câu lệnh
là không tốt, vì khi bộ xử lý bận thì các tiến trình tiếp theo phải c a ngôn ngữ máy.
ch . 201 202

1. L P TRỊNH B NH CHIA S 1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH

M t vƠi chú Ủ (3/4)


T o l p ti n trình
Trong l p trình b nh chia s :
• Các tác vụ (tasks) sẽ đọc/ghi dữ liệu từ bộ nhớ chia sẻ qua Cú pháp: id = create_process(N);
không gian địa chỉ bộ nhớ chung (common address space) Mục đích: tạo ra N tiến trình và một tiến trình cha
• Có những cơ chế khác nhau như (locks/semaphores) để điều
để thực hiện câu lệnh đó.
khiển việc truy nhập đến bộ nhớ chia sẻ
• Ngư i lập trình không cần mô tả việc truyền thông dữ liệu, do Như thế, có N+1 tiến trình như nhau được tạo ra
đó việc viết chương trình sẽ đơn giản. và mỗi giá trị c a id đ c gán t ng ứng cho
• Khó quản lý dữ liệu vì không can thiệp trực tiếp quá trình truyền
m t ti n trình.
dữ liệu.
203 204

34
7/17/2010

1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH 1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH

b) H y b ti n trình:
Ví dụ: tạo N tiến trình và giao n+1 Nhiệm vụ để thực hiện ssong
• Cú pháp: join_process(N, id);
id = create_process(N); • Mục đích: cho phép tiến trình có giá trị id trong N tiến trình đã
switch(id){
kh i tạo được tiếp tục thực hiện những phần việc tuần tự còn
case 0: … do NhiemVu0 …; break;
case 1: … do NhiemVu1 …; break; lại, còn những tiến trình khác kết thúc.
case 2: … do NhiemVu2 …; break;
...
case N: … do NhiemVuN …; break; Nếu ta đặt sau join_process(N, id) một câu lệnh thì câu lệnh
} này sẽ không được thực hiện cho đến khi tất cả các tiến trình
đều thực hiện join_process(N, id). Do đó vấn đề xử lý song
song không xuất hiện mà là xử lý tuần tự.
205 206

1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH 1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH

Vấn đề là các tiến trình được tạo lập và truy cập dữ liệu của Chú Ủ (1/3):
 Khi muốn sử dụng bộ nhớ chung, Người lập trình cần phải xin
nhau như thế nào?
• Một mặt một tiến trình có thể muốn giữ một phần dữ liệu cục bộ
cho riêng mình, không cho những tiến trình khác truy cập tới cấp phát bộ nhớ và sau khi sử dụng xong phải giải phóng
những dữ liệu đó.
• Mặt khác, nó cũng muốn trao đổi thông tin với các tiến trình chúng.
khác. Có hai hàm cơ s để thực hiện điều này:
 shared(m, &id): xin cấp phát m byte bộ nhớ chia sẻ cho
• Xử lý vấn đề che dấu hay chia sẻ thông tin như thế nào còn
tuỳ thuộc vào mô hình mà chúng ta sử dụng:
tiến trình (process) hay luồng (thread). tiến trình id.
• Các tiến trình trong UNIX được sử dụng như các đơn vị tính
toán độc lập. Theo mặc định, việc tính toán và cập nhật bộ nhớ  free_shm(): giải phóng bộ nhớ đã được cấp.
c a một tiến trình là không nhìn thấy được từ các tiến trình
khác.
• Đối với luồng, tất cả các thông tin, theo mặc định, là nhìn thấy Các hàm shared(m, &id), free_shm() được gọi là hàm điều
được.
phối về chia sẻ bộ nhớ.
207 208

1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH 1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH
Ví d : Bài toán loại trừ nhau. Tr l i:
Chú Ủ:
Ch a ch c!!!
Xét đoạn chương trình sau: Các giá tr c a *i, j • Nếu có một tiến trình truy cập vào một vùng nhớ với ý định cập
main(){ in ra có th lƠ 2, 4; nhật thì nó phải được đảm bảo rằng không một tiến trình nào
4, 4; 6, 4; b i vì
int id, sid, *i, j;
khi ti n trình thứ i
khác đọc dữ liệu vùng đó cho đến khi việc cập nhật đó kết
i = (int*)shared(sizeof(int), &sid); th c hi n xong thúc.
T o 2 ti n trình vƠ m t ti n
*i = 100; j = 100; cơuMl i nh
trình cha. giá(1),
tr ctr a idc • Để giải quyết được vấn đề trên thì phải có cơ chế đảm bảo
printf(“Before fork: %d, %d\n”, *i, j); đ c gán khi tnó ngth ứng
c hicho n
rằng, tại mỗi th i điểm các khối lệnh c a chương trình được
m t ti n(2) thì có th các
trình.
id = create_process(2); ti n trình khác đƣ thực thi chỉ b i một tiến trình.
*i = id; j = id * 2; // (1) c p nh t l i giá tr
Ch ti n trình t ng ứng v i • Nếu có một tiến trình bắt đầu vào thực hiện một khối lệnh thì
printf(“After fork: &d, %d\n”, *i, j); // (2) c a i.
giá tr id còn ti p t c ho t những tiến trình khác không được vào khối lệnh đó.
đ ng, nhLứungỦ ti rằng,
n trình i lƠ

join_process(3, id);
k t thúcbi sau
n chia
l i sg ,i id lƠ
hƠm • Khi một tiến trình vào một vùng lệnh nào đó thì nó sẽ gài khoá
printf(“After join: &d, %d\n”, *i, j); trên duy nh t (s hi u) (lock).
Gi i phóng
đ i bv nh i mđƣi đti nc
free_shm(sid); c p trình.
• Ngược lại, khi ra khỏi vùng đó thì thực hiện cơ chế mở khoá
} (unlock) để cho tiến trình khác có nhu cầu sử dụng.
Cơu h i: Gi s cơu l nh (1) th c hi n v i id = 2 thì cơu l nh (2) có in
209 210
ra lƠ ắAfter fork: 2, 4” hay không?

35
7/17/2010

1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH 1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH

Các câu lệnh để thực hiện các yêu cầu trên: Sử dụng cơ chế gài khoá để viết lại chương trình trên:
main(){
• init_lock(Id): Khởi động bộ khoá vùng nhớ chia sẻ, trong đó Id int *lock1,id, sid1, sid2, *i, j;
là tên c a vùng nhớ sử dụng chung. lock1 = (int*)shared(sizeof(int), &sid1);
init_lock(lock1);
• lock(Id): khoá lại vùng nhớ Id. Nếu một tiến trình đã khoá một i = (int*)shared(sizeof(int), &sid2);
vùng nhớ chung thì những tiến trình khác muốn truy cập vào đó *i = 100; j = 100;
sẽ phải ch . printf(“Before fork: %d, %d\n”, *i, j);
id = create_process(2);
• unlock(Id): m khoá vùng đã bị khoá và trả lại cho tiến trình lock(lock1);
khác. *i = id; j = id * 2; // (1)
printf(“After fork: &d, %d\n”, *i, j); // (2)
unlock(lock1);
join_process(3, id);
printf(“After join: &d, %d\n”, *i, j);
211 free_shm(sid1); free_shm(sid2); 212

1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH 1.1 L P TRỊNH B NH CHIA S D A VÀO TI N TRỊNH

Ví d (1/2): Chương trình tính tổng c a hai vector: Ví d (2/2)


for(i = 0; i < N; i++){ Ta có thể cho phép các tiến trình truy cập xen kẻ vào các phần tử
C[i] = A[i] + B[i]; c a mảng như sau:
} Tiến trình Pi bắt đầu từ phần tử th i, sau đó bỏ qua M phần tử
Thực hiện song song hoá đoạn chương trình này như thế nào? để xử lý phần tử tiếp theo, nghĩa là nó truy cập đến i, i+M,
Giả sử ta có M tiến trình. Chúng ta có thể chia N phần tử thành i+2M, v.v
M phần (giả thiết N/M là số nguyên) và gán từng phần đó cho Chu trình (1) khi đó được viết như sau:
mỗi tiến trình. P1 P2 P3 P4 P5
Chu trình trên có thể viết thành: for(j = id; j < N; j+=M){
for (j = id * N/M; j < (id+1)*N/M; j++){ P1 P2 P3 P4 P5 C[j] = A[j] + B[j]; 1 2 3 4 5
C[j] = A[j] + B[j]; } 6 7 8 9 10
} 1 4 7 10 13 11 12 13 14 15
2 5 8 11 14
Trong đó, id là số hiệu c a tiến trình, nhận 3 6 9 12 15
giá trị từ 0 đến M-1. Tiến trình th i xử lý Khi N = 15 vƠ M = 5
N/M phần tử liên tiếp kể từ i*N/M+1, Khi N = 15 vƠ M = 5 213 214

1.2 L P TRỊNH B NH CHIA S D A VÀO LU NG 1.2 L P TRỊNH B NH CHIA S D A VÀO LU NG

? ti n trình ≠ lu ng . Nhiều hệ điều hành hiện nay hỗ trợ đa luồng như:


• SUN Solaris
• Một tiến trình là b c tranh về sự hoạt động c a một ch.trình. • Window NT
• Mỗi tiến trình bao gồm một hoặc nhiều luồng. • OS/2, v.v.
Các luồng có thể xem như các tập con c a một tiến trình.
• Các luồng c a một tiến trình có thể chia sẻ với nhau về
Bên trong những hệ điều hành này, những đặc tính hỗ trợ
không gian địa chỉ, các đoạn dữ liệu và môi trư ng xử lý,
cho NSD khai thác được các luồng trong chương trình c a
đồng th i cũng có vùng dữ liệu riêng để thao tác.
mình thư ng khác nhau.
•Các tiến trình và các luồng trong hệ thống song song cần
phải được đồng bộ, nhưng việc đồng bộ các luồng được thực Hiện nay đã có một chuẩn, đó là Pthread của IEEE Portable
hiện hiệu quả hơn đối với các tiến trình.
Operating System Interface, POSIX.
•Đồng bộ các tiến trình đòi hỏi tốn th i gian hoạt động c a hệ
thống, trong khi đối với các luồng thì việc đồng bộ ch yếu
tập trung vào sự truy cập các biến chung c a chương trình.
215 216

36
7/17/2010

1.2 L P TRỊNH B NH CHIA S D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG

Th c hi n các lu ng c a Pthread

Trong Pthread, chương trình chính cũng chính là một luồng. aThread

Một luồng có thể được khai báo, tạo lập và kết thúc bằng những proc1(&arg);
chương trình con sau: pthread_create(&aThread,&status,(void*)proc1,(void*)arg); {.
.
pthread_t aThread; // Khai báo một luồng .
pthread_join(aThread, void *status); Return(*status)
pthread_create(&aThread,&status,(void*)proc1,(void*)arg);
pthread_join(aThread, void *status);
}

Ho t đ ng c a m t lu ng trong Pthread

217 218

1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG

Ví d : Xét một chương trình đơn giản sử dụng các luồng.


. Vấn đề thực hiện loại trừ nhau giữa các luồng
Chương trình gồm hai chương trình con reader() và processor().
Vấn đề thực hiện loại trừ nhau giữa các luồng cũng tương tự
Reader() đọc dãy dữ liệu từ luồng vào và processor() xử lý trên như đối với các tiến trình.
các dữ liệu đọc vào. Có bốn hàm nguyên thuỷ:

• pthread_mutex_init(mutex, NULL)
xem giáo trình • pthread_mutex_lock(mutex)
• pthread_mutex_unlockinit(mutex)
• pthread_mutex_destroy(mutex)

Ví d : Chương trình đọc vào một mảng a[ ] các số nguyên và


thực hiện cộng song song (theo nhiều luồng) các phần tử c a
mảng với một hằng số k (xem giáo trình).
219 220

III. MỌ HỊNH L P TRỊNH Assignment: Parallel Programming with UNIX


Assignment: Parallel Programming with PCN Seyd H.Roosta, Parallel Processing and Parallel Algorithms,
Pages 140-149
Seyd H.Roosta, Parallel Processing and Parallel Algorithms,
Pages 149-164

http://books.google.com/books?id=pi6
221 http://books.google.com/books?id=pi6dl5eWJpkC 222
dl5eWJpkC

37
7/17/2010

Assignment: POSIX Threads Programming Assignment: Parallel Programming with Thread in JAVA

•https://computing.llnl.gov/tutorials/pthreads/
•http://www.yolinux.com/TUTORIALS/LinuxTuto
rialPosixThreads.html
•http://www.humanfactor.com/pthreads/

http://java.sun.com/docs/books/tutorial/essential/threads/
223 224
http://courses.coreservlets.com

1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG

Thread in JAVA Thread in JAVA


• Là cơ chế điều khiển bằng NNLT để thể hiện sự song
song trong một chương trình.
• Cho phép cài đặt các chương trình thực hiện nhiều tác
vụ cùng một lúc (ví dụ?)
• Luồng cần có thể được…
– Tạo lập (tăng thêm đơn vị song song)
– Đồng bộ hóa (điều phối)
– H y bỏ (giảm bớt đơn vị song song)
Black coffee for today -
• Trong Java, luồng là một loại “đối tượng hệ thống”:
- Thread – Các phương th c trên đối tượng luồng
– Mỗi đối tượng là một đơn vị song song có thể được
http://java.sun.com/docs/books/tutorial/essential/threads/ 225 thực hiện một cách độc lập 226

1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG

L i ích?
X lỦ lu ng trong Java
• ng dụng máy khách/đơn ngư i dùng:
– Tải dữ liệu / trang Web từ mạng • Java là ngôn ngữ lập trình hướng đối tượng hỗ trợ đa luồng,
– Đáp ng sự kiện GUI trong lúc xử lý IO / Database tiện lợi cho các ng dụng web.
– Tăng tốc xử lý khi có nhiều bộ xử lý • Trong mô hình hướng đối tượng, tiến trình và th tục là th
• ng dụng máy ch : yếu, mọi ch c năng c a chương trình được xác định thông
– Đa kết nối qua các đối tượng.
• Cũng giống như tiến trình, luồng được tạo lập, sau đó thực
• Khó gỡ rối và bảo trì, giới hạn tính khả chuyển
(portable) hiện một số công việc và kết thúc hoạt động khi không còn vai
trò sử dụng.

227 228

38
7/17/2010

1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG

b. T o l p các lu ng
Hai h ng ti p c n Threads trong JAVA class MyClass extends Thread{
1. Xơy d ng lớp con c a l p Thread. // Một số thuộc tính
(Trong Java có một lớp đã được xây dựng sẵn là Thread, public void run(){
Sử dụng Thread làm lớp cơ s để xây dựng những lớp kế thừa // Các lệnh cần thực hiện theo luồng
(lớp con) mới.
}
2. CƠi đặt giao di n Runnable. // Một số phương th c khác được viết đè hay bổ sung
See also: }
http://java.sun.com/docs/books/tutorial/essential/threads/ • Khi chương trình chạy nó sẽ gọi một phương th c đặc biệt đã
được khai báo trong Thread đó là start() để bắt đầu một luồng
đã được tạo ra.
229 230

1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG

b. T o l p các lu ng c. Các tr ng thái c a Thread


• Java không hỗ trợ đa kế thừa. Do đó, nếu ngư i lập trình Một luồng có thể một trong các trạng thái sau:
muốn tạo ra một lớp kế thừa từ một lớp cơ s và để thực hiện new: khi một luồng mới được tạo ra với toán tử new().
được theo luồng thì nó cũng đồng th i phải kế thừa từ lớp ready: khi chúng ta gọi phương th c start() để bắt đầu c a một
luồng.
Thread. Điều này không thực hiện được.
blocked: từ trạng thái runnable chuyển sang trạng thái “bị chặn”
Java giải quyết hạn chế trên bằng cách xây dựng khái niệm
khi gọi một trong các phương th c: sleep(), suspend(), wait(),
Interface. Giao diện hỗ trợ thực hiện theo luồng là Runnable.
hay bị chặn lại ở Input/output.
Ngư i lập trình thiết kế các lớp thực hiện theo luồng bằng
dead: luồng chuyển sang trạng thái “chết” khi nó kết thúc hoạt
cách cài đặt theo giao diện Runnable. động bình thư ng, hoặc gặp phải ngoại lệ không thực hiện
class MyClass implemnets Runnable{ tiếp được.
... Hình dưới đây mô tả sơ đồ chuyển trạng c a các luồng trong hệ
} 231
thống. 232

1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG

Phương th c yield() sẽ ngưng luồng hiện hành để cho


một luồng khác có cùng độ ưu tiên chạy

wait(): giống yield(), nhưng yêu cầu một luồng khác phải
đánh th c nó
while (!condition) wait();

notify(): Luồng nào có thể ảnh hư ng đến condition sẽ


gọi notify() để phục hồi luồng đang ch

Lập trình viên phải chịu trách nhiệm bảo đảm mỗi wait() có
một notify() tương ng

233 234

39
7/17/2010

1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG

d. Đi u gì x y ra khi có Lu ng m i? e. Ch m dứt m t Lu ng

• Luồng kết thúc khi phương th c run() kết thúc


• Luồng chính vẫn tiếp tục
• Luồng mới thi hành phương th c run() và “kết thúc” khi • Tuy nhiên, điều gì xảy ra khi luồng đang “nghỉ”
(sleeping) hoặc đang bị “khóa” (blocked)?
phương th c kết thúc.
• Nếu có bất kỳ luồng nào gọi System.exit(0) thì nó sẽ • Đây là lúc mà vai trò c a phương th c interrupt() được
“giải phóng” tất cả mọi luồng. thể hiện. Khi interrupt() được gọi trên một Luồng đang
bị “khóa”, luồng sẽ bị chấm d t.
• Có thể xem run() như là phương th c chính c a riêng
mỗi luồng

235 236

1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG 1.2 L P TRỊNH CHIA S B NH D A VÀO LU NG


Ví d : s d ng Thread trong JAVA đ tính t ng các ph n
f. Các v n đ khác v Lu ng t c a m t m ng.
• Chia sẻ và đồng bộ hóa
– Các luồng có thể cùng truy cập đến các đối tượng
được kết hợp với một tiến trình đơn.
• Lập lịch
Xem giáo trình
– Nếu (# luồng) != (# vi xử lý), thì việc lập lịch cho các
luồng là một vấn đề
– Các thao tác c a các luồng khác nhau có thể xảy ra
theo th tự bất kỳ
– Các luồng có thể được thiết lập độ ưu tiên

237 238

2. TệNH TOỄN PHÂN TỄN 2. TệNH TOỄN PHÂN TỄN: MỌ HỊNH TRUY N THỌNG ĐI P
Đ nh nghĩa: Tính toán phân tán là những tính toán được thực 4.2.1 Mô hình truy n thông đi p (Message Passing)
hiện trên cơ s kết hợp tính toán và truyền thông c a hai hay • Các đơn vị XLSS trong mô hình truyền thông điệp là các
nhiều máy tính trên mạng. tiến trình.
Ƣu điểm: • Các tiến trình có thể thực hiện trên những bộ xử lý khác
• Cho phép chia sẻ dữ liệu được lưu nhiều máy tính khác nhau và không truy cập được vào không gian địa chỉ chia
nhau (không có bộ nhớ chia sẻ). sẻ.
• Chia sẻ với nhau về một số ch c năng chính c a máy tính. • Chỉ có kênh truyền là có thể chia sẻ cho các tiến trình,
• Độ tin cậy và khả năng th lỗi cao hơn. Trong trư ng hợp có thư ng đó là LAN hoặc mạng diện rộng.
một máy tính bị sự cố thì những máy tính khác có thể thay thế Hiện nay có nhiều công cụ lập trình được sử dụng cho tính
để hoàn thành nhiệm vụ c a hệ thống. toán phân tán nhiều m c độ trừu tượng khác nhau, như
Nhƣợc điểm: PVM, MPI, DCE, v.v.
Những vấn đề liên quan đến việc quản trị hệ thống, định vị tài • Trong các hệ thống phân tán không có bộ nhớ chia sẻ để
nguyên, vấn đề đảm bảo an toàn, an ninh thông tin, v.v. không trao đổi dữ liệu với nhau việc trao đổi được thực hiện bằng
bằng hệ tập trung cách truyền thông điệp. Mô hình Client-Server cũng có thể
sử dụng cơ chế này để cài đặt.
239 240

40
7/17/2010

II. TệNH TOỄN PHÂN TỄN: MỌ HỊNH TRUY N THỌNG ĐI P II. TệNH TOỄN PHÂN TỄN: MỌ HỊNH TRUY N THỌNG ĐI P

1. Mô hình truy n thông đi p (Message Passing)


2. Mô hình t ng quát
• Việc truyền thông và đồng bộ hoá hoạt động c a các tiến trình
được thực hiện thông qua hai phương th c send() và • Trong mô hình truyền thông điệp, các tiến trình chia sẻ với
receive(). nhau kênh truyền thông.
• Tất cả các biến là biến cục bộ c a các tiến trình. Vì thế, những • Các kênh được truy cập bởi hai phương thức: send() và
vấn đề về xung đột dữ liệu (cần phải khoá dữ liệu khi một tiến
receive().
trình truy cập), hay tranh chấp thông tin không xuất hiện trong
mô hình này. • Để bắt đầu trao đổi được với nhau thì một tiến trình phải gửi
• Việc đồng bộ hoá các tiến trình c a một chương trình song đi (send) một thông điệp vào kênh truyền và có một tiến trình
song cũng được thực hiện theo có chế truyền thông điệp. khác yêu cầu nhận (receive) thông điệp đó.
Nghĩa là, khi một tiến trình muốn gửi một thông điệp thì nó
• Sự trao đổi được hoàn tất khi dữ liệu đã được chuyển từ nơi
phải chờ cho đến khi tiến trình nhận sẵn sàng nhận thông điệp
đó và ngược lại, cũng tương tự. đây không có các buffer để gửi tới nơi nhận.
tạm lưu giữ các thông điệp cần trao đổi giữa các tiến trình.
241 242

II. TệNH TOỄN PHÂN TỄN: MỌ HỊNH TRUY N THỌNG ĐI P II. TệNH TOỄN PHÂN TỄN: MỌ HỊNH TRUY N THỌNG ĐI P

2. Mô hình t ng quát M t s v n đ nƣy sinh trong d b


Có hai loại mô hình truyền thông điệp: dị bộ và đồng bộ • Khi tiến trình A gửi một thông điệp cho tiến trình B thì sau đó
a.Truyền thông điệp dị bộ: A cần phải biết xem B có nhận được hay không. Nghĩa là A
• Trong mô hình này, một kênh truyền được giả thiết là có khả phải ch để nhận được câu trả l i khẳng định c a B.
• Việc phân phát thông điệp cũng không thể đảm bảo rằng
năng tiếp nhận không bị giới hạn (bằng cách sử dụng buffer)
không bị thất bại. Nếu A gửi đi một thông điệp cho B và
để tiếp nhận các thông điệp gửi đến cho mỗi tiến trình.
không nhận được câu trả l i thì nó cũng không có cách nào
• Do đó, tiến trình gửi sẽ không phải ch để tiến trình nhận sẵn biết được là thông điệp đó đã được gửi đến đích chưa hoặc
sàng nhận mà c gửi khi có yêu cầu. tiến trình B bị huỷ bỏ trong quá trình xử lý hoặc ngay cả khi
• Hai tiến trình gửi và nhận có thể hoạt động gần như độc lập câu trả l i c a B không đến được A.
nhau và thông điệp có thể nhận được sau một khoảng th i • Các thông điệp đều phải đưa vào bộ đệm (hàng đợi), nhưng
gian nào đó (lâu bất kỳ) kể từ khi nó được gửi đi. trong thực tế không gian hàng đợi là hữu hạn. Khi có quá
• Tiến trình nhận thì phải ch cho đến khi có được thông điệp nhiều thông điệp được gửi đi thì hoặc chương trình sẽ
c a một tiến trình khác gửi cho nó. không thực hiện được hoặc phương th c gửi bị chặn lại.
Điều này vi phạm ngữ nghĩa c a mô hình truyền thông điệp
243
dị bộ. 244

II. TệNH TOỄN PHÂN TỄN: MỌ HỊNH TRUY N THỌNG ĐI P III. MỌ HỊNH L P TRỊNH

b.Truy n thông đi p đ ng b : (Trong phần này chúng ta định nghĩa mô hình lập trình cho hệ thống
• Trong mô hình này, tiến trình gửi bị chặn lại cho đến khi truyền thông điệp dị bộ.)
tiến trình nhận sẵn sàng nhận. đây, sự truyền thông và • Lập trình theo mô hình truyền thông điệp trong hệ thống nhiều
đồng bộ hoá luôn gắn chặt với nhau. Mô hình này có thể máy tính có thể thực hiện theo ba cách:
tìm thấy những hệ thống đa bộ xử lý được cài đặt dựa 1. Sử dụng NNLT song song đặc biệt, ví dụ Occam được thiết kế
trên các Transputer. để sử dụng với các Transputer (Inmos 1986)

• Hệ thống truyền thông điệp đồng bộ hoàn toàn giống như 2. Sử dụng NNLT bậc cao (tuần tự) truyền thống được m rộng
hệ điện thoại, kênh truyền bị chặn lại trong quá trình đàm bằng cách bổ sung thêm các từ khoá và m rộng cú pháp để
thoại. Hệ truyền dị bộ lại giống nhiều hơn với hệ thống bưu xử lý việc trao đổi thông điệp, ví dụ CC++ (m rộng c a C++)
chính, ngư i nhận phải ch cho đến khi có thư được gửi
đến. 3. Sử dụng những NNLT bậc cao và cung cấp hệ thống chương
• Hầu hết các thư viện lập trình hỗ trợ mô hình truyền thông trình thư viện gồm những th tục xử lý việc trao đổi thông
điệp dị bộ. điệp, ví dụ ngôn ngữ C và hệ chương trình thư viện để chạy
với PVM.
245 246
Chúng ta tập trung nghiên cứu cách thứ ba.

41
7/17/2010

III. MỌ HỊNH L P TRỊNH III. MỌ HỊNH L P TRỊNH

1. Phát sinh các ti n trình con (1/5) 1. Phát sinh các ti n trình con (2/5)
Mục đích: a.Tạo lập tiến trình tĩnh:
• Để thực hiện những công việc con của một chương trình song • Tất cả các tiến trình phải được xác định trước khi thực hiện

song. • Trong hệ thống có một số tiến trình được xác định trước:
 một tiến trình điều khiển còn được gọi là tiến trình chủ
• Việc phát sinh tiến trình con thư ng xảy ra khi một chương
(master),
trình bắt đầu thực hiện như một tiến trình và sau đó phát sinh
 những tiến trình khác được gọi là tiến trình tớ (slave).
ra nhiều tiến trình con để khai thác khả năng song song c a
• Sau khi chương trình nguồn được viết với các lệnh phân chia
bài toán.
công việc cho từng tiến trình, nó sẽ được dịch sang mã thực
Có hai cách tạo lập tiến trình: tạo lập tĩnh và tạo lập động.
thi được cho những tiến trình đó.

247
• Quá trình này được mô tả như hình sau: 248

III. MỌ HỊNH L P TRỊNH III. MỌ HỊNH L P TRỊNH

1. Phát sinh các ti n trình con (3/5) 1. Phát sinh các ti n trình con (4/5)
Ch ng
trình b.Tạo lập tiến trình động:
 Các tiến trình được tạo lập sau đó chúng có thể thực hiện
ngu n

Biên d ch theo trong các tiến trình khác.


 Các tiến trình có thể được tạo lập mới, bị huỷ bỏ có điều kiện
Đo n các b x lỦ Đo n
ch ng ch ng
trình trình
th c thi th c thi hoặc một số tiến trình có thể thay đổi trong quá trình thực
hiện.
 Kiến trúc cho phép thực hiện tạo lập tiến trình động là MPMD

BXL 0 (MIMD), trong đó những chương trình khác nhau có thể thực
BXL n-1
D ch đ n ch ng trình, đa thao tác d li u hiện trên những bộ xử lý khác nhau.
Hệ thư viện MPI được xây dựng theo cách tạo lập tĩnh như trên 249 250

III. MỌ HỊNH L P TRỊNH III. MỌ HỊNH L P TRỊNH

1. Phát sinh các ti n trình con (5/5) Tiểu luận: tìm hiểu về MPI:
Tất cả các hệ thư viện truyền thông điệp đều có hàm phát sinh http://www-unix.mcs.anl.gov/mpi/
các tiến trình con với cấu trúc tổng quát như sau: http://www.mpi-forum.org/
spawn(prog: string, host: int, count: int, id[]:int) http://en.wikipedia.org/wiki/Message_Passing_Interface
Trong đó,
• prog: tên chương trình được nạp xuống như là chương trình
con.
Kết quả khi thực hiện thành công sẽ trả lại mảng id là địa chỉ
c a các tiến trình được tạo ra để truyền thông điệp. Mảng id
có chỉ số từ 1, tiến trình đầu tiên c a chương trình song song
có chỉ số là 0.
• host: tên c a tiến trình mà đó các tiến trình con được tạo ra.
• count: số các đại diện c a chương trình được tạo ra.
251 252

42
7/17/2010

ASSIGNMENT: Parallel Programming with MPI III. MỌ HỊNH L P TRỊNH


http://www.cs.usfca.edu/mpi/ http://www.mcs.anl.gov/learning.html
2. Ng nghĩa c a kênh truy n (1/2)
http://www-unix.mcs.anl.gov/mpi/ http://www.mpi-forum.org/
• Những hệ thống khác nhau sẽ cung cấp những kênh truyền
những m c trừu tượng khác nhau.
• Hầu hết các hệ thống đều đảm bảo rằng các kênh truyền
thông không có các lỗi thông thường. Nghĩa là, tất cả các
thông điệp được gửi đi và sẽ đến được đích mà không bị sai
lạc.
• Kênh truyền thông có thể được xem như là hàng đợi, và thông
điệp sẽ được gửi đến đích theo th tự nó được gửi đi.
• Kênh truyền thông cũng có thể được xem như là hộp thư
(mailbox) c a một tiến trình nhận/gửi thông điệp. m c trừu
tượng này sẽ loại bỏ được ràng buộc về th tự đến c a các
thông điệp.
• Tiến trình có thể chọn các thông điệp từ hộp thư theo một số
253
tiêu chí nào đó. 254

III. MỌ HỊNH L P TRỊNH III. MỌ HỊNH L P TRỊNH


2. Ng nghĩa c a kênh truy n (1/2)
3. Các hƠm send() vƠ receive()
• Một số hệ thống đưa ra khái niệm thông điệp có cấu trúc. Các
kênh được định nghĩa theo các kiểu c a thông điệp và một số • Việc gửi một thông điệp được thực hiện bằng cách xác định
kênh đặc biệt chỉ truyền tải được một số kiểu nhất định.
• Một tiến trình muốn gia nhập vào một kênh có kiểu xác định địa chỉ c a một hay tất cả các tiến trình nhận theo một kênh
thì phải tự gắn bó với kênh đó.
• Một kênh cũng có thể phục vụ cho một nhóm các tiến trình truyền.
trong một chương trình song song. • Việc lựa chọn thông điệp để nhận có thể dựa vào tiến trình
• Các kênh được mô tả như sau:
1. Khai báo một kênh được gắn với kiểu gửi, kênh truyền, hay thẻ bài (tag) c a thông điệp, v.v.
channel mych(id1:type1, id2:type2, …, idn:typen)
Kênh mych chuyển tải được những thông điệp được xác định • L i gọi send() là không bị chặn, không phải ch câu trả l i
như trong các đối số.
c a nơi nhận. Nhưng l i gọi receive() sẽ bị chặn lại, chỉ có
2. Gắn tiến trình với kênh truyền
join_channel(mych: string); tiếp tục khi có một thông điệp tương ứng đã được gửi đi.
Gọi tiến trình hiện th i để gia nhập vào kênh mych. 255 256

III. MỌ HỊNH L P TRỊNH III. MỌ HỊNH L P TRỊNH

Ví dụ: trong C chúng ta có thể gọi


3. Các hƠm send() vƠ receive()
send(&x, destination_id); { tiến trình nguồn}
• Gửi thông điệp cho một tiến trình id: receive(&y, source_id); { tiến trình đích}
send(id: int, message: message_type); để gửi giá trị dữ liệu x từ tiến trình nguồn (source-id) sang
send(id: int, tag: int, message: message_type); biến y cho tiến trình đích.
• Gửi thông điệp tới một kênh: một thông điệp có thể gửi cho tất
Ti n trình 1
cả các tiến trình trên cùng một kênh mych.
Ti n trình 2
send(mych: channel, message: message_type); x
• Nhận thông điệp từ một kênh: để nhận một thông điệp đang . y
ch đợi từ một kênh thì có thể sử dụng l i gọi hàm sau: . .
. .
receive(mych: channel, message: message_type); send(&x, 2); .
• Nếu thông điệp được ghi thẻ thì tiến trình nhận có thể phân . receive(&y, 1);
loại thông điệp trong hộp nhận và chọn thông điệp theo thẻ . .
xác định. . .
.
receive(id: int, tag: int, msg: message_type);
257 S trao đ i thông đi p gi a hai ti n trình 258

43
7/17/2010

III. MỌ HỊNH L P TRỊNH III. MỌ HỊNH L P TRỊNH

4. Truy v n trên kênh 5. Truy n thông theo nhóm


M c đích: kiểm tra thông điệp gửi đi có đến đích hay không? Mục đích: Nhiều chương trình cần phát tán và nhận dữ liệu từ
Để giải quyết vấn đề này, hầu hết các chương trình thư viện nhiều tiến trình phân tán, nghĩa là cần trao đổi với từng nhóm
cung cấp các hàm truy vấn để biết các trạng thái c a kênh trong chương trình song song.
Các hàm để thực hiện truyền thông theo nhóm:
truyền. Broadcast(mych:channel,tag:int, msg:message_type); phát tán
cùng một thông điệp cho tất cả các tiến trình trên kênh mych.
1. Kiểm tra xem trên kênh có những thông điệp gửi đến cho tiến Các tiến trình tham gia
Ti n trình 0 Ti n trình 1 Ti n trình n-1
trình? trao đổi trong phát tán dữ
D li u
empty(ch: channel); D li u D li u liệu phải được xác định.
tiến trình số 0 được xem
2. Hàm gọi để xác định xem thông điệp đang chờ để nhận có buf như tiến trình gốc ch a
.. ..
..
dữ liệu mảng buf để
phải được gửi từ tiến trình id và có thẻ tag? .
Broadcast();
.
Broadcast();
.
Broadcast(); phát tán cho những tiến
probe(id: int, tag: int); . . .
trình khác.
. . .
. . .
T t c các ti n trình đ u g i hƠm Broadcast(). HƠnh đ ng phát tán d li u s
không th c hi n đ c cho đ n khi t t c các ti n trình đ u th c hi n l i g i
259 Broadcast(). 260

III. MỌ HỊNH L P TRỊNH III. MỌ HỊNH L P TRỊNH


5. Truy n thông theo nhóm
Ví dụ: sơ đồ dưới đây mô tả hàm Reduce() tập hợp các giá trị từ
5. Truy n thông theo nhóm n tiến trình và thực hiện phép cộng (SUM) tiến trình gốc.
Reduce(): thực hiện phép toán số học/logic trong nhóm các tiến Ti n trình 0 Ti n trình 1 Ti n trình n-1

trình và gửi kết quả tới tiến trình gốc.


D li u D li u D li u
Reduce(mych:channel,op:op_type, res:Result_type,
buf
root: int,tag:int, msg:message_type); ... + ... ...
Reduce(); Reduce(); Reduce();
Trong đó, . . .
. . .
.
Op_type = {MAX, MIN, SUM, PROD, LAND, LOR, BAND, . .

BOR, LXOR, BXOR}}

261 262

III. MỌ HỊNH L P TRỊNH III. MỌ HỊNH L P TRỊNH

Scatter(): phân tán công việc cho các tiến trình. Dữ liệu mảng Gather(): dữ liệu được gửi đi theo hàm Scatter() được xử lý b i
buff được chia nhỏ thành n đoạn và phân tán cho n tiến trình những tiến trình nhận được và sau đó được tập hợp lại cho
trên kênh mych. một tiến trình.
Scatter(mych:channel, n:int, Buff[N]:DataType); Gather(mych:channel,Buff[N]:DataType,root:int,sendbuff[N]:Data
Hàm này được sử dụng để gửi phần tử th i c a một mảng dữ Type);
liệu tới cho tiến trình th i. Ngược lại hàm Scatter(), dữ liệu từ tiến trình th i được nhận về
tiến trình gốc và được đưa vào phần tử th i c a mảng buf,
Ti n trình 0 Ti n trình 1 Ti n trình n-1 Ti n trình 1 Ti n trình n-1
Ti n trình 0

D li u D li u D li u
D li u D li u D li u

buf
.. .. .. buf
... ... ...
. . .
Gather(); Gather(); Gather();
Scatter(); Scatter(); Scatter();
. . .
. . .
. . .
. . .
. . .
. . .
263 264

44
7/17/2010

III. MỌ HỊNH L P TRỊNH IV. L P TRỊNH TRểN C M MỄY

Barrier(): thực hiện việc đồng bộ hoá những tiến trình cùng gia
nhập một kênh truyền. Mỗi tiến trình phải ch cho đến khi tất
cả các tiến trình khác trên kênh đạt đến điểm đồng bộ hoá
bằng l i gọi Barrier() trong chương trình.
Barrier(mych:channel);

265 266

IV. L P TRỊNH TRểN C M MỄY TệNH IV. L P TRỊNH TRểN C M MỄY TệNH

Nhận xét 1: Nhận xét 2:


• Mô hình truyền thông điệp được sử dụng rất hiệu quả để lập • Cụm máy tính trong PVM phải được xác định theo các m c
trình song song theo cụm máy tính. ưu tiên để thực hiện các chương trình.
• PVM cung cấp môi trư ng phần mềm để truyền thông điệp • Cách thực hiện tốt nhất là tạo ra một danh sách tên gọi c a
cho các cụm máy tính thuần nhất và cả không thuần nhất. các máy tính và đặt hostfile. Tệp này được PVM đọc để
• PVM có một tập hợp các hàm thư viện được viết bằng C thực hiện các chương trình.
hoặc Fortran. • Mỗi máy tính có thể chạy một hay nhiều tiến trình (chương
• Mỗi chương trình được viết bằng C, được biên dịch để chạy trình ng dụng).
trên những kiểu máy tính xác định trên mạng. • Các chương trình ng dụng chạy trong các máy tính thông
• Mỗi nút trong mạng (LAN) phải truy cập đến hệ thống tệp qua các tiến trình c a PVM để trao đổi với nhau trên mạng.
ch a các chương trình đã được dịch để thực hiện. Các tiến trình PVM yêu cầu đ thông tin để chọn lựa đư ng
truyền dữ liệu.
267 268

IV. L P TRỊNH TRểN C M MỄY TệNH IV. L P TRỊNH TRểN C M MỄY TệNH

Máy tính
• Các chương trình c a PVM thư ng được tổ ch c theo mô
tr m
PVM hình chủ-tớ (master-slave), trong đó tiến trình ch được thực
Ch.trình
Máy tính Máy tính hiện trước tiên, sau đó các tiến trình tớ sẽ được tạo ra trong
ứng d ng
tr m tr m
Trao đ i thông
tiến trình ch đó.
PVM PVM
đi p trên m ng
Ch.trình Ch.trình M t s hƠm thông d ng trong PVM:
ứng d ng ứng d ng
• pvm_spawn(): phát sinh tiến trình mới trong PVM
• pvm_mytid(): ghi danh tiến trình muốn tham gia vào hệ PVM
• pvm_exit(): huỷ bỏ tiến trình
• pvm_send() và pvm_recv(): Các chương trình trao đổi thông
Sự trao đổi thông điệp c a các máy tính trong hệ PVM
điệp với nhau.
269 270

45
7/17/2010

IV. L P TRỊNH TRểN C M MỄY TệNH IV. L P TRỊNH TRểN C M MỄY TệNH

Hình dưới đây mô tả hoạt động c a hai tiến trình trao đổi một
• Tất cả các th tục gửi đều không bị chặn (dị bộ) còn các th
mảng dữ liệu với nhau.
tục nhận thì hoặc bị chặn (được đồng bộ) hoặc không bị chặn.

• Các thao tác chính c a việc gửi và nhận dữ liệu được thực Ti n trình 1
send buffer Ti n trình 2
hiện các bộ đệm buffer.
.
. .
• Nếu dữ liệu được gửi đi là một danh sách các mục có cùng . .
pvm_send(); .
kiểu thì trong PVM sử dụng Ti p t c . Ch thông pvm_precv();
x lỦ . đi p .
pvm_psend() và pvm_precv(). . .
.

Gọi hàm pvm_psend() và pvm_precv()


271 272

IV. L P TRỊNH TRểN C M MỄY TệNH IV. L P TRỊNH TRểN C M MỄY TệNH

• Khi dữ liệu chuyển đi là ph c tạp, gồm nhiều kiểu khác nhau Tương tự, các lệnh khác về trao đổi thông điệp theo nhóm như:
thì chúng phải được đóng gói lại (pack) để gửi đến buffer, sau
• pvm_bcast()
đó tiến trình nhận lại m gói (unpack) để nhận về dữ liệu
• pvm_scatter()
tương ng. Đó là các hàm:
pvm_pkint() và pvm_upkint() dùng cho dữ liệu kiểu int • pvm_gather()

pvm_pkfloat() và pvm_upkfloat() dùng cho dữ liệu kiểu float • pvm_reduce(), v.v.


pvm_pkstr() và pvm_upkstr() dùng cho dữ liệu kiểu string, v.v.
Lưu ý: th tự m gói để lấy dữ liệu ra phải đúng theo th tự mà
chúng được đóng gói tiến trình gửi. Bộ đệm buffer để gửi Xem ví dụ tài liệu
dữ liệu là mặc định và nó phải được kh i tạo tiến trình gửi
bằng lệnh pvm_inítend(). 273 274

V. ĐỄNH GIỄ CH NG TRỊNH SONG SONG

Tiểu luận: tìm hiểu về PVM Th i gian th c hi n song song tp = tcomp + tcomm
http://www.csm.ornl.gov/pvm/manpages.html
http://www.netlib.org/pvm3/ Trong đó,
tcomp : th i gian tính toán ; tcomm : th i gian truyền thông.
• Th i gian tính toán tcomp được xác định giống như thuật toán
tuần tự.
• Khi có nhiều tiến trình thực hiện đồng th i thì chỉ cần tính th i
gian thực hiện c a tiến trình ph c tạp 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 đó, việc đánh giá th i
gian tính toán c a những hệ như thế là khó.
275 276

46
7/17/2010

V. ĐỄNH GIỄ CH NG TRỊNH SONG SONG V. ĐỄNH GIỄ CH NG TRỊNH SONG SONG

Ví dụ: Bài toán được phát biểu như sau:


1. Máy tính 1 gửi n/2 số cho máy tính 2
Giả sử cần cộng n số trên hai máy tính, trong đó mỗi máy
2. Cả hai máy tính cộng n/2 số một cách đồng th i
cộng n/2 số với nhau và lưu máy tính c a mình. 3. Máy tính 2 chuyển kết quả tính được về máy tính 1
Kết quả c a máy tính th hai khi được tính xong sẽ được 4. Máy tính 1 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): tcomp = n/2 + 1
chuyển về máy tính th nhất để nó cộng hai kết quả bộ
Thời gian truyền thông ( bước 1 và 3):
phận với nhau. tcomm = (tstartup + n/2 * tdata) + (tstartup + tdata)
= 2*tstartup + (n/2 + 1) * tdata
Độ 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 chung c a thuật toán là
277 O(n). 278

BƠi t p BƠi t p

4.1 Cho đoạn chương trình 4.3 Viết chương trình song song với độ ph c tạp O(log n)
để tính giá trị c a đa th c
printf(“I am here\n”); F = a0x0 + a1x1 + a2x2 + … + an-1xn-1
id = create_process(15);
4.4 Viết chương trình song song để tính n! sử dụng hai
printf(“%d is here\n”, id);
tiến trình thực hiện đồng th i. Mỗi tiến trình tính gần một
Bao nhiêu dòng in ra “ … is here”, số hiệu c a tiến trình in ra nửa dãy kết quả và một tiến trình ch kết hợp hai kết
có theo một trật tự cố định qua các lần thực hiện hay quả lại.
không? 4.5 Viết chương trình song song để tìm ra tất cả các số
nguyên tố nhỏ hơn hoặc bằng N.
4.2 Viết một đoạn chương trình để tạo ra hai tiến trình và
4.6 Viết chương trình song song theo luồng (Thread) để
thực hiện tính 2+4+6+8 song song. tính xác định giá trị cực đại c a N phần tử.

279 280

BƠi t p BƠi t p

4.7 Viết chương trình song song theo luồng trong mô hình 4.10 Ngư i ta viết đoạn chương trình sau để thực hiện
chia sẻ bộ nhớ để thực hiện nhân hai ma trận cấp nn. chuyển vị ma trận
4.8 Xây dựng hệ xử lý hình ống để tính sin x forall (i = 1; i < n; i++)
sin x = x – x/3 + x/5 – x/7 + x/9 + . . . forall(j = 0; j < n; j++)
4.9 Cho biết kết quả in ra c a đoạn chương trình sau:
a[i][j] = a[j][i];
j = 0;
Đoạn chương trình trên có thực hiện được không? nếu không
k = 0;
forall (i = 1; i <= 2; i++){ thực hiện được thì hãy viết lại chương trình khác để thực
j += 10; hiện được việc chuyển vị ma trận.
k += 100;}
printf(“i = %d, j = %d, k = %d\n”,i,j,k)
281 282

47
7/17/2010

CH NG 5. THU T TOỄN SONG SONG 5.1 NGUYểN Lụ THI T K THU T TOỄN SONG SONG

NỘI DUNG Thuật toán song song?

1. Nguyên lỦ thi t k thu t toán song song


Những thuật toán, trong đó có một số thao tác có thể thực
2. Các cách ti p c n trong thi t k TTSS hiện đồng th i được gọi là thuật toán song song.

3. Phơn tích vƠ đánh giá thu t toán song song


Tổng quát, thuật toán song song là một tập các tiến trình
(process) hoặc các tác vụ (task) có thể thực hiện đồng thời
4. Các thu t toán s p x p, tìm ki m song song
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.
5. M t s thu t toán song song thông d ng.
283 284

5.1 NGUYểN Lụ THI T K THU T TOỄN SONG SONG 5.1 NGUYểN Lụ THI T K THU T TOỄN SONG SONG

05 câu hỏi đặt ra trước khi thiết kế một thuật toán song song? Các nguyên lý cơ bản trong thiết kế TTSS (1/2)
1. Nguyên lý lập lịch:
Giảm tối thiểu các bộ xử lý sử dụng trong thuật toán sao
1. Việc phân chia dữ liệu cho các tác vụ như thế nào? cho thời gian tính toán là không tăng (xét theo khía cạnh
độ phức tạp).
2. Dữ liệu được truy cập như thế nào, Nghĩa là, nếu độ phức tạp tính toán của thuật toán là
O(f(n)) thì thời gian thực hiện của chương trình có thể
3. Những dữ liệu nào cần phải chia sẻ? tăng khi số bộ xử lý giảm, và thời gian tính toán tổng thể
tăng lên một hằng số nào đó - nhưng vẫn là O(f(n)).
4. Phân các tác vụ cho các tiến trình (bộ xử lý) như thế nào?
2. Nguyên lý hình ống: Nguyên lý này được áp dụng khi
5. Các tiến trình được đồng bộ hóa ra sao?
bài toán xuất hiện một dãy các thao tác {T1, T2, . . ., Tn },
trong đó Ti+1 thực hiện sau khi Ti kết thúc.

285 286

5.1 NGUYểN Lụ THI T K THU T TOỄN SONG SONG 5.1 NGUYểN Lụ THI T K THU T TOỄN SONG SONG

Các nguyên lý cơ bản trong thiết kế TTSS (2/2) Ngoài ra khi thiết kế TTSS cần phải quan tâm
3. Nguyên lý chia để trị:  Cấu hình tô pô liên kết mạng: cũng một thuật toán song
Chia bài toán thành những phần nhỏ hơn tương đối độc song cài đặt trên hai máy tính có cấu hình tô pô liên kết
lập với nhau và giải quyết chúng một cách song song. mạng khác nhau thì có thể có độ ph c tạp khác nhau.

4. Nguyên lý đồ thị phụ thuộc dữ liệu: Ví dụ: DAP là máy tính kiểu SIMD với 64 * 64 bộ xử lý, th i
Phân tích mối quan hệ dữ liệu trong tính toán để xây dựng gian nhân ma trận là tuyến tính theo kích cỡ c a ma trận
đồ thị phụ thuộc dữ liệu và dựa vào đó để xây dựng thuật và phụ thuộc vào đư ng truyền dữ liệu giữa các hàng với
toán song song. cột.

5. Nguyên lý điều kiện tƣơng tranh:  Nhiều thuật toán song song được thiết kế dựa trên những
Nếu hai tiến trình cùng muốn truy cập vào cùng một mục kiến th c về kiến trúc máy tính, ngôn ngữ lập trình song
dữ liệu chia sẻ thì chúng phải tương tranh với nhau, nghĩa song và các phương pháp tính toán.
là chúng có thể cản trở lẫn nhau.
287 288

48
7/17/2010

5.2 CỄC CỄCH TI P C N TRONG THI T K TTSS 5.2 CỄC CỄCH TI P C N TRONG THI T K TTSS

Có ba cách ti p c n đ thi t k thu t toán song song:


Chú Ủ:
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ả khi chuy n m t thu t toán tu n t sang thu t
năng song song tự nhiên c a tất cả các thành phần trong toán song song hoặc chuy n m t TTSS thích
hệ thống xử lý.
h p v i ki n trúc đang có.
C n tr l i hai cơu h i:
2. Thiết kế những thuật toán song song mới phù hợp với kiến 1. Ki n trúc nƠo phù h p cho bƠi toán?
trúc song song.
2. Nh ng bƠi toán lo i nƠo s x lỦ hi u qu
3. Xây dựng những thuật toán song song từ những thuật toán trong ki n trúc song song cho tr c?
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 n xét: Cách 1 vƠ 2 lƠ thông d ng nh t 289 290

5.3 PHÂN TệCH VÀ ĐỄNH GIỄ THU T TOỄN SONG SONG 5.3 PHÂN TệCH VÀ ĐỄNH GIỄ THU T TOỄN SONG SONG

Đ phức t p: Tu n t ?
Đ nh nghĩa: Một thuật toán có độ ph c tạp tính toán
- Th i gian f(x) = O(g(x))   C0, x0N sao cho 0 ≤ f(x) ≤ C*g(x), với
mọi số lượng dữ liệu vào x ≥ x0.
- Không gian
Ví dụ: cho f(n) = 1+2+...+n
Đ phức t p: Vì f(n)  n + n + ... + n = n2 nên f(n) là O(n2) với C=x0=1

- Tu n t Song song?
Độ ph c tạp tính toán c a TTSS không chỉ phụ thuộc vào kích
- Song song 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.
291 292

5.3 PHÂN TệCH VÀ ĐỄNH GIỄ THU T TOỄN SONG SONG 5.3 PHÂN TệCH VÀ ĐỄNH GIỄ THU T TOỄN SONG SONG

Song song? Các đ nh nghĩa


Độ phức tạp theo thời gian của TTSS sử dụng p bộ xử lý để Đ nh nghĩa 1 (định lý Brent):
giải một bài toán có kích cỡ n là hàm f(n,p) xác định thời
Một thuật toán song song có độ ph c tạp tính toán O(T) với
gian cực đại 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 P bộ xử lý khi nó thực hiện nhiều nhất là O(T* P) phép toán
bộ dữ liệu vào bất kỳ. cơ s .

Có hai loại phép toán khác nhau trong các TTSS:


• Các phép toán cơ s như +, -, *, /, AND, OR, v.v. (giới hạn số lượng phép toán cơ s được thực hiện c a
• Các phép toán truyền dữ liệu trên các kênh truyền. một thuật toán có độ ph c tạp cho trước)

293 294

49
7/17/2010

5.3 PHÂN TệCH VÀ ĐỄNH GIỄ THU T TOỄN SONG SONG 5.3 PHÂN TệCH VÀ ĐỄNH GIỄ THU T TOỄN SONG SONG

Các đ nh nghĩa Các đ nh nghĩa


Đ nh nghĩa 2:
Một thuật toán song song có độ ph c tạp tính toán O(T) sử Đ 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
dụng nhiều bộ xử lý để thực hiện O(e) phép toán cơ s thì
P bộ xử lý có thể cài đặt với [P/p], 1≤ p ≤ P bộ xử lý thì sẽ
khi cài đặt với P bộ xử lý sẽ có độ ph c tạp th i gian là
có độ ph c tạp th i gian là O(p*T).
O([e/P]+ T).
Định nghĩa 3 khẳng định rằng có cách để cài đặt thuật toán
Định nghĩa 2 chỉ ra rằng khi số bộ xử lý được sử dụng giảm song song khi số các bộ xử lý được sử dụng bị giảm
xuống trong một phạm vi nhất định thì thuật toán tiếp tục xuống.
làm việc nhưng th i gian thực hiện sẽ tăng lên.

295 296

5.3 PHÂN TệCH VÀ ĐỄNH GIỄ THU T TOỄN SONG SONG 5.4 NH NG BÀI TOỄN Gi I Đ C TRểN MỌ HỊNH PRAM

• Mức độ song song của thuật toán: • P: lớp các bài toán có thể giải được trong th i gian đa th c
là số lượng cực đại các phép toán độc lập có thể thực hiện • NP là lớp các bài toán, mà mọi nghiệm giả định đều có thể
đồng thời ở mỗi thời điểm thực hiện của thuật toán. được kiểm ch ng trong th i gian đa th c.
• Hệ số gia tốc: để biết mức độ song song hóa của TTSS • Hiển nhiên P NP.
Hệ số gia tốc của TTSS sử dụng p bộ xử lý được xác định:
• Gọi C là bài toán khó nhất trong NP. C được gọi là NP-đầy
Sp  s
T đ .
Trong đó, Tp
NP-đầy đ
+ TS là thời gian thực hiện tính toán trên một bộ xử lý Nếu CP thì kết luận P=NP
NP
+ Tp là thời gian thực hiện tính toán trên p bộ xử lý. Nếu CP thì kết luận PNP

P  NP ?
Với giả thiết là bộ xử lý tuần tự và các bộ xử lý song song là P-đầy đ
như nhau. P
NC

297 298

5.4 NH NG BÀI TOỄN Gi I Đ C TRểN MỌ HỊNH PRAM 5.4 NH NG BÀI TOỄN Gi I Đ C TRểN MỌ HỊNH PRAM

N u P = NP ? Giả sử T(n) là hàm xác định trên biến nguyên n. Ta ký hiệu:


+ T(n)O(1) - tập các hàm luỹ thừa c a T(n).
+ (logn)O(1) - tập các hàm luỹ thừa c a logarit.
Ví dụ: log2n, log5n  lognO(1), n2, n5  nO(1) và e2n, e5n  (en)O(1)
• Mọi bài toán kiểm ch ng được thì cũng giải được
dễ dàng .
M nh đ 5.1 (định đề tính toán song song): Lớp các bài toán
• Các bài toán tối ưu tổ hợp đều giải được trong th i giải được trong th i gian T(n)O(1) b i mô hình PRAM bằng
gian đa th c. lớp tất cả các bài toán giải được trong không gian T(n) O(1)
b i mô hình RAM (máy tính tuần tự với bộ nhớ ngẫu nhiên)
• Mối lo lắng về sự bùng nổ tổ hợp không còn phải nếu T(n)logn.
quan tâm Từ định đề này suy ra: PRAM có thể giải được những bài
• Một loạt các hệ mã khoá công khai dựa trên giả toán NP-đầy đ trong th i gian đa th c.

thiết PNP sẽ bị đổ vỡ. See also: pages 45-48 Parallel computing by Michael J. Quinn
299 300

50
7/17/2010

5.5 CỄC C U TRÚC L NH SONG SONG 5.5 CỄC C U TRÚC L NH SONG SONG

1. Kh i các l nh song song: 2. C u trúc forall (parfor)


Parbegin và Parend (Cobegin và Coend): Giả sử các lệnh S1, Nhiều khi một số tiến trình (câu lệnh) tương tự nhau cần phải
S2, … Sn được thực hiện trên n tiến trình riêng biệt bắt đầu thực hiện và cùng lặp lại một số lần. Điều này có thể
thực hiện được bằng cấu trúc forall
Parbegin Cobegin
For(i=0;i<n;i++){ Forall(i=0;i<n; i++){
S1; S1;
S1; S1;
S2; S2;
S2; Hoặc S2;
... ...
... ...
Sn; Sn;
Sn; Sn;
Parend Coend
} }
In parallel Parend
301 302

5.6 CỄC THU T TOỄN S P X P SONG SONG 5.6 CỄC THU T TOỄN S P X P SONG SONG

1. Thu t toán s p x p theo h ng Thu t toán song song-S d ng n b x lỦ


BƠi toán: cho mảng a[n] các số nguyên. Hãy sắp xếp tăng Giả sử ta có n bộ xử lý. Mỗi bộ xử lý được cấp một số trong
dần các phần tử c a mảng. dãy số cho trước và nó phải tìm vị trí c a số đó trong dãy
ụ t ng thu t toán: Trong cách sắp xếp này, số những số được sắp xếp.
nhỏ hơn một số đã chọn sẽ được đếm. Số đếm được sẽ
xác định vị trí c a phần tử đã được chọn trong danh sách for(i=0; i<n; i++){ // n bộ xử lý thực hiện song song
cần sắp xếp. Giả sử có n số được lưu giữ trong mảng a[n] x = o;
và kết quả sau khi sắp xếp là b[n]. for(j=0; i<n; j++)
Thu t toán tu n t : if(a[i]>a[j]) x++; // đếm số phần tử nhỏ hơn
for(i = 0; i < n; i++){ b[x] = a[i]; // Sao sang bảng được sắp xếp
x = o; }
Độ ph c tạp O(n2) for(j = 0; i < n; j++)
if(a[i] > a[j]) x++; Nhận xét: Tất cả n bộ xử lý thực hiện song song nên thuật
b[x] = a[i]; toán có độ phức tạp là O(n) (tuyến tính).
} (Xem tài liệu Thuật toán song song-Sử dụng n2 bộ xử lý)
303 304

5.6 CỄC THU T TOỄN S P X P SONG SONG 5.6 CỄC THU T TOỄN S P X P SONG SONG

2. Thu t toán s p x p so sánh vƠ đ i ch 2. Thu t toán s p x p so sánh vƠ đ i ch


BƠi toán: cho mảng a[n] các số nguyên. Hãy sắp xếp tăng
dần các phần tử c a mảng. Thu t toán song song:
ụ t ng thu t toán: so sánh hai phần tử liền kề nhau. Nếu ụt ng thu t toán
chưa theo th tự thì đổi chổ nhau. Quá trình lặp lại cho đến
• Dùng n tiến trình kết hợp theo nguyên lý hình ống để sắp
khi nào không còn cặp nào không thỏa mãn thì dừng.
Thu t toán tu n t : xếp mảng a[n]
for(i=n-1; i > 0; i--){ • Hệ thống được chia thành 2 pha: pha chẵn và pha lẻ
for(j=0; j < i; i++){
k = j + 1; - Pha chẵn: gồm các tiến trình được đánh số chẵn so sánh
if(a[j] > a[k]){ với những tiến trình tiếp theo (số lẻ), nếu nó giữ phần tử
temp = a[j];
a[j] = a[k]; lớp hơn thì trao đổi dữ liệu với tiến trình đó.
a[k] = temp;
} - Pha l : các tiến trình được đánh số lẻ hoạt động tương tự
}
305 như trên 306
}

51
7/17/2010

5.6 CỄC THU T TOỄN S P X P SONG SONG 5.6 CỄC THU T TOỄN S P X P SONG SONG

Ví d : n=8 vƠ a = (4 , 2 , 7 , 8 , 5 , 1 , 3 , 6) Thu t toán song song:


Giả sử A lưu dữ liệu tiến trình lẻ và B lưu dữ liệu tiến trình chẵn
Pha/TT P0 P1 P2 P3 P4 P5 P6 P7 Thuật toán song song theo hình ống được mô tả theo MPI như sau:
0 4 2 7 8 5 1 3 6
Pha chẵn
1 2 4 7 8 1 5 3 6
Pi , i = 0, 2, ..., n-2 Pi , i = 1, 3, ..., n-3
2 2 4 7 1 8 3 5 6
recv(&A, Pi+1); send(&A, Pi-1);
3 2 4 1 7 3 8 5 6 send(&B, Pi+1); recv(&B, Pi-1);
4 2 1 4 3 7 5 8 6 if (A>B) B=A ; if (A>B) A=B ;
5 1 2 3 4 5 7 6 8 Pha l
6 1 2 3 4 5 6 7 8 Pi , i = 1, 3, ..., n-3 Pi , i = 0, 2, ..., n-2
7 1 2 3 4 5 6 7 8 send (&A, Pi+1); recv (&A, Pi-1);
recv (&B, Pi+1); send(&B, Pi-1);
S p x p theo nguyên lỦ hình ng Đ i ch
307 if (A>B) A=B ; if (A>B) B=A ; 308
Không đ i ch

5.6 CỄC THU T TOỄN S P X P SONG SONG 5.6 CỄC THU T TOỄN S P X P SONG SONG

K t h p 2 pha ta đ c thu t toán song song: 3. Thu t toán s p x p MergeSort


BƠi toán: cho mảng a[n] các số nguyên. Hãy sắp xếp tăng
Pi , i = 1, 3, ..., n-3 Pi , i = 0, 2, ..., n-2
dần các phần tử c a mảng.
send(&A,Pi-1); recv(&A,Pi+1);
recv(&B,Pi-1); send(&B,Pi-1); ụ t ng thu t toán (dùng nguyên tắc chia để trị)
if (A>B) A=B ; if (A>B) B=A ; • Chia mảng a thành 2 phần
if (i<=n-3){ if (i=>2){ • Mỗi phần lại chia đôi tiếp cho đến khi mỗi phần nhỏ chỉ có 1
send(&A,Pi+1); recv(&A,Pi-1); phần tử
recv(&B,Pi+1); send(&B,Pi-1); • Từng cặp được ghép lại theo th tự sắp xếp
if (A>B) A=B; if (A>B) B=A; Ví d
} } M ng a = (4, 2, 7, 8, 5, 1, 3, 6)

Nhận xét: thuật toán có độ phức tạp là O(n).

309 310

5.6 CỄC THU T TOỄN S P X P SONG SONG 5.6 CỄC THU T TOỄN S P X P SONG SONG
Chia danh sách thành từng cặp và phân công cho các BXL
4 2 7 8 5 1 3 6 (4, 2, 7, 8, 5, 1, 3, 6) P0

Chia P0 P4
4 2 7 8 5 1 3 6
đôi
danh
4 2 7 8 5 1 3 6 sach
P0 P2 P4 P6

4 2 7 8 5 1 3 6
P0 P1 P2 P3 P4 P5 P6 P7
2 4 7 8 1 5 3 6
Ghép
k t P0 P2 P4 P6
2 4 7 8 1 3 5 6 h p

1 2 3 4 5 6 7 8 P0 P4
Nh n xét:
311 thu t toán có ĐPT O(nlogn) P0 312

52
7/17/2010

5.6 CỄC THU T TOỄN S P X P SONG SONG


Xác định th i gian truyền thông: tcomm
a. Trong giai đo n phơn chia d li u
Truy n d li u Truy n thông c a BXL
P0  P4
c. Xác đ nh th i gian

P0  P2; P4  P6
tstartup + (n/2)tdata
tính toán: tcomp
• tstartup + (n/4)tdata
P  P ; P  P3; P4  P5; P6  P7
Nh c l i:
• t + (n/8)t
tstartup là thdata
+ startup i gian cần 0thiết 1để 2gửi những thông điệp
không phải là dữ liệu. Nó gồmngcảs thtrao
i gian Nh n xét
b. Trong giai đo n ghép k t h p bao
có nh đ i dđểliđóng
u: gói
th 
• thông
tstartup điệp 2  P3; P4  P5; P6  P7
nơi gửi và P i gian
P1; Pm gói nơi nhận. Để
P0th iPgian
2; P4  P6
+ (n/8)tdata 0 • Việc tính toán chỉ thực hiện việc ghép các danh sách con
• đơn giản
tstartup chúng ta giả thiết
+ (n/4)t data
này là hằng số.
để tạo danh sách lớn hơn.
+ tdata là th i gian cần thiết để chuyển một mục dữ liệu
Gi(data
s cóitem)
p BXL từthìnơi
c gửi tới đo
hai giai nơin nhận,
s th cđượchi n đgiả cthiết
log plàb hàng
c. • Việc ghép 2 danh sách con được thực hiện bằng cách
số chi
Vậy và nphílà truyền
số mụcthôngdữ liệuc ađược
cả haitrao đổiđoạn
giai tronglà:hệ thống. duyệt lần lượt từ đầu hai danh sách để tìm phần tử nhỏ
tcomm = 2(tstartup+ (n/2)tdata + tstartup + (n/4)tdata +tstartup + (n/8)tdata …) hơn đưa vào danh sách mới.
= 2(log p)tstartup + 2ntdata • Để ghép 2 danh sách con có n phần tử thì cần nhiều nhất
313 314
2n-1 bước so sánh.

5.6 CỄC THU T TOỄN S P X P SONG SONG


Xác định th i gian tính toán
3. Thu t toán s p x p QuickSort
Tcomp=1 P0, P2, P4, P6 a. BƠi toán: Giả sử cần sắp xếp một dãy con kể từ vị trí start
đến end trong danh sách list[ ] với pilot là vị trí c a phần tử
Tcomp=3 P0, P2
trong danh sách được chọn làm hoa tiêu.
Tcomp=7 P0 b. ụ t ng thu t toán
• Chia dãy sắp xếp thành 2 danh sách con sao cho danh sách
T ng quát, 1 gồm các phần tử nhỏ hơn các phần tử c a danh sách 2
Tcomp= 1 + 3 + ... + (2i - 1), i = 1, ..., logn • Chọn một phần tử hoa tiêu (pivot) để thực hiện việc phân chia
• Lặp lại việc phân chia trên cho từng danh sách đến khi nào
V y đ phức t p th i gian tính toán c a TTSS s d ng n
những danh sách cuối cùng chỉ có 1 phần tử
BXL lƠ O(n)
315 316

5.6 CỄC THU T TOỄN S P X P SONG SONG 5.6 CỄC THU T TOỄN S P X P SONG SONG

c. Thu t toán QuickSort tu n t đ c vi t đ qui d. Ví d


QuickSort(list, start, end){ 4 2 7 8 5 1 3 6 Danh sách cần sắp xếp
pilot
if (start < end){
Partition (list, start, end, pilot); 3 2 1 4 5 7 8 6
QuickSort (list, start, pilot);
QuickSort (list, pilot+1, end);
2 1 3 4 5 7 8 6
}
}
1 2 3 6 7 8
Trong đó, Partition() là hàm chuyển tất cả các phần tử nhỏ
hơn hoặc bằng phần tử pilot về trước phần tử pilot, những
phần tử lớn hơn sẽ được đặt sau pilot. Thực hiện phân tách Thu t toán QuickSort tu n t có ĐPT O(nlogn)
Reference: Parallel Programming by Barry Wilkinson
xong thì pilot là vị trí c a phần tử hoa tiêu danh sách mới
317 318

53
7/17/2010

5.6 CỄC THU T TOỄN S P X P SONG SONG 5.6 CỄC THU T TOỄN S P X P SONG SONG

e. Song song hóa QuickSort Song song hóa QuickSort

Phát bi u l i QuickSort ụ t ng: bắt đầu thực hiện một BXL và chuyển các l i gọi
• Chọn phần tử pilot để chia dãy thành hai phần: bên trái là đệ quy cho các BXL khác.
những phần tử nhỏ hơn hoặc bằng pilot và bên phải là • Tạo ra tập các tiến trình và đặt dãy cần sắp xếp vào stack.
những phần tử lớn hơn pilot .
• Tiến trình đầu tiên (tiến trình ch ) thực hiện tách dãy cho
• Phần tử pilot được chèn vào giữa hai dãy con được tách và trước thành hai dãy con và đặt vào stack.
nó là vị trí đã được sắp xếp sau khi thực hiện bước 1.
• Những tiến trình khác (tiến trình tớ) xử lý những dãy con đã
• Bước 1 lặp lại một cách đệ qui cho đến khi các dãy con chỉ được tách ra và thực hiện những công việc tương tự như
còn lại một phần tử. thuật toán đã nêu.

319 320

5.6 CỄC THU T TOỄN S P X P SONG SONG 5.6 CỄC THU T TOỄN S P X P SONG SONG

f. Đánh giá thu t toán QuickSort song song


• Giả thiết rằng pilot được chọn một cách lý tư ng để mỗi lần
4 2 7 8 5 1 3 6 P0 đều tách thành hai phần có kích cỡ bằng nhau.
1. Th i gian tính toán.
3 2 7 4 5 7 8 6
P0 P4 • Đầu tiên một bộ xử lý phải thao tác với n số. Sau đó hai
bộ xử lý thao tác trên n/2 số, rồi bốn bộ xử lý thao tác
P0 P2 P4 P6
trên n/4 số, v.v.
2 1 3 4 5 7 8 6 • Th i gian để thực hiện thuật toán sẽ là:
tcomp = n + n/2 + n/4 + …  2n
1 2 3 6 7 8 P0 P1 P6 P4 2. Th i gian truy n thông.
• Sự trao đổi dữ liệu giữa các bộ xử lý chỉ xảy ra khi thực
hiện ghép kết hợp giống như MergeSort.
• tcomm = 2(tstartup + (n/2)tdata + tstartup + (n/4)tdata + tstartup +
Danh sách sắp xếp Phân công việc cho các BXL
(n/8)tdata …)
= 2(log p)tstartup + 2ntdata
321 322

5.7 CỄC THU T TOỄN SONG SONG THỌNG D NG

1. Nhân ma trận
• Mô hình lưới 2 chiều
• Mô hình mảng tâm thu
2. Giải hệ phương trình tuyến tính
3. Tính biểu đồ c a ảnh
4. Tô màu đồ thị
5. Thuật toán Kruskal tìm cây khung cực tiểu
6. Thuật toán tính tổng tiền tố
7. Phương trình nhiệt một chiều

Bài tập (tham khảo tài liệu)


323

54

You might also like