Tải bản đầy đủ (.docx) (35 trang)

Tiểu luận MÔN HỌC ĐIỆN TOÁN LƯỚI VÀ ĐÁM MÂY TÌM HIỂU VÀ ỨNG DỤNG THUẬT TOÁN SONG SONG TRONG BÀI TOÁN GIẢI HỆ PHƯƠNG TRÌNH TUYẾN TÍNH

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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC ĐIỆN TOÁN LƯỚI VÀ ĐÁM MÂY
ĐỀ TÀI :
TÌM HIỂU VÀ ỨNG DỤNG THUẬT TOÁN SONG
SONG TRONG BÀI TOÁN GIẢI HỆ PHƯƠNG
TRÌNH TUYẾN TÍNH

GVHD: PGS-TS NGUYỄN PHI KHỨ
HỌC VIÊN: HOÀNG NGUYÊN KHANG
MSHV: CH1301092
TPHCM , 07.06.2014
MỤC LỤC

Hoàng Nguyên Khang - CH1301092
CHƯƠNG 1. HỆ PHƯƠNG TRÌNH TUYẾN TÍNH SONG SONG
1.1 Giới thiệu các phương pháp giải
1.1.1 Phương pháp Cramer
- Nội dung của phương pháp này cũng chính là định lý sau:
a. Định lý: Cho hệ Cramer
11 1 12 2 1 1
21 1 22 2 2 2
1 1 2 2


(2)


n n
n n
n n nn n n


a x a x a x b
a x a x a x b
a x a x a x b
+ + + =


+ + + =




+ + + =

trong đó
11 12 1
21 22 2
1 2



n
n
n n nn
a a a
a a a
A
a a a
 
 
 

=
 
 
 
M M O M
là ma trận các hệ số. Khi đó,
- Nếu
det 0A ≠
thì hệ phương trình có nghiệm duy nhất xác định
bởi công thức sau:
det
det
i
i
A
x
A
=
, trong đó
i
A
chính là ma trận thu được ma trận A bằng
cách thay cột i bởi cột hệ số tự do
1
2
n
b
b
b
 

 
 
 
 
 
M
o Nếu detA = 0 và tồn tại
{1,2, , }j n∈
sao cho
| | 0
j
A ≠
thì hệ
phương trình vô nghiệm
o Nếu detA = 0 và
| | 0, 1,
j
A j n= ∀ =
thì hệ phương trình không
có nghiệm duy nhất (nghĩa là vô nghiệm hoặc vô số
nghiệm). Nếu xảy ra trường hợp này thì ta sẽ dùng
phương pháp Gauss (được nêu trong phần tiếp theo) để
giải hệ phương trình này.
b. Hệ quả: Hệ phương trình tuyến tính thuần nhất n phương trình
n ẩn có nghiệm không tầm thường khi và chỉ khi định thức của
ma trận các hệ số bằng 0.
Nhận xét: Phương pháp này dùng để giải hệ phương trình có số
phương trình bằng số ẩn.
3
Hoàng Nguyên Khang - CH1301092

c. Các ví dụ:
Ví dụ 1: Giải hệ phương trình sau:
1 2
2 3
1 3
(1)
ax bx c
cx ax b
cx bx a
+ =


+ =


+ =

với a, b, c là các
số khác 0.
Giải:
Ta có
0
det 0 2 0
0
a b
A c a abc
c b
= = ≠
nên đây là hệ Cramer. Hơn nữa
2 2 2

1
0
det ( )
0
c b
A b c a a b c b
a b
= = − +
2 2 2
2
0
det 0 ( )
a c
A b a a b c a
c a b
= = − + +
2 2 2
3
det 0 ( )
0
a b c
A c b a b c c
c a
= = + −
Do đó, hệ có nghiệm duy nhất
2 2 2
1
1
det
det 2

A a b c
x
A ac
− +
= =
;
2 2 2
2
2
det
det 2
A a b c
x
A bc
− + +
= =
;
2 2 2
3
3
det
det 2
A
a b c
x
A ab
+ −
= =

1.1.2 Phương pháp Gauss

a. Định lý Cronecker Capelly: Cho hệ phương trình tuyến tính
tổng quát

11 1 12 2 1 1
21 1 22 2 2 2
1 1 2 2


(1)


n n
n n
m m mn n m
a x a x a x b
a x a x a x b
a x a x a x b
+ + + =


+ + + =




+ + + =

A và
A
lần lượt là các ma trận hệ số và ma trận hệ số mở rộng. Khi

đó:
4
Hoàng Nguyên Khang - CH1301092
i) Nếu
rankA rank A<
thì hệ (1) vô nghiệm;
ii) Nếu
rankA rank A r= =
thì hệ (1) có nghiệm. Hơn nữa:
 Nếu r = n thì hệ (1) có nghiệm duy nhất.
 Nếu r < n thì hệ (1) có vô số nghiệm phụ thuộc n – r tham số.
b. Thuật toán sau để giải hệ phương trình tuyến tính (gọi là thuật
toán Gauss):
Lập ma trận các hệ số mở rộng
A
. Bằng các phép biến đổi sơ cấp
trên dòng đưa ma trận A về dạng bậc thang. Giả sử ma trận bậc
thang cuối cùng có dạng:
1
2
*
1 1
1
*
2 2
2
*
1
0
0 0



0 0
0 0 0 0 0


0 0 0 0 0
r
i n
i n
r
ri rn
r
m
c c
d
c c
d
A C d
c c
d
d
+






→ =














 
 

Hệ phương trình tương ứng với ma trận C tương đương với hệ ban
đầu. Do đó:
- Nếu tồn tại ít nhất
i
d
với
1r i m+ ≤ ≤
khác 0 thì hệ vô nghiệm.
- Nếu
1 2
0
r r m
d d d
+ +

= = = =
thì hệ có nghiệm. Khi đó các cột
1 2
, , ,
r
i i i
(là các cột được đánh dấu * ) được giữ lại bên trái và các
1 2
, , ,
r
i i i
x x x
là các ẩn, còn các cột còn lại thì được chuyển sang
bên phải, các ẩn
k
x
tương ứng với các cột này sẽ trở thành tham
số. Vậy ta sẽ có n – r tham số và hệ đã cho tương ứng với hệ
1 2
2
1 1 1
1
2
2

( )
0
( )
(3)



( )
0 0
r
r
i i i
k
i
k
r k
ri
c c c
d x
c
d x
d x
c
 
 
 
 
 
 
 
Trong đó
( )
i k
d x
là các hàm tuyến tính của
k

x
với
1 2
, , ,
r
k i i i≠
. Hệ
phương trình (3) là hệ phương trình dạng tam giác ta có thể dễ
5
Hoàng Nguyên Khang - CH1301092
dàng giải được bằng cách thế dần từ dưới lên, tức là tính lần lượt
1 1
, , ,
r r
i i i
x x x

.
Chú ý: Nếu trong quá trình biến đổi xuất hiện 1 dòng mà bên trái
bằng 0 còn bên phải là số khác 0 thì ta có thể kết luận hệ phương
trình vô nghiệm và không cần làm gì tiếp.
Nhận xét: Nếu ma trận thu được cuối cùng trong thuật toán
Gauss có dạng A’|B’ thì A’ được gọi là ma trận rút gọn theo dòng
từng bậc hay đơn giản là ma trận rút gọn, ký hiệu
A
R
.
Khi đó hạng của ma trận A bằng hạng của
A
R

.
c. Các ví dụ:
a) Giải hệ phương trình sau:
1 2 3
1 2 3
1 2 3
2 2 0
2 2 2 (*)
3 4 2
x x x
x x x
x x x
+ + =


− + − =


+ + = −

Giải:

1 2 3
| | | | | | | | 0A A A A= = = =
nên ta không thể dùng phương pháp Cramer
để giải hệ phương trình này.
Ta sẽ áp dụng phương pháp Gauss để giải hệ phương trình trên.
Ta viết hệ dưới dạng ma trận hóa như sau:
3 3 2
2 2 1

3 3 1
2 2
2
3
1
5
1 2 2 0 1 2 2 0 1 2 2 0
2 1 2 2 0 5 2 2 0 5 2 2
3 1 4 2 0 5 2 2 0 0 0 0
1 2 2 0
0 1 2 / 5 2 / 5
0 0 0 0
d d d
d d d
d d d
d d
→ +
→ +
→ −

     
     
− − → →
     
     
− − − −
     
 
 
→

 
 
 
Vậy hệ phương trình (*) có vô số nghiệm phụ thuộc vào tham số
3
x
.
6
Hoàng Nguyên Khang - CH1301092
1 2 3 3 3 3
2 3
3
4 4 4 6
2 2 2
5 5 5 5
2 2
5 5
x x x x x x
x x
x
− − −

= − − = + − = −



= −







¡

Chú ý:
- Khi hệ phương trình có vô số nghiệm thì dù giải bằng phương
pháp nào ta cũng có thể có nhều cách chọn biến tự do.
- Khi giải hệ phương trình tuyến tính thuần nhất, ta có nhiều cách
chọn hệ nghiệm cơ bản.
b) Giải hệ phương trình
1 2 3
1 2 3
1 2 3
2 5 9
3 2
3 6 25
x x x
x x x
x x x
+ + = −


− + =


− − =

Giải:
Ta tiến hành giải bằng thuật toán Gauss như sau:

2 2 1
3 3 1 3 3 2
3 4
1 2 5 9 1 2 5 9 1 2 5 9
1 1 3 2 0 3 2 11 0 3 2 11
3 6 1 25 0 12 16 52 0 0 8 8
d d d
d d d d d d
→ −
→ − → −
 −   −   − 
     
− → − − → − −
     
     
− − − − −
     
Vậy hệ phương trình đầu tương đương với hệ:
1 2 3
2 3
3
2 5 9
3 2 11
- 8 8
x x x
x x
x
+ + = −



− − =


=

Do đó nghiệm của hệ là
1 2 3
( , , ) (2, 3, 1)x x x = − −
.
1.1.3 Phương pháp lặp đơn
- Trở lại bài toán giải hệphương trình tuyến tính
Ax =b (2.4)
Ta đưa (2.4) về dạng
x = Cx + d (2.5)
- Trong đó ma trận C và vec tơ d được xây dựng từ A và b.
Để thực hiện phép lặp ta chọn một vec tơ ban đầu x
(0)
, sau đó
tính các x
(i)
, i=1,2, theo công thức lặp sau:
7
Hoàng Nguyên Khang - CH1301092
Véc tơ x
(k)
được gọi là vec tơ lặp thứ k.
- Ta có định lý sau:
- Định lý. (Sự hội tụ của phương pháp)
- Nói chung theo phương pháp lặp đơn, điều kiện để phép lặp
được hội tụ thì ||C|| < 1. Tuy nhiên trong thực tế thì ta chỉ có

ma trận A. Một câu hỏi đặt ra là ma trận A phải thỏa mãn điều
kiện gì để ta có thể đưa (2.4) về dạng (2.5) và áp dụng phương
pháp lặp đơn?
Để phương pháp lặp hội tụ thì thường ma trận A phải thỏa mãn
tính chéo trội của ma trận vuông.
- Định nghĩa: (Tính chéo trội của một ma trận vuông): Ma trận A
với các thành phần a
ij
được gọi là có tính chéo trội, nếu giá trị
tuyệt đối của các phần tử nằm trên đường chéo chính lớn hơn
tổng các giá trị tuyệt đối của các phần còn lại nằm cùng hàng,
tức là:
Sau đây sẽ giới thiệu 2 phương pháp lặp đơn Jacobi và Gaus-
Seidel
8
Hoàng Nguyên Khang - CH1301092
1.1.4 Phương pháp lặp Jacobi
- Với giả thiết ma trận A có tính chéo trội, khi đó các hệ số a
ii
≠0,
i = 1,2, ,n do đó ta có thể chia phương trình thứ i của hệ(2.1)
cho a
ii
và nhận được hệ tương đương
Từ đây ta có:
Khi đó ma trận C, vector d là:
9
Hoàng Nguyên Khang - CH1301092
(Đến đây ta đã đưa hệ(2.4) về dạng (2.5) và dễ thấy rằng ma trận C
thỏa mãn điều kiện lặp đơn, tức là ||C||∞< 1.).

Vậy đến đây ta tiếp tục áp dụng phương pháp lặp (2.6) đểtính
nghiệm ởcác bước lặp như sau:
Với vectơ x
(0)
cho trước bất kỳ, ví dụ x
(0)
= θ(vecto0) ta có thểtính các
vectơ x
(k)
tại
bước lặp k bằng công thức x
(k)
= C x
(k-1)
+ d , k =1, 2,
Cụ thể hơn, nếu x
(k)
= (x
1
(k)
, x
2
(k)
, . . ., x
n
(k)
) thì ta có
Với từng thành phần x
i
(k)

ta có
10
Hoàng Nguyên Khang - CH1301092
- Điều kiện hội tụ, đánh gía sai số của phương pháp lặp Jacobi
cũng giống với phương pháp lặp đơn.
Giải. (1).Có thể thấy rằng ma trận các hệ số của hệ phương trình trên
đây thỏa mãn tính chéo trội, do đó ta có thể biến đổi hệ này để áp
dụng phương pháp lặp Jacobi. Chia hai vế phương trình đầu tiên cho
4, hai vế phương trình thứ hai cho 3 và hai vế của phương trình thứ
ba cho 4 rồi biến đổi thích hợp ta nhận được:
x1= 2 - 0.06x2+0.02x3
x2= 3 - 0.03x1+ 0.05x3
x3= 5 - 0.01x1+ 0.02x2
hay
(2) Chọn x
(0)
= (2,3,5)
T
, rồi tính x
(1)
, x
(2)
, theo công thức (2.10) với
lưu ý a
ii
=1 ta được bảng kết quả sau:
(3) Xem x
(3)
là nghiệm gần đúng cần tìm, ta có thể đánh giá sai x
(3)


với nghiệm đúng x* theo (2.10) như sau:
11
Hoàng Nguyên Khang - CH1301092
1.1.5 Phương pháp Gauss-Seidel
- Với giả thiết ma trận A có tính chéo trội. Từ công thức (2.10) ta
thấy rằng phần tử thứ i của vec tơ nghiệm tại bước k được tính
qua các phần tử ở các vị trí khác i trong bước k-1. Phương pháp
Gauss-Seidel cải tiến phương pháp Jacobi bằng cách dùng ngay
những kết quảvừa tính được cho các thành phần của nghiệm
tại bước k để tính các thành phần khác của bước k, chỉ có
những thành phần nào chưa được tính thì mới lấy ở bước k-1.
Cụ thể hơn ta có tại các bước:
(1) Giá trị x1
(1)
được tính qua các giá trị x2
(0)
, x3
(0)
, xn
(0)

Giá trị x2
(1)
được tính qua các giá trị x1
(1)
, x3
(0)
, xn
(0)

Giá trị x3
(1)
được tính qua các giá trị x1
(1)
, x2
(1)
, x4
(0)
, xn
(0)
. . .
(h) Giá trịx1
(h)
được tính qua các giá trị x2
(h-1)
, x3
(h-1)
, xn
(h-1)
Giá trị x2
(h)
được tính qua các giá trị x1
(h)
, x3
(h-1)
, xn
(h-1)
Giá trị x3
(h)
được tính qua các giá trị x1

(h)
, x2
(h)
, x4
(h-1)
, xn
(h-1)
. . .
- Với vec tơ x
(0)
cho trước bất kỳ, ví dụ x
(0)
= θ(vec tơ 0) ta có thể
tính các vec tơ x
(k)
tại bước lặp k bằng công thức
- Trong công thức (2.11) chúng ta có thể không dùng chỉ số trên
để chỉ ra rằng chúng ta chỉ dùng một mảng là vec tơ có n thành
phần để lưu trữ nghiệm. Giá trị nào vừa được tính toán thì được
lưu trữ ngay vào vị trí cũ và được dùng ngay trong công thức
tính các giá trị khác.
12
Hoàng Nguyên Khang - CH1301092
- Sự hội tụ của phương pháp Gauss-Seidel:
Điều kiện hội tụcủa phương pháp lặp Gauss- Seidel cũng giống
với phương pháp lặp đơn. Như ta sẽthấy trong ví dụ trong phần
sau, phương pháp Gauss- Seidel nói chung hội tụ nhanh hơn
phương pháp lặp đơn.
Ta có thể sử dụng các công thức sau để đánh giá sai số của
phương pháp lặp Gauss-Seidel:

Gọi x* là nghiệm đúng của hệphương trình và gọi
Giải. (1).Có thể thấy rằng ma trận các hệ số của hệ phương trình trên
đây thỏa mãn tính chéo trội, do đó ta có thể biến đổi hệ này để áp
dụng phương pháp lặp Jacobi. Chia hai vế phương trình đầu tiên cho
4, hai vế phương trình thứ hai cho 3 và hai vế của phương trình thứ
ba cho 4 rồi biến đổi thích hợp ta nhận được:
13
Hoàng Nguyên Khang - CH1301092
(2) Chọn x
(0)
= (2,3,5)
T
, rồi tính x
(1)
, x
(2)
, theo công thức (2.11) với
lưu ý a
ii
=1 ta được
bảng kết quả sau:
14
Hoàng Nguyên Khang - CH1301092
- Thuật toán Jacobi cũng tương tự như thuật toán Gauss-Seidel,
nhưng thuật toán Gauss - Seidel có tốc độ hội tụ nhanh hơn.
1.2 Một số ứng dụng thực tế của giải hệ PTTT
1.2.1 Giới thiệu
- Ứng dụng tính chi phí
- Các ứng dụng về hỗn hợp
- Các ứng dụng liên quan đến gốc và lãi

- Các ứng dụng liên quan đến khoảng cách, tốc độ, và thời gian
- Ứng dụng trong hình học
1.2.2 Một số ví dụ minh họa
a. Ví dụ 1: Trang gửi tiết kiệm 12000$ ở ngân hàng với 2 tài khoản
theo lãi suất lần lượt là 7.5% và 6%. Nếu cuối năm số tiền lãi
thu được là 840$ thì số tiền gửi ở mỗi tài khoản ban đầu của cô
ấy là bao nhiêu?
Giải:
x: số tiền gửi ở tài khoản với lãi suất 7.5%
y: số tiền gửi ở tài khoản với lãi suất 6%
Tổng số tiền gửi : x + y = 12000
Số lãi cuối năm: x*0.075 + y*0.06 = 840
Ta có hệ PT:
84006.0075.0
12000
=+
=+
yx
yx
15
Hoàng Nguyên Khang - CH1301092
b. Ví dụ 2: Một chiếc phi cơ bay thuận gió theo hướng từ Hà Nội
tới tp.HCM với khoảng cách 1200km, trong 2h. Khi trở về do
bay ngược gió nên mất 2.5h. Tính tốc độ của máy bay trong
không khí và tốc độ của gió?
Giải:
x: tốc độ của máy bay
y: tốc độ của gió
Hà Nội -> tp.HCM: (x+y)*2 = 1200
tp.HCM -> Hà Nội: (x-y)*2.5 = 1200

Ta có hệ PT:
12005.25.2
120022
=−
=+
yx
yx

c. Ví dụ 3: Tổng của 2 góc nhọn trong một tam giác vuông là 90
o
.
Giả sử số đo của một góc nhỏ hơn 6
o
so với 2 lần góc còn lại.
Tính số đo mỗi góc nhọn trong tam giác?
Giải:
X: góc nhọn thứ nhất
Y: góc nhọn còn lại
Tổng 2 góc nhọn: x + y = 90
Góc x nhỏ hơn 6
o
so với 2 lần góc y: 2y - x = 6
62
90
−=
=+
yx
yx
Ta có hệ PT:
CHƯƠNG 2 - LẬP TRÌNH SONG SONG VỚI MPI

2.1. Tổng quan về lập trình song song với MPI
2.1.1. Giới thiệu
Message Passing Interface – MPI là một chuẩn mới được sử dụng
16
Hoàng Nguyên Khang - CH1301092
rộng rãi nhất. Nó không phải là một ngôn ngữ lập trình mới, thay vào
đó nó là một thư viện của chương trình con mà có thể được gọi từ
chương trình C và Fortran 77.
MPI được phát triển bởi một diễn đàn mở quốc tế, bao gồm các đại
diện từ ngành công nghiệp, các học viện và phòng thí nghiệm của
chính phủ. Nó đã nhanh chóng được chấp nhận rộng rãi bởi được
thiết kế cẩn thận cho phép hiệu suất tối đa trên một loạt các hệ
thống, và nó dựa trên truyền thông điệp, một trong những mô hình
mạnh mẽ nhất và được sử dụng rộng rãi cho lập trình các hệ thống
song song.Những nỗ lực cho MPI bắt đầu vào mùa hè năm 1991, khi
một nhóm nhỏ các nhà nghiên cứu bắt đầu thảo luận tại một nơi hẻo
lánh trên núi ở Úc.Nội dung đó lại được thảo luận tại hội thảo “tiêu
chuẩn cho truyền thông điệp trong một môi trường bộ nhớ phân tán”
(Standards for Message Passing in a Distributed Memory
environment) tổ chức vào ngày 29 – 30 tháng 4 năm 1992 tại
Williamsburg, Virginia. Tại hội thảo này, các tính năng cơ bản cần
thiết cho một MPI chuẩn đã được thảo luận, mà một nhóm cộng tác
đã được thành lập để tiếp tục quá trình tiêu chuẩn hoá. Jack
Dongarra, Rolf Hempel Hempel, Tony Hey và David W.Walker đưa ra
một bản dự thảo sơ bộ được biết đến như MPI-1 trong tháng 11 năm
1992Trong tháng 11 năm 1992, một cuộc họp của nhóm cộng tác
MPI đã được tổ chức tại Minneapolis, mà tại đó hội thảo quyết định
đặt các quá trình tiêu chuẩn hoá trên một cơ sở chính thức hơn.
Nhóm cộng tác MPI đã gặp nhau 6 tuần một lần trong suốt 9 tháng
đầu của năm 1993. Bản dự thảo chuẩn MPI đã được trình bày tại hội

nghị Siêu máy tính năm 93 trong tháng 11 năm 1993.
Sau một thời gian nhận những ý kiến đóng góp từ cộng đồng, một số
kết quả được thay đổi trong MPI, phiên bản 1.0 của MPI được phát
hành vào tháng 6 năm 1994. Thông qua những cuộc gặp gỡ và thư
điện tử, các nhà nghiên cứu đã thảo luận với nhau thành lập diễn
17
Hoàng Nguyên Khang - CH1301092
đàn MPI, trong đó tất cả các thành viên của cộng đồng điện toán
hiệu suất cao đều có thể đăng ký làm thành viên của diễn đàn.
MPI đã thu hút sự tham gia khoảng 80 người từ 40 tổ chức, chủ yếu
là ở Mỹ và Châu Âu. Hầu hết các nhà cung cấp chính của máy tính
đều được tham gia vào MPI cùng với các nhà nghiên cứu từ các
trường đại học, phòng thí nghiệm của chính phủ và ngành công
nghiệp.
2.1.2 Một số đặc điểm của lập trình MPI
MPI là một giao thức truyền thông độc lập với ngôn ngữ dùng để lập
trình máy tính song song. MPI hỗ trợ cả giao tiếp điểm – điểm và giao
tiếp tập thể. Mục tiêu của MPI là hiệu suất, khả năng mở rộng và khả
năng di dộng cao.MPI thường xuyên chạy trên các máy tính chia sẻ
bộ nhớ.Mặc dù MPI thuộc về lớp thứ 5 và lớp cao hơn của mô hình
OSI, nhưng những triển khai có thể bao gồm hầu hết các lớp, với
socket và TCP (Transmission
Control Protocol) được dùng trong tần vận chuyển.Hầu hết các triển
khai MPI bao gồm một thiết lập định tuyến riêng có thể được gọi trực
tiếp từ C, C++, Fortran hay bất kỳ ngôn ngữ nào có giao diện với các
thư viện, bao gồm C#, Java hoặc Python. Những ưu điểm ucar MPI
vượt qua những thư viện truyền thông điệp cũ là tính di động (MPI có
thể được triển khai cho hầu hết các kiến trúc bộ nhớ phân tán) và tốc
độ (MPI thực hiện nguyên tắc tối ưu hoá cho phần cứ mà nó chạy).
MPI sử dụng LIS (Language Independent Speci¢cations) để gọi và

ràng buộc ngôn ngữ. Phiên bản đầu tiên được phát hành chỉ định
ràng buộc ANSI C và Fortran 77 cùng với LIS. Năm 2008, chuẩn MPI-
1.3 chứa khoảng 128 chức năng, đây cũng là phát hành cuối cùng
của seri MPI-1 trong năm 2008.
Phiên bản MPI-2.2 bao gồm những tính năng nới như là I/O song
18
Hoàng Nguyên Khang - CH1301092
song, quản lý tiến trình động và điều hành bộ nhớ từ xa. LIS của MPI-
2 thiết lập hơn 500 hàm và cung cấp ràng buộc ngôn ngữ cho ANSI
C, ANSI C++ và ANSI Fortran (Fortran 90). Khả năng tương tác đối
tượng cũng được thêm vào để cho phép lập trình truyền thông điệp
bằng ngôn ngữ hỗn hợp dễ dàng hơn.
MPI cung cấp mô hình liên kết ảo, đồng bộ hoá và chức năng liên lạc
giữa một tập hợp các tiến trình (đã được ánh xạ tới các nút/máy
chủ/máy tính cụ thể) trong một ngôn ngữ độc lập, với cú pháp ngôn
ngữ đặc trưng (ràng buộc), cùng với một vài tính năng ngôn ngữ đặc
trưng. Những chương trình MPI luôn luôn làm việc với các tiến trình,
nhưng những lập trình viên thường xem các tiến trình như là những
bộ vi xử lý. Thông thường, để đạt hiệu suất tối đa, mỗi CPU (hoặc 1
nhân trong một máy tính đa nhân) sẽ được giao chỉ một tiến trình
duy nhất.Những chức năng thư viện MPI bao gồm (không giới hạn)
những hoạt động nhận/gửi loại điểm – điểm, lựa chọn giữa mô hình
xử lý logic Cartesian hoặc mô hình xử lý logic đồ thị tương đồng,
trao đổi dữ liệu giữa những cặp tiến trình, kết hợp các kết quả từng
phần của tính toán (thu thập và giảm các hoạt động), đồng bộ hoá
các nút cũng như thu thập thông tin liên quan đế mạng như số lượng
của tiến trình trong phiên tính toán, nhận dang bộ vi xử lý hiện tại
mà bộ vi xử lý
được ánh xạ, những tiến trình lân cận truy cập trong một mô hình
liên kết logic.

2.2. Lập trình song song với MPI
2.2.1. Giới thiệu
Giao thức truyền thông điệp MPI là một thư viện các hàm và macro
19
Hoàng Nguyên Khang - CH1301092
có thể được gọi từ các chương trình sử dụng ngôn ngữ C, Fortran, và
C++. Như tên gọi của nó MPI được xây dựng nhằm sử dụng trong các
chương trình để khai thác hệ thống các bộ xử lý bằng cách truyền
thông điệp.
* Mục tiêu thiết kế của MPI bao gồm:
- Thiết kế một giao diện lập trình ứng dụng. Mặc dù MPI gần đây
được sử
dụng như một chương trình dịch và một thư viện ở thời gian chạy,
nhưng thiết kế của MPI chủ yếu phản ánh nhu cầu nhận thức của
những người lập trình ứng dụng.
- Cho phép truyền thông một cách hiệu quả: tránh việc sao chép
dữ liệu từ bộ nhớ sang bộ nhớ và cho phép gối chồng (overlap) giữa
các tính toán và truyền thông và o¤oad để truyền thông đồng xử lý
khi có thể.
- Cho phép thực thi trên một môi trường không đồng nhất.
Có thể được gắn kết dễ dàng vào trong các chương trình ngôn ngữ C
và Fortran. Cung cấp một giao thức truyền thông tin cậy: người dùng
không cần phải lo lắng tới thất bại trong truyền thông. Các thất bại
này được xử lý bởi các hệ thống truyền thông cơ sở phía sau.
-Định nghĩa một giao thức không quá khác biệt so với các môi trường
song song hiện tại như PVM (Parallel Vitual Machine), NX, Express
và cung cấp các mở rộng cho phép độ linh hoạt cao hơn.
- Định nghĩa một giao thức có thể được thực thi trên các môi trường
(¦atform) của nhiều nhà cung cấp mà không cần thay đổi nào đáng
kể trong truyền thông cơ sở và phần mềm hệ thống.

-Ngữ nghĩa của giao thức là độc lập với ngôn ngữ.
* - Giao thức được thiết kế cho phép sử dụng luồng một cách an
toàn. Các tính năng chủ yếu của MPI [4]
20
Hoàng Nguyên Khang - CH1301092
- Một lượng lớn các hàm truyền thông điểm – điểm (phong phú
hơn rất nhiều so với các môi trường lập trình song song khác).
- Một lượng lớn các thủ tục truyền thông chọn lọc, được sử dụng
để giao tiếp giữa một nhóm các bộ xử lý trong hệ thống.
- Một ngữ cảnh truyền thông hỗ trợ cho việc thiết kế các thư viện phần
mềm song song.
- Có khả năng xác định các topology truyền thông.
- Có khả năng định nghĩa các kiểu dữ liệu mới để mô tả các
thông báo dựa trên các dữ liệu không liên tục.
* Các tiến trình
- Một chương trình MPI bao gồm các bộ xử lý độc lập, thực thi
các mã lệnh riêng của chúng trong một mô hình MIMD (Multiple
Instruction Multiple Data). Các tập lệnh được thực thi bởi các bộ
xử lý không nhất thiết phải giống nhau, việc truyền thông giữa
các bộ xử lý được thực hiện thông qua việc gọi các hàm truyền
thông của MPI.
- MPI không định rõ kiểu thực thi cho mỗi bộ xử lý. Bộ xử lý A có
thể chạy tuần tự, hoặc có thể thực thi ở dạng đa luồng với các
luồng được kích hoạt đồng thời.
- Điều này thực hiện được do tính chất luồng an toàn (thread-
safe) của MPI bằng cách tránh sử dụng các trạng thái tuyệt đối.
- * Ứng dụng MPI
- Một ứng dụng MPI có thể được thực thi như là một tập các
nhiệm vụ truyền thông đồng thời. Một chương trình bao gồm
các đoạn mã của người lập trình

- được liên kết với các hàm thư viện được cung cấp bởi phần
mềm MPI. Mỗi nhiệm vụ được chỉ định một thứ hạng (rank) duy
nhất trong khoảng 1-> n-1 với các ứng dụng có n nhiệm vụ.
Các hạng này được sử dụng để xác định các nhiệm vụ MPI khác
nhau trong việc gửi và nhận tin cũng như thực hiện các thao
tác truyền thông nói chung. Nhiệm vụ MPI có thể chạy trên
cùng bộ xử lý hoặc các bộ xử lý khác nhau một cách đồng thời.
Lợi ích của các rank là làm cho thao tác phối hợp độc lập với vị
trí vật lý của các thành phần.
21
Hoàng Nguyên Khang - CH1301092
2.2.2 Một số vấn đề về hiệu năng
2.2.2.1 Năng lực tính toán
Việc song song hóa một chương trình nhằm làm cho chương trình đó
chạy nhanh hơn, tuy nhiên chương trình đó sẽ chạy nhanh hơn bao
nhiêu lần? Định luật Amdahl’s [3] cho phép ta xác định điều này. Giả
sử xét về khía cạnh thời gian
chạy chương trình, một phần p của chương trình có thể song song
hóa và phần 1-p còn lại buộc phải chạy tuần tự. Trong trường hợp lý
tưởng, nếu thực thi chương trình sử dụng n bộ xử lý, thời gian chạy
chương trình sẽ là 1-p + p/n của thời gian chạy chương trình một
cách tuần tự. Đây là hệ quả trực tiếp của định luật Amdahl áp dụng
cho trường hợp thực thi lý tưởng.
Ví dụ: nếu 80% chương trình có thể được song song hóa, và ta có 4
bộ xử lý, thời gian chạy song song sẽ là: 1 - 0.8 + 0.8/4 = 0.4 tức là
bằng 40% thời gian chạy tuần tự.

Hình 2.1: khả năng tăng tốc độ tính toán, trường hợp lý tưởng
Đối với chương trình trên, thời gian chạy song song sẽ không thể nào
nhỏ hơn

22
Hoàng Nguyên Khang - CH1301092
20% thời gian chạy tuần tự cho dù ta sử dụng số lượng vô cùng lớn
các bộ xử lý.
Trên thực tế, khi chạy một chương trình song song, thường xuất hiện
các chi phí truyền thông và việc phân công công việc không cân
bằng giữa các bộ xử lý. Do đó thời gian chạy chương trình sẽ là:
Hinh 2.2: Khả năng tăng tốc độ tính toán, trường hợp
thực tế.
Do vậy để tăng tốc độ của chương trình ta cần:
- Tăng tỉ lệ (thành phần) được song song hóa của chương trình.
- Phân công công việc một cách công bằng cho các bộ xử lý.
- Giảm tới mức tối thiểu thời gian truyền thông.
2.2.2.2 Cân bằng tải
23
Hoàng Nguyên Khang - CH1301092
Giả sử rằng nếu dữ liệu được phân tán trên các bộ nhớ địa phương
của các bộ xử lý trong hệ thống nhiều máy tính, khi đó khối lượng
công việc của các bộ xử lý cần phải được phân phối hợp lý trong suốt
quá trình tính toán. Trong nhiều trường hợp, giả sử này là đúng, tuy
nhiên trong thực tế điều này không phải lúc nào cũng thực hiện
được. Giải pháp được đưa ra ở đây là cân bằng tải động nhằm mục
đích làm thay đổi sự phân phối khối lượng công viêc giữa các bộ xử lý
trong quá trình thực hiện tính toán.
Thông thường sau khi phân phối khối lượng công việc cho các bộ xử
lý, quá trình cân bằng tải động thực hiện bốn bước cơ bản sau:
- Giám sát hiệu năng của các bộ xử lý.
- Trao đổi thông tin trạng thái giữa các bộ xử lý.
- Tính toán và ra quyết định phân phối lại khối lượng công việc.
- Thực hiện việc chuyển đổi dữ liệu thực sự.

Để thực hiện được điều này, rất nhiều thuật toán đã được đề xuất.
Người ta phân lớp các thuật toán này theo các chiến lược: tập trung,
phân tán hoàn toàn (fully distributed) và phân tán một nửa (semi
distributed).
a) Các thuật toán cân bằng tải tập trung
Các thuật toán này thường đưa ra quyết định có tính chất tổng thể
trong việc phân phối lại khối lượng công việc cho các bộ xử lý. Một
vài thuật toán trong lớp này sử dụng thông tin hệ thống có tính toàn
cục để lưu trạng thái các máy tính riêng lẻ. Thông tin này sẽ giúp
24
Hoàng Nguyên Khang - CH1301092
thuật toán phân phối công việc một cách dễ dàng. Tuy nhiên, khối
lượng thông tin tăng theo tỉ lệ thuận với số lượng các bộ xử lý, do đó
nó đòi hỏi khối lượng lớn bộ nhớ trên một bộ xử lý để lưu thông tin
trạng thái. Vì vậy thuật toán thuộc lớp này không được tiếp cận một
cách rộng rãi.
b) Các thuật toán cân bằng tải phân tán hoàn toàn
Trong các thuật toán dạng này, mỗi bộ xử lý có một bản sao về
thông tin trạng thái của hệ thống. Các bộ xử lý trao đổi thông tin
trạng thái với nhau và sử dụng các thông tin này để làm thay đổi
một cách cục bộ việc phân chia công việc. Tuynhiên các bộ xử lý chỉ
có thông tin trạng thái cục bộ nên việc cân bằng tải không tốt bằng
các thuật toán cân bằng tải tập trung.
c) Các thuật toán cân bằng tải phân tán một nửa
Các thuật toán thuộc lớp này chia các bộ xử lý thành từng miền.
Trong mỗi miền sử dụng thuật toán cân bằng tải tập trung để phân
phối công việc cho các bộ xử lý thuộc miền đó.
2.2.2.3 Sự bế tắc
Các tiến trình xử lý bị rơi vào tình trạng bế tắc nếu mỗi tiến trình đó
nắm giữ tài nguyên mà một vài tiến trình khác đang yêu cầu để xử

lý. Lý do tiềm ẩn của sự bế tắc là do nhiều tiến trình cùng sử dụng
nguồn tài nguyên chung mà không có sự kiểm soát tốt.
Đối với các hệ thống đa máy tính, một trong những sự bế tắc phổ
biến nhất là bế tắc vùng đệm (buªer deadlock) xảy ra khi một tiến
25

×