Một số phương pháp song song cho hệ đại số tuyến tính
Trang 1MỤC LỤC
LỜI NÓI ĐẦU2
Chương 1: TỔNG QUAN VỀ XỬ LÍ SONG SONG4
1.1 Xử lý song song4
1.2 Phân loại kiến trúc máy tính4
1.3 Các thành phần chính của máy tính song song7
1.4 Thiết kế và đánh giá thuật toán song song
1.5 Kiến trúc cụm máy tính
Chương 2: GIAO DIỆN TRUYỀN THÔNG ĐIỆP MPI
2.1 Giới thiệu về MPI
3.2 Một số phương pháp lặp tuần tự giải hệ phương trình đại số tuyến tính
3.3 Một số thuật toán lặp song song giải hệ phương trình đại số tuyến tính
3.4 Chương trình thử nghiệm
KẾT LUẬN
TÀI LIỆU THAM KHẢO
PHỤ LỤC
Trang 2LỜI NÓI ĐẦU
Sự bùng nổ của công nghệ thông tin đó và đang làm thay đổi mọi mặt của đời
sống xó hội Cụng nghệ thông tin đó được ứng dụng rộng rói và những chiếc mỏy
trở thành cụng cụ đắc lực cho con người trong rất nhiều lĩnh vực của khoa học và
cuộc sống, đặc biệt là trong tính toán và xử lí dữ liệu Trước những đũi hỏi cần cú
lời giải nhanh cho những bài toỏn với kích thước dữ liệu lớn như: dự báo thời tiết,
xử lý ảnh ba chiều, trớ tuệ nhõn tạo, mụ phỏng cỏc hệ thống lớn…xử lý song song
là một hướng phát triển tất yếu và đang cần được nghiên cứu và ứng dụng rộng rói
vào thực tế Sự ra đời của các máy tính song song, đặc biệt là những cụm máy tính
phục vụ cho việc xử lý song song với giá rẻ đó hỗ trợ rất lớn cho việc xõy dựng
những chương trỡnh song song giải quyết cỏc bài toỏn khoa học và thực tiễn Khúa
luận tốt nghiệp này chủ yếu nằm trong hướng nghiên cứu ứng dụng thuật toán song
song giải hệ phương trỡnh đại số tuyến tính bằng phương pháp lặp
Khóa luận được trỡnh bày thành ba chương:
Chương 1 Tổng quan về xử lí song song : Trỡnh bày khỏi niệm xử lớ song song,
cỏc kiến trỳc mỏy tớnh, cỏc thành phần chớnh của máy tính song song, các nguyên
lí thiết kế và đánh giá thuật toán song song, và kiến trúc cụm máy tính của trung
tâm tính toán hiệu năng cao
Chương 2 Giao diện truyền thông điệp MPI : Giới thiệu về giao diện truyền
thông điệp MPI, mô hỡnh lập trỡnh MPI, các nhóm hàm cơ bản của thư viện mpi.h
khi lập trỡnh MPI với ngụn ngữ C
Chương 3 Một số phương pháp lặp giải hệ đại số tuyến tính : Giới thiệu một số
phương pháp lặp tuần tự và song song giải hệ đại số tuyến tính như Jacobi, JOR,
SOR, chương trỡnh thử nghiệm, đánh giá kết quả và định hướng phát triển
Trang 3Khóa luận này chắc chắn không tránh khỏi thiếu sót do hạn chế về thời gian
cũng như kiến thức Em rất mong nhận được sự đóng góp ý kiến của thầy cụ và cỏc
bạn để có thể phát triển đề tài đạt được kết quả tốt hơn
Em xin gửi lời cảm ơn chân thành tới thầy giáo về sự tận tâm hướng dẫn, giúp
đỡ em hoàn thành khóa luận này Em xin cảm ơn tất cả các các thầy cô khoa Toán
Cơ Tin học, các thầy cô trường Đại học Khoa học Tự nhiên – Đại học Quốc gia Hà
Nội về sự dạy dỗ ân cần trong thời gian em học tại trường Em xin cảm ơn các thầy
cô, các anh chị của Trung Tâm Tính Toán Hiệu Năng Cao đó tạo điều kiện và giúp
đỡ em rất nhiều trong việc hoàn thành khóa luận Xin cảm ơn gia đỡnh, người thân
và bạn bè đó luụn ủng hộ và là nguồn cổ vũ lớn lao cho tôi
Trang 4Chương 1: TỔNG QUAN VỀ XỬ LÍ SONG SONG
1.1 Xử lớ song song
Xuất phỏt từ yờu cầu giải quyết nhanh những bài toỏn bài toán có khối lượng
dữ liệu lớn như xử lí ngôn ngữ tự nhiên, xử lí tiếng nói, xử lí ảnh ba chiều, dự báo
thời tiết, trí tuệ nhân tạo,…trong khi những máy tính xử lí tuần tự kiểu von
Neumann hiện nay không đáp ứng được yêu cầu đó Chính vỡ vậy vấn đề đặt ra là
phải khai thác được khả năng xử lí song song của các hệ thống máy tính hiện đại
Xử lí song song là cách xử lí thông tin bằng việc sử dụng nhiều hơn một bộ xử
lí để thực hiện nhiều hơn một thao tác trên dữ liệu tại một thời điểm.
Khỏc với xử lớ tuần tự, trong tính toán song song một số bộ xử lí kết hợp với
nhau để giải quyết cùng một vấn đề nên giảm được thời gian xử lí vỡ mỗi thời điểm
có thể có nhiều phép toán được thực hiện đồng thời Với tốc độ xử lí nhanh hơn, xử
lí song song giải quyết được nhiều bài toỏn lớn và phức tạp
1.2 Phõn loại kiến trỳc mỏy tớnh
Cách phân loại kiến trúc máy tính của Flynn là một trong những các phân loại
được chấp nhận rộng rói nhất Cỏch phõn loại này được Micheal J Flynn đề xuất
năm 1966 gồm bốn loại kiến trúc máy tính như sau:
1.2.1 Kiến trúc SISD (đơn dũng lệnh, đơn luồng dữ liệu)
Máy tính loại SISD chỉ có một CPU, và ở mỗi thời điểm chỉ thực hiện một lệnh
và chỉ đọc, ghi một mục dữ liệu Mô hỡnh SISD chớnh là mụ hỡnh mỏy tớnh kiểu
von Neumann
Trang 5Hỡnh 1.1 Mụ hỡnh của kiến trỳc SISD
1.2.2 Kiến trúc SIMD (đơn dũng lệnh, đa luồng dữ liệu)
Những máy tính SIMD có một đơn vị điều khiển để điều khiển nhiều đơn vị xử
lí thực hiện một dũng cỏc cõu lệnh Đơn vị điều khiển phát sinh tín hiệu điều khiển
tới tất cả cỏc bộ xử lớ thực hiờn cựng một phộp toỏn trờn cỏc mục dữ liệu khỏc
nhau
Hỡnh 1.2 Mụ hỡnh của kiến trỳc SIMD
1.2.3 Kiến trúc MISD (đa dũng lệnh, đơn luồng dữ liệu)
Mỏy tớnh loại MISD cú thể thực hiện nhiều chương trỡnh trờn cựng một mục
dữ liệu Kiến trỳc kiểu này chia thành hai nhúm như sau:
• Lớp các máy tính yêu cầu các đơn vị xử lí khác nhau có thể nhận những
lệnh khác nhau và thực hiện trên cùng một mục dữ liệu
Tớn hiệu điều khiển
Trang 6• Lớp các máy tính có các luồng dữ liệu được chuyển tuần tự qua một dóy
cỏc bộ xử lớ liờn tiếp
Hỡnh 1.3 Mụ hỡnh của kiến trỳc MISD
1.2.4 Kiến trúc MIMD (đa luồng lệnh, đa luồng dữ liệu)
Mỏy tớnh MIMD cũn được gọi là đa bộ xử lí, mỗi bộ xử lí có thể thực thi
những luồng lệnh riêng trên các luồng dữ liệu riêng của chúng Đa số các hệ thống
MIMD có bộ nhớ riêng và có thể truy cập vào bộ nhớ chung nên giảm được thời
gian trao đổi giữa các bộ xử lí
Đơn vị điều khiển1
Đơn vị điều khiển 2
Đơn vị điều khiển n
Luồng dữ liệu 1
Luồng dữ liệu 2
Đơn vị điều khiển1
Đơn vị điều khiển 2
Đơn vị điều khiển n
Luồng
dữ liệu
Luồng dữ liệu 2
Trang 7Hỡnh 1.4 Mụ hỡnh của kiến trỳc MIMD
1.3 Cỏc thành phần chớnh của mỏy tớnh song song
1.3.1 Bộ nhớ
Bộ nhớ là một trong những thành phần quan trọng nhất của kiến trúc máy tính
và thường được phân cấp như sau:
Hỡnh 1.5 Phõn cấp hệ thống bộ nhớ
Bộ nhớ mức 1 là bộ nhớ mức cao nhất thường gắn chặt với bộ xử lí thành bộ
nhớ cục bộ Khi mức bộ nhớ tăng dần thỡ dung lượng tăng dần cũn giỏ cả và tốc độ
giảm dần
Mụ hỡnh bộ nhớ đối với máy tính truy cập ngẫu nhiên song song được biết
dưới tên gọi PRAM (Parallel Random Access Machine) bao gồm bộ nhớ chung
RAM với M ô nhớ đủ lớn để chia sẻ cho P bộ xử lí Bộ nhớ chung dùng để lưu trữ
dữ liệu và là nơi giao tiếp giữa các bộ xử lí, nó cho phép các bộ xử lí truy cập dữ
Bộ xử lớ
Bộ nhớ mức 1
Bộ nhớ mức 2
Bộ nhớ mức n
Trang 8• Đọc độc quyền ER (Exclusive Read): mỗi bộ xử lí đọc được chính xác
một ô nhớ và mỗi ô nhớ chỉ được đọc bởi một bộ xử lí
• Ghi đồng thời CW (Concurrent Write): nhiều bộ xử lí có thể ghi vào
cùng một ô nhớ ở cùng một thời điểm
• Ghi độc quyền EW (Exclusive Write): mỗi bộ xử lí chỉ ghi được vào một
ô nhớ và mỗi ô nhớ chỉ được ghi bởi một bộ xử lí
Dễ nhận thấy rằng ER và EW là những trường hợp riêng của CR và CW Trong
đó CW có những đặc tính sau:
• Ghi đồng thời có ưu tiên (Priority CW): mỗi bộ xử lí được gắn với một
mức ưu tiên, bộ nhớ có mức ưu tiên cao nhất sẽ được quyền ghi vào một
ô nhớ cho trước Các mức ưu tiên có thể tĩnh hoặc động theo qui tắc xác
định
• Ghi đồng thời chung (Common CW): tất cả các bộ xử lí được phép ghi
vào cụng một ô nhớ nếu chúng ghi cùng một giá trị Khi đó một bộ xử lí
sẽ được chọn để thực hiện việc ghi dữ liệu đó
• Ghi đồng thời tự do (Arbitracy CW): một số bộ xử lí muốn ghi dữ liệu
vào một ô nhớ nhưng chỉ một bộ xử lí được phép Trong trường hợp này
ta phải chỉ ra cách xác định bộ xử lí được chọn
• Ghi đồng thời ngẫu nhiên (Random CW): bộ xử lí được chọn để ghi dữ
liệu là ngẫu nhiên
Trang 9• Ghi đồng thời kết hợp (Combining CW): tất cả các giá trị mà các bộ xử lí
muốn ghi đồng thời lên một ô nhớ sẽ được kết hợp lại thành một giá trị
và giá trị này sẽ được ghi vào ô nhớ đó
Một số mụ hỡnh bộ nhớ cho mỏy truy cập ngẫu nhiờn song song PRAM:
1 Mụ hỡnh truy cập bộ nhớ đồng bộ UMA (Uniform Memory Access) của
bộ nhớ chia sẻ: tất cả các bộ xử lí làm việc nhờ cơ chế chuyển mạch tập
trung để truy cập tới bộ nhớ chia sẻ Thời gian truy cập vào bộ nhớ là
như nhau với tất cả các bộ xử lí
2 Mụ hỡnh truy cập bộ nhớ khụng đồng bộ NUMA của bộ nhớ chia sẻ:
trong mụ hỡnh này, bộ nhớ được phân tán và được chia thành một số
môđun nhớ độc lập Bộ nhớ chia sẻ được phân tán cho tất cả các bộ xử lí
được gọi là các môđun nhớ địa phương và các môđun nhớ này hợp lại
thành bộ nhớ chung (toàn cục) cho cỏc bộ xử lớ
3 Kiến trúc bộ nhớ chỉ lưu trữ COMA ( Cache-Only Memory
Architexture ): bộ nhớ chính được phân tán và chuyển thành các vùng
lưu trữ (cache), tất cả các vùng này tạo ra không gian địa chỉ toàn cục
4 Bộ nhớ đa máy tính: trong bộ nhớ đa máy tính mỗi nút là một máy tính
có bộ nhớ địa phương không chia sẻ với những bộ xử lí khác, các bộ xử
lí liên lạc với nhau thông qua giao thức truyền thông điệp
1.3.2 Mạng liờn kết cỏc thành phần của mỏy tớnh song song
Trong hầu hết cỏc kiến trỳc song song, vấn đề quan trọng nhất trong thiết kế là
xác định sự liên kết giữa các bộ xử lí với nhau Nói chung có hai loại cấu hỡnh cho
mạng liờn kết: liờn kết tĩnh và liờn kết động
- Mạng liờn kết tĩnh là mạng cỏc thành phần của một hệ thống mỏy tớnh, bộ
xử lí và bộ nhớ được liên kết một cách cố định
Trang 10- Mạng liên kết động là mạng các thành phần của hệ thống máy tính trong đó
các liên kết giữa các bộ xử lí và bộ nhớ là có thể thay đổi được cấu hỡnh
Sau đây là một số mô hỡnh mạng liờn kết tĩnh giữa cỏc bộ xử lớ của mỏy tớnh
song song
1 Mạng liờn kết tuyến tớnh
Trong mạng liên kết tuyến tính các bộ xử lí được liên kết với nhau và được sắp
xếp theo thứ tự tăng dần Trừ hai bộ xử lí đầu tiên và cuối cùng, các bộ xử lí cũn lại
cú hai lỏng giềng là bộ xử lớ trước và sau nó Dữ liệu phải truyền qua một số bộ xử
lí nên sự truyền thông dữ liệu giữa các bộ xử lí bị chậm lại nhất là giữa bộ xử lí đầu
và cuối
Hỡnh 1.6 Mạng liờn kết tuyến tớnh của n bộ xử lớ
2 Mạng liờn kết vũng
Mạng liờn kết vũng cú thể được tổ chức như mạng tuyến tính bằng cách nối hai
bộ xử lí đầu và cuối Sự trao đổi giữa các bộ xử lí có thể theo một chiều hoặc hai
chiều tuy nhiên việc truyền thông giữa các bộ xử lí đặc biệt là các bộ xử lí ở xa
Trang 11Giả sử cú N bộ xử lớ P0, P1,…, Pn với N là lũy thừa của 2 Trong mạng liên kết
xáo trộn hoàn hảo, đường liên kết một chiều từ bộ xử lí Pi đến bộ xử lí Pj được xác
=
N 1 i 2
i 2
j
1 N i 2 N
1 2 N i 0
các liên kết xáo trôn được biểu diễn bằng mũi tên và các liên kết trao đổi được biểu
diễn bằng đoạn thẳng Dễ thấy rằng ngoài bộ xử lí P0 và PN-1 tự liên kết với chính
nó, bộ xử lí i được liên kết với bộ xử lí 2i mod (N-1)
4 Mạng liên kết lưới hai chiều
Trong mạng liên kết lưới hai chiều, các bộ xử lí được sắp xếp thành một ma
trận hai chiều, mỗi bộ xử lí được liên kết với bốn láng giềng: trên, dưới, trái, phải
Không có qui luật chung cho những bộ xử lí ở biên Có hai biến thể của mạng lưới
hai chiều: lưới hai chiều khụng cú kết nối vũng và lưới hai chiều có kết nối vũng
với với
Trang 12(a) Lưới không có kết nối vũng (b) Lưới có kết nối vũng
Hỡnh1.9 Mạng liờn kết lưới hai chiều
5 Mạng liờn kết siờu khối
Mạng liờn kết siờu khối d chiều gồm N= 2d bộ xử lí , mỗi bộ xử lí liên kết với d
bộ xử lí khác trong mạng Thông thường mạng liên kết siêu khối d+1 chiều được
xây dựng bằng cách kết nối hai mạng liên kết siêu khối d chiều Một cách hỡnh
thức, mạng liờn kết N bộ xử lí được gọi là mạng siêu khối nhị phân, các bộ xử lí
được gắn nhón nhị phõn cú giỏ trị từ 0 đến N-1, và hai bộ xử lí được gọi là láng
giềng của nhau nếu các nhón của nú chỉ khỏc nhau một bit ( tức là khỏc nhau một
lũy thừa của 2)
Hỡnh 1.10 Mạng liờn kết siờu khối 3 chiều
6 Mạng liờn kết hỡnh sao
Trong mạng liờn kết hỡnh sao, mỗi bộ xử lớ sẽ tương ứng với một hoán vị của
n kí hiệu với n là một số tự nhiên Mạng liên kết hỡnh sao cú n! bộ xử lớ, nhón mỗi
bộ xử lớ là một hoỏn vị của n kớ hiệu Bộ xử lớ Pi được liên kết với bộ xử lí Pj nếu
j nhận được từ i bằng cách thay kí hiệu thứ k, với 2≤k≤n
Trang 13Hỡnh 1.11: Mạng liờn kết hỡnh sao với 24 bộ xử lớ
1.4 Thiết kế và đánh giá thuật toán song song
1.4.1 Nguyờn lớ thiết kế thuật toỏn song song
Thuật toán song song được định nghĩa là một tập các tiến trỡnh hoặc cỏc tỏc vụ
cú thể thực hiện đồng thời và có thể trao đổi dữ liệu với nhau để kết hợp cùng giải
một bài toán Có thể có nhiều thuật toỏn song song cựng giải một bài toỏn tựy
thuộc vào cỏch phõn chia dữ liệu cho cỏc tỏc vụ, cỏch truy xuất dữ liệu, cỏch phõn
ró cỏc tỏc vụ và cỏch đồng bộ các tiến trỡnh Để thiết kế một thuật toán song song
tốt ta có thể sử dụng năm nguyên lí chính trong thiết kế thuật toỏn song song:
Trang 14- Nguyên lí lập lịch: Giảm tối thiểu các bộ xử lí trong thuật toán mà không
làm tăng thời gian tính toán Nói chung, khi số bộ xử lí giảm thời gian thực
hiện của chương trỡnh cú thể tăng và có thể tăng lên một hằng số nào đó
nhưng xét theo độ phức tạp của thuật toán thỡ vẫn khụng thay đổi
- Nguyên lí đường ống: Nguyên lí này được áp dụng trong trường hợp ta
muốn thực hiện một dóy cỏc thao tỏc theo trỡnh tự {P1, P2,…, Pn} trong đó
một số bước của Pi+1 có thể thực hiên trước khi Pi kết thỳc
- Nguyên lí chia để trị: Chia bài toán thành các phần nhỏ tương đối độc lập và
giải quyết chúng đồng thời
- Nguyên lí đồ thị phụ thuộc dữ liệu: Chúng ta xây dựng một đồ thị có hướng
trong đó các nút biểu diễn các khối câu lệnh độc lập cũn cỏc cạnh biểu diễn
tỡnh huống khối này phụ thuộc kết quả từ việc thực hiện của khối kia Từ đó
ta tỡm cỏch loại bỏ cỏc phụ thuộc để xây dựng thuật toán song song
- Nguyờn lớ cạnh tranh: Nếu hai tiến trỡnh cựng truy cập vào một mục dữ
liệu chia sẻ thỡ chỳng cú thể cản trở lẫn nhau
1.4.2 Các giai đoạn thiết kế thuật toán song song
Có ba cách tiếp cận trong thiết kế thuật toán song song cho một bài toán, đó là:
- Song song hóa các thuật toán tuần tự, biến đổi những cấu trúc tuần tự để tận
dụng khả năng song song tự nhiên của tất cả cỏc thành phần trong hệ thống
xử lớ
- Thiết kế thuật toỏn song song hoàn toàn mới
- Thiết kế thuật toán song song từ những thuật toán song song đó được xây
dựng
Trong thiết kế dù sử dụng hướng tiếp cận nào thỡ cũng thường bao gồm các
giai đoạn sau:
Trang 151 Phõn ró (Partioning): Chia những tớnh toỏn và dữ liệu thành những tỏc vụ
nhỏ Giai đoạn này chủ yếu là để tỡm kiếm khả năng thực hiện song song và
thường độc lập với kiến trúc máy tính
2 Truyền thông (Communication): Giai đoạn này nhằm thiết lập sự phối hợp
thực hiện giữa các tác vụ và xác định thuật toán và cấu trúc truyền thông
thích hợp
3 Tích hợp (Agglomeration): Mục đích của giai đoạn này là đánh giá những
yêu cầu hiệu năng và chi phí thực hiện Nếu cần thiết, những tác vụ có thể
kết hợp lại thành các tác vụ lớn hơn để tăng hiệu năng và giảm chi phí thực
hiện
4 Ánh xạ (Mapping): Mỗi tác vụ sẽ được giao cho một bộ xử lí nhằm tối đa
hóa sự tận dụng khả năng của các bộ xử lí và giảm thiểu chi phí truyền
thông Ánh xạ có thể được xác định tĩnh (statically) hoặc trong thời gian
chạy (runtime) bằng thuật toỏn cõn bằng tải (load-balancing)
1.4.3 Đánh giá thuật toán song song
1 Thời gian thực hiện
Thời gian thực hiện của một thuật toỏn bao gồm: thời gian tớnh toỏn, thời gian
truyền thụng và thời gian rỗi
Thời gian tớnh toỏn
Thời gian tớnh toỏn của một thuật toỏn (Tcomp) là thời gian sử dụng để
tính toán (bao gồm các phép toán logic và số học) Nếu chúng ta có một
chương trỡnh tuần tự mà thực hiện tớnh toỏn giống như thuật toán song song
chúng ta có thể xác định Tcomp bằng việc tính thời gian chương trỡnh đó Nếu
không chúng ta có thể phải thực thi những nhân then chốt Thời gian tính
toán sẽ thường phụ thuộc vào kích thước bài toán dù nó được biểu diễn bởi
một tham số N hay bởi một tập các tham số N1, N2, …, Nm.Thời gian tớnh
Trang 16toỏn cũn phụ thuộc vào số cỏc tỏc vụ hoặc số bộ xử lớ Trong mạng mỏy
tớnh song song khụng đồng nhất ( như mạng các máy trạm), thời gian tính
toán có thể biến thiên theo bộ xử lí mà tại đó tính toán được thực hiện Thời
gian tính toán cũng phụ thuộc vào đặc điểm của những bộ xử lí và phương
thức nhớ của chúng
Thời gian truyền thụng
Thời gian truyền thụng của một thuật toỏn ( Tcomm) là thời gian mà tất cả
các tác vụ của nó sử dụng để gửi và nhận thông điệp.Có hai loại truyền
thông: truyền thông giữa các bộ xử lí (interprocessor) và truyền thông trong
bộ xử lí (intraprocessor) Trong truyền thông giữa các bộ xử lí, hai tác vụ
thực hiện truyền thông với nhau thông được định vị trên những bộ xử lí khác
nhau Điều này luôn xảy ra khi thuật toán tạo một tỏc vụ trờn một bộ xử lớ
Truyền thụng trong bộ xử lớ, thỡ hai tỏc vụ thực hiện truyền thụng định vị
trên một bộ xử lí Để đơn giản ta giả sử chi phí truyền thông giữa bộ xử lí và
truyền thông trong bộ xử lí là ngang nhau Điều giả sử này không phải là
không có cơ sở trong nhiều đa máy tính, trừ khi liên lạc trong bộ xử lí được
tối ưu hóa cao độ Đó là bởi vỡ chi phớ của những bản sao và chuyển ngữ
cảnh từ bộ nhớ sang bộ nhớ thực hiện trong truyền thụng trong bộ xử lớ
thường có thể so sánh được với chi phí của truyền thông giữa các bộ xử lí
Trong những môi trường như các máy trạm kết nối Ethernet, truyền thông
trong bộ xử lí nhanh hơn rất nhiều Trong kiến trúc đa máy tính lí tưởng, chi
phí gửi thông điệp giữa hai tác vụ định vị trên những bộ xử lí khác nhau có
thể biểu diễn bằng hai tham số: thời gian khởi động thông điệp ts, là thời gian
cần để khởi tạo sự truyền thông, và thời gian truyền một từ ( thường là bốn
byte) tw , được xác định bằng băng thông vật lí của kênh truyền thông liên
kết bộ xử lí nguồn và đích Ví dụ, thời gian gửi thông điệp L từ là:
Tmsg= ts + TwL
Trang 17Thời gian rỗi
Thời gian tính toán và thời gian truyền thông đều được chỉ ra một cách
rừ ràng trong thuật toỏn song song vỡ thế khụng khú khăn để tính tổng của
chúng trong thời gian thực hiện Thời gian rỗi (Tidle) có thể khó xác định hơn,
tuy nhiên chúng thường phụ thuộc vào thứ tự các thao tác được thực hiện
Một bộ xử lớ cú thể rỗi vỡ khụng cú tớnh toỏn hoặc thiếu dữ liệu Trong
trường hợp đầu tiên, thời gian rỗi có thể tránh bằng việc sử dụng những kĩ
thuật tải cân bằng Trong trường hợp thứ hai bộ xử lí rỗi trong khi tính toán
và truyền thông đợi dữ liệu ở xa được thực hiện Thời gian rỗi này đôi khi có
thể tránh bằng việc xây dựng một chương trỡnh mà những bộ xử lớ thực hiện
những tính toán hoăc truyền thông khác trong khi đợi dữ liệu ở xa
2 Hiệu suất và hệ số gia tốc
Thời gian thực hiện không phải lúc nào cũng là thước đo tốt nhất để đánh giá
hiệu năng thuật toán Vỡ thời gian thực hiện cú khuynh hướng biến thiên theo kích
thước bài toán, thời gian thực hiện phải được chuẩn hóa khi so sánh hiệu năng thuật
toán với những kích thước khác nhau của bài toán Hiệu suất - phần thời gian mà
bộ xử lí sử dụng để làm công việc có ích- cung cấp một thước đo tốt cho chất lượng
của một thuật toán song song Nó đặc trưng hóa sự hiệu quả của một thuật toán sử
dụng tài nguyên tính toán của một máy tính song song một cách độc lập với kích
thước bài toán Chúng ta định nghĩa hiệu suất tương đối như sau:
E=
P
1
PT T
trong đó T1 là thời gian thực hiện trờn một bộ xử lớ và TP là thời gian trên P bộ xử
lí Một đại lượng liên quan nữa là hệ số gia tốc tương đối:
S=PE
là hệ số chỉ ra thời gian thực hiện giảm đi khi sử dụng P bộ xử lí
Trang 18Những đại lượng trên được gọi là hệ số tăng tốc và hiệu suất tương đối vỡ
chỳng được định nghĩa với khía cạnh thuật toán song song thực hiện trên một bộ xử
lí đơn Giả sử rằng chúng ta có một thuật toán song song mà mất 10000 giây trên
một bộ xử lí và 20 giây trên 1000 bộ xử lí Một thuật toán khác cũng mất 1000 giây
trên một bộ xử lí nhưng chỉ mất 5 giây trên 1000 bộ xử lí Rừ ràng thuật toỏn thứ
hai là tốt hơn với P trong khoảng 1 đến 1000 Nó có hệ số gia tốc chỉ 200 so với
500 của thuật toán đầu
Khi so sánh hai thuật toán, sẽ hữu ích hơn nếu có một tiêu chuẩn độc lập thuật
toán hơn là thời gian thực hiện Vỡ thế chỳng ta định nghĩa hệ số tăng tốc và hiệu
suất tuyệt đối sử dụng như là phép đo thời gian bộ xử lí duy nhất (T1) cho thuật
toán tốt nhất Trong nhiều trường hợp, thuật toán tốt nhất này sẽ là thuật toỏn (tuần
tự) tốt nhất
1.5 Kiến trỳc cụm mỏy tớnh
Trước đây, thuật ngữ “máy tính hiệu năng cao” (High- Performance Computing
- HPC) thường được dùng để chỉ những máy tính song song hoặc máy tính véc tơ
với giá trị lên tới hàng triệu đôla Nhưng với sự phát triển nhanh chóng của công
nghệ phần cứng đặc biệt là những tiến bộ trong việc cải tiến hiệu năng của bộ xử lí
và băng thông mạng đó làm thay đổi một cách toàn diện kiến trúc của các máy tính
hiệu năng cao Và khi các máy tính hiệu năng cao được tạo ra bằng cỏch kết nối
cỏc mỏy trạm (Workstation – WS) với nhau thỡ thuật ngữ “cụm mỏy tớnh”
(Computer Cluster) được sử dụng để mô tả dạng máy tính này
Cụm máy trạm (Workstation Cluster -WSC) là một nhóm các máy trạm được
kết nối với nhau thông qua một mạng tốc độ cao Các máy tính trong một WSC
truyền thông qua một trong hai giao thức truyền thông phổ biến đó là: truyền thông
dựa trên kết nối và truyền thông không kết nối Mô hỡnh kết nối dựa trờn giao thức
TCP (Tranmission Control Protocol) với độ tin cậy cho việc truyền thông điệp
được bảo đảm Mô hỡnh khụng kết nối dựa trờn giao thức UDP (User Datagram
Trang 19Protocol), với giao thức này độ tin cậy cho việc truyền thông điệp được bảo đảm
Hiện nay có rất nhiều phần mềm hỗ trợ việc tính toán song song trên WSC tiêu
biểu như MPICH
WSC có rất nhiều ưu điểm đó là:
o Kĩ thuật tính toán trên các cụm máy tính có thể mở rộng từ một hệ thống
nhỏ đến các hệ thống rất lớn Điều này thể hiện tính mềm dẻo và linh
hoạt của hệ thống Hệ thống có thể chỉ gồm một máy tính hoặc nhiều
máy tính ghép nối mạng với nhau Những máy tính nối mạng Internet
cũng có thể ghép cụm được Hệ thống cũng có thể bao gồm những máy
tính chuyên dụng khác nhau
o Thiết bị phần cứng dùng để xây dựng một cụm máy tính như các máy
tính cá nhân và các máy trạm hiện nay được bán rộng rói trờn thị trường
với giá thành thấp Về nguyên tắc một cụm máy tính chỉ cần có một màn
hỡnh và một bàn phớm nờn giảm được chi phí ban đầu
o Các bộ xử lí mới có thể dễ dàng tích hợp vào hệ thống như là chúng đó
cú sẵn trong hệ thống Đây là ưu điểm của cụm máy tính so với những hệ
thống song song khác và nó nói lên tính an toàn cao của hệ thống
Kiến trúc bó IBM 1600 của trung tâm tính toán hiệu năng cao:
• 5 node tớnh toỏn pSeires 655, mỗi node gồm 8 CPU Power4+16 bit
RISC 1.7 GHz của IBM; cache 5.6 MB ECC L2, 128 MB ECC L3, băng
thông: 72.3 GBps; 32 GB RAM, băng thông bộ nhớ 51.2 GBps; 6x36
GB HDD Năng lực tính toán tổng cộng khoảng 240 GFlóp (mở rộng tối
đa 768 GFlops/16 node)
• 1 node quản lớ phần mềm CSM p630: Power4+64 bit 1.2 GHz; cache 1.5
MB ECC L2, 8 MB ECC L3, băng thông: 12.8 GBps; 1 GB RAM, băng
thông: 6.4 GBps; 6x36 GB HDD, DVD ROM
Trang 20• 1 node điều khiển phần cứng HCM: Intel Xeon 3.06 GHz, 1GB RAM, 40
GB HDD, DVD RAM
• Các node được kết nối với nhau thông qua HPS (High Performance
Switch – Switch hiệu năng cao), băng thông 2 GBps và Gethernet
• Hệ thống lưu trữ chung: IBM DS4400 và EXP700 kết nối với cụm IBM
1600 thông qua cáp quang với băng thông 2 GBps
• Các node chạy HĐH AIX 5L phiên bản 5.2
Kiến trỳc bú IBM 1350 của trung tâm tính toán hiệu năng cao:
• 8 node tính toán, mỗi node gồm 2 chip Intel Xeon Dual Core 3.2 GHz, 2
GB RAM, 1x36 GB HDD, DVD ROM Tổng năng lực tính toán của 8
node là khoảng 51.2 Gflops
• 2 node phục vụ lưu trữ, mỗi node gồm 2 chip Intel Xeon Dual Core 3.2
GHz, 3 GB RAM, 4x72 GB HDD
• 1 node đóng vai trũ quản lớ bao gồm chip Intel Xeon Dual Core 3.2
GHz, 3 GB RAM, 2x36 GBHDD
• Năng lực lưu trữ: thiết bị lưu trữ dùng chung EXP400 với 10x73 GB
HDD SCSI 320 MBps 15KRpm, dùng hệ thống chia sẻ file: GPFS cho
Linux v2.3.0.5
• Các node chạy HĐH Redhat Enterprise Linux 3.0 và được kết nối với
nhau thông qua mạng Gethernet
Trang 21Chương 2: GIAO DIỆN TRUYỀN THÔNG ĐIỆP MPI
2.1 Giới thiệu về MPI
Giao diện truyền thông điệp chuẩn MPI (Message Passing Interface) là một thư
viện truyền thông chuẩn Mục đích của MPI là thiết lập một chuẩn truyền thông
điệp linh hoạt và hiệu quả được sử dụng rộng rói cho việc viết cỏc chương trỡnh
Trang 22truyền thụng điệp MPI không phải là chuẩn ISO hay IEEE nhưng trên thực tế nó
đó trở thành chuẩn công nghiệp cho việc viết các chương trỡnh truyền thụng điệp
trên nền HPC (Hight Performance Computing)
2.2 Mụ hỡnh lập trỡnh MPI
Trong mụ hỡnh lập trỡnh MPI, cỏc tiến trỡnh truyền thụng bằng cỏch gọi cỏc
hàm thư viện để gửi và nhận thông điệp với những tiến trỡnh khỏc Trong hầu hết
cỏc chương trỡnh MPI, số bộ xử lý cố định khi khởi tạo chương trỡnh, và một tiến
trỡnh được tạo ra trên một bộ xử lý Tuy nhiờn, những tiến trỡnh này cú thể chạy
những chương trỡnh khỏc nhau Vỡ thế mụ hỡnh lập trỡnh MPI đôi khi được đề
cập như là đa chương trỡnh đa luồng dữ liệu (MPMD) để phân biệt với mô hỡnh
SPMD (mỗi bộ xử lý thực thi cựng một chương trỡnh)
Số tiến trỡnh trong một chương trỡnh MPI thường cố định Những tiến trỡnh
cú thể sử dụng thao tỏc truyền thông điểm tới điểm từ một tiến trỡnh cụ thể tới
được một tiến trỡnh khỏc, những thao tỏc này cú thể sử dụng để thực thi những
truyền thông cục bộ và không có cấu trúc Một nhóm các tiến trỡnh cú thể gọi cỏc
thao tỏc truyền thụng tập thể để thực hiện những thao tác toàn cục như tổng hợp và
quảng bá MPI hỗ trợ truyền thông không đồng bộ (dị bộ) Có lẽ tính năng quan
trọng nhất của MPI từ quan điểm của công nghệ phần mềm là nó hỗ trợ lập trỡnh
module Một cơ chế được gọi là bộ truyền thông (communicator) cho phộp lập
trỡnh viờn MPI định nghĩa module trong đó đóng gói các cấu trúc truyền thông bên
trong
Những thuật toỏn mà tạo ra chỉ một tỏc vụ trờn một bộ xử lý cú thể thực hiện
trực tiếp sử dụng những hàm truyền thụng tập thể hay điểm tới điểm Những thuật
toán mà tạo ra nhiều tác vụ theo một cách động hoặc phụ thuộc vào sự thực hiện
đồng thời của một vài tác vụ trên 1 bộ xử lý phải được biến đổi để có thể thực thi
MPI
Trang 232.3 Những hàm MPI cơ bản
Mặc dự MPI là một hệ thống phức tạp chỳng ta cú thể giải những bài toán
thuộc một phạm vi rộng mà chỉ sử dụng 6 hàm cơ bản Những hàm này khởi tạo và
kết thúc một chương trỡnh MPI, xỏc định nhận dạng các tiến trỡnh, gửi và nhận
thụng điệp
MPI_Init khởi tạo môi trường MPI
MPI_Finalize đóng môi trường MPI
MPI_Comm_size xác định số các tiến trỡnh
MPI_Comm_rank xác định số hạng tiến trỡnh
MPI-Send gửi một thông điệp
MPI-Recv nhận một thông điệp
Những hàm này được mô tả chi tiết sau đây,trong đó nhón IN, OUT, và INOUT
đứng trước tham số chỉ ra rằng:
IN: hàm sử dụng nhưng không làm thay đổi tham số
OUT: hàm không sử dụng nhưng có thể thay đổi tham số
INOUT: hàm sử dụng và cập nhật tham số
• MPI_Init (int*arge, char ***argv);
Đây là hàm khởi tạo môi trường thực thi MPI Tham số argc, argv được sử
dụng trong C như là những tham số của chương trỡnh chớnh (hàm main)
Hàm này phải được gọi trong mọi chương trỡnh MPI và trước bất kỳ hàm
MPI nào khác, và chỉ được gọi một lần trong một chương trỡnh MPI chương
Với những chương trỡnh C, MPI_Init cú thể được sử dụng để truyền những
tham số dũng lệnh tới tất cả cỏc bộ xử lý
• MPI_Finalize( );
Trang 24Dùng để đóng môi trường thực thi MPI Hàm này được gọi cuối cùng trong
mọi chương trỡnh MPI, khụng một hàm MPI nào cú thể gọi sau nú
• MPI_Comm_size (comm, & size);
Hàm lấy số tiến trỡnh
IN comm bộ truyền thụng
OUT size số cỏc tiến trỡnh trong nhúm comm
• MPI_Comm_rank (comm, & rank);
Hàm lấy hạng của tiến trỡnh
IN comm bộ truyền thụng
OUT rank số của tiến trỡnh trong nhúm comm
Một bộ truyền thụng gồm một tập cỏc tiến trỡnh trong đó các tiến trỡnh cú
thể thực hiện truyền thụng với nhau Bộ truyền thụng cung cấp một cơ chế
nhận dạng tập các tiến trỡnh cho việc phỏt triển những chương trỡnh module
và để đảm bảo các thông điệp dành cho những mục đích khác nhau không bị
nhầm lẫn Nó cung cấp giá trị mặc định MPI_COMM_WORLD, xác định tất
cả các tiến trỡnh trong chương trỡnh Mỗi tiến trỡnh được gán một số hạng là
số nguyên liên tiếp bắt đầu từ 0 Số hạng này cũn được gọi là id của tiến
trỡnh
Bốn hàm trờn thuộc nhúm những hàm quản lý mụi trường Một ví dụ nhỏ sử
dụng các hàm này viết bằng ngôn ngữ C
#include <mpi.h>
#include <stdio.h>
Trang 25int main(int argc, char **argv)
{
int rank, size;
MPI_Init( &argc, &argv );
Đây là hàm gửi thông điệp
IN buff địa chỉ đầu tiên của bộ nhớ đệm chứa dữ liệu để
gửi
IN count số phần tử dữ liệu trong bộ đệm
Trang 26IN datatype kiểu của dữ liệu trong bộ đệm
IN dest số hạng của tiến trỡnh nhận
IN tag nhón của thụng điệp gửi
IN comm bộ truyền thụng
• MPI_Recv (void *buff, int count, MPI_Datatype datatype, int sourse, int
tag, MPI_Comm comm, MPI_Status status)
OUT buff địa chỉ đầu tiên của bộ nhớ đệm nhận dữ liệu
IN count kích thước của bộ nhớ đệm nhận tính bằng số phần tử dữ
liệu
IN datatype kiểu dữ liệu của các phần tử trong bộ nhớ đệm
nhận
IN source số hạng của tiến trỡnh nguồn (gửi)
IN tag nhón của thụng điệp
OUT status trạng thỏi
Hai hàm này thuộc nhóm hàm truyền thông điểm tới điểm Các hàm này chỉ
truyền thông điệp giữa hai và chỉ hai tiến trỡnh MPI Một tiến trỡnh thực hiện thao
tỏc gửi và tiến trỡnh cũn lại thực hiện thao tỏc nhận tương ứng
Với ngụn ngữ C, chỳng ta cú thể lập trỡnh MPI bằng cỏch sử dụng thư viện
mpi.h Những tên hàm giống với MPI chuẩn nhưng chỉ MPI được viết hoa và chữ
cái đầu tiên của tên hàm được viết hoa Mó trả về cho việc khởi tạo thành cụng là
MPI-SUCCESS Một tập mó lỗi cũng được định nghĩa Những hằng số đều được
viết hoa và được định nghĩa trong thư viện mpi.h Những kiểu dữ liệu MPI được
định nghĩa cho mỗi kiểu dữ liệu C: MPI_CHAR, MPI_LONG,
MPI_UNSIGNED_CHAR, MII_UNSIGNED, MPI_UNSIGNED_LONG,
MPI_FLOAT, MPI_DOUBLE, MPI_LONG_DOUBLE…
Trang 27Những tham số của hàm số cú nhón IN được truyền theo giá trị, trong khi
những tham số nhón OUT, INOUT truyền theo tham chiếu (như con trỏ) Biến
status thuộc kiểu MPI_Status có trường status.MPI_SOURCE và status.MPI_TAG
gồm các thông tin về souce và tag như trong ví dụ sau (số tiến trỡnh cố định bằng
int size, rank, dest, source, count, tag=1;
char send=’x’, recv;
MPI_Send(&send, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
MPI_Recv(&recv, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD,
&status);
}