- Đị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 aij đượ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ơ
Trang 1BÁO CÁO MÔN HỌC ĐIỆN TOÁN LƯỚI VÀ ĐÁM MÂY
Trang 21.2.2 Một số ví dụ minh họa 12
CHƯƠNG 2 - LẬP TRÌNH SONG SONG VỚI MPI 13
2.1 Tổng quan về lập trình song song với MPI 13
2.1.1 Giới thiệu 13
2.1.2 Một số đặc điểm của lập trình MPI 14
2.2 Lập trình song song với MPI 15
2.2.1 Giới thiệu 15
2.2.2 Một số vấn đề về hiệu năng 17
CHƯƠNG 3 – MPI TRONG THUẬT TOÁN JACOBI VÀ GAUSS-SEIDEL CHO BÀI TOÁN HỆ PHƯƠNG TRÌNH TUYỂN TÍNH SONG SONG 22
3.1 Lựa chọn hàm MPI cho thuật toán song song 22
3.2 CHƯƠNG TRÌNH DEMO: 25
3.2.1 Giao diện chương trình: 25
3.2.2 Cách sử dụng: 25
3.2.3 Kết quả đạt được : 26
CHƯƠNG 4 : TÀI LIỆU THAM KHẢO 30
Trang 3CHƯƠ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
bởi công thức sau:
n
b b b
o Nếu detA = 0 và tồn tại j{1, 2, , }n sao cho |A j| 0 thì hệ
phương trình vô nghiệm
o Nếu detA = 0 và |A j| 0, j 1,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
c Các ví dụ:
Trang 5b 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
- Nếu tồn tại ít nhất d i với r 1 i m khác 0 thì hệ vô nghiệm
- Nếu d r1 d r2 d m 0 thì hệ có nghiệm Khi đó các cột i i1 , , , 2 i r
(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 x ktươ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ệ
d x c
Trong đó d x i( )k là các hàm tuyến tính của x kvới k i i 1 , , , 2 i r Hệ
phương trình (3) là hệ phương trình dạng tam giác ta có thể dễ
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
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
Trang 6Vì | | |A A1 | | A2 | | A3 | 0 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:
- 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
Trang 7- 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:
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)
Trang 8- 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 aij đượ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
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ố aii ≠0,
i = 1,2, ,n do đó ta có thể chia phương trình thứ i của hệ(2.1)
cho aii và nhận được hệ tương đương
Trang 9Từ đây ta có:
Khi đó ma trận C, vector d là:
Trang 10(Đế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) = (x1(k), x2(k), , xn(k)) thì ta có
Với từng thành phần xi(k) ta có
Trang 11- Đ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.02x3x2= 3 - 0.03x1+ 0.05x3x3= 5 - 0.01x1+ 0.02x2hay
(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 ý aii =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:
Trang 121.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
Trang 13- 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:
Trang 14(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 ý aii=1 ta được
bảng kết quả sau:
Trang 15- 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:
x+ y=12000
Trang 16y: 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:
c Ví dụ 3: Tổng của 2 góc nhọn trong một tam giác vuông là 90o
Giả sử số đo của một góc nhỏ hơn 6o 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?
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
Trang 17diệ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
đà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
Trang 18MPI 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 Specifications) để 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
Trang 19bằ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
Giao thức truyền thông điệp MPI là một thư viện các hàm và macro
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
Trang 20dụ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à offload để 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
(flatform) 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
Trang 21- 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
2.2.2 Một số vấn đề về hiệu năng