25 CHƯƠNG 3 - MPI TRONG THUẬT TOÁN DIJKSTRA CHO BÀI TOÁN TÌM KIẾM ĐƯỜNG ĐI NGẮN NHẤT .... Tuy nhiên, với sự bùng nổ thông tin và sự phát triển của công nghệ thông tin, những thuật toán t
Trang 1TRƯỜNG ĐẠI HỌC LẠC HỒNG
* * *
Đặng Như Toàn
Song song hoá thuật toán tìm đường đi ngắn nhất
trên nguồn dữ liệu lớn dùng MPI
Luận văn Thạc sỹ Công nghệ thông tin
Đồng Nai - năm 2011
Trang 2TRƯỜNG ĐẠI HỌC LẠC HỒNG
* * *
Đặng Như Toàn
Song song hoá thuật toán tìm đường đi ngắn nhất
trên nguồn dữ liệu lớn dùng MPI
Chuyên ngành: Công nghệ thông tin
Mã số: 604805
Luận văn Thạc sỹ Công nghệ thông tin
Người hướng dẫn khoa học PGS.TS Trần Văn Lăng
Đồng Nai - năm 2011
Trang 3Được sự định hướng của thầy PGS TS Trần Văn Lăng, em đã lựa chọn đề tài
“Song song hoá thuật toán tìm kiếm đường đi ngắn nhất với MPI”
Được sự giúp đỡ và hướng dẫn tận tình của thầy PGS TS Trần Văn Lăng và một
số đồng nghiệp, đến nay em đã hoàn thành luận văn của mình Mặc dù đã cố gắng, nhưng do thời gian có hạn và hạn chế của bản thân nên không tránh khỏi
có những thiếu sót Em rất mong nhận được ý kiến đóng góp của các Thầy Cô và các bạn đồng nghiệp để luận văn được hoàn thiện hơn
Tác giả
Đặng Như Toàn
Trang 4LỜI CẢM ƠN iii
MỤC LỤC iv
Danh mục các thuật ngữ vii
Danh mục các hình vẽ, bảng biểu viii
MỞ ĐẦU 1
1 Đặt vấn đề 1
2 Mục đích của luận văn 1
3 Nội dung của luận văn 1
4 Phương pháp nghiên cứu 2
CHƯƠNG 1 - MỘT SỐ KỸ THUẬT TÌM KIẾM ĐƯỜNG ĐI NGẮN NHẤT 3
1.1 Bài toán tìm kiếm đường đi ngắn nhất 3
1.2 Các thuật toán 4
1.2.1 Thuật toán Dijkstra 4
1.2.2 Thuật toán A star 6
1.2.3 Thuật toán di truyền 9
CHƯƠNG 2 - LẬP TRÌNH SONG SONG VỚI MPI 16
2.1 Tổng quan về lập trình song song với MPI 16
2.1.1 Giới thiệu 16
Trang 52.2.1 Giới thiệu 19
2.2.2 Một số vấn đề về hiệu năng 21
2.2.2.1 Năng lực tính toán 21
2.2.2.2 Cân bằng tải 23
2.2.2.3 Sự bế tắc 25
CHƯƠNG 3 - MPI TRONG THUẬT TOÁN DIJKSTRA CHO BÀI TOÁN TÌM KIẾM ĐƯỜNG ĐI NGẮN NHẤT 27
3.1 Yêu cầu đặt ra cho bài toán tìm kiếm đường đi ngắn nhất theo giải thuật Dijksta 27
3.2 Xây dựng hàm tìm kiếm đường đi ngắn nhất 27
3.2.1 Xây dựng thuật toán Dijkstra tuần tự cho bài toán 27
3.2.2 Thực hiện song song hoá 28
3.2.3 Thuật toán song song 29
3.2.4 Lựa chọn hàm MPI cho thuật toán song song 30
3.2.5 Công thức song song 35
3.3 Chi phí thời gian 38
CHƯƠNG 4 - KẾT QUẢ THỬ NGHIỆM 39
4.1 Các kết quả thử nghiệm 39
4.1.1 Kết quả thử nghiệm giải thuật Dijkstra cổ điển 39
Trang 6KẾT LUẬN 44 TÀI LIỆU THAM KHẢO 45
Trang 7LIS – Language Independent Specifications MIMD – Multiple Instruction Multiple Data MPI – Message Passing Interface
OSI – Open Systems Interconnection
PVM – Parallel Vitual Machine
TCP – Transmission Control Protocol
TTDT – Thuật toán di truyền
Trang 8Hình 1.1 – Kỹ thuật quay bánh xe
Hình 2.1 – Khả năng tăng tốc độ tính toán, trường hợp lý tưởng
Hình 2.2 – Khả năng tăng tốc độ tính toán, trường hợp thực tế
Hình 3.1 – Sơ đồ khối thuật toán Dijkstra song song
Bảng 4.1 – Thời gian thực hiện thuật toán Dijkstra cổ điển
Bảng 4.2 – Thời gian thực hiện thuật toán Dijkstra song song
Bảng 4.3: Thời gian thực hiện thuật toán Dijkstra song song với nhiều tiến trình Hình 4.4: So sánh kết quả thử nghiệm thuật toán Dijksta
Hình 4.5: So sánh kết quả thử nghiệm thuật toán Dijksta với nhiều tiến trình
Trang 9MỞ ĐẦU
1 Đặt vấn đề
Tim kiếm đường đi ngắn nhất là một bài toán kinh điển đã được nghiên cứu rất nhiều và ứng dụng trong những hệ thống chuyên biệt Rất nhiều nghiên cứu đã cải tiến những thuật toán và tối ưu thuật toán về không gian tìm kiếm, thời gian tìm kiếm
Tuy nhiên, với sự bùng nổ thông tin và sự phát triển của công nghệ thông tin, những thuật toán tìm kiếm đường đi ngắn nhất kinh điển không thể đáp ứng được thời gian tìm kiếm tốt nhất trên lượng dữ liệu lớn
Bài toán đặt ra là làm thế nào để giải quyết vấn đề tìm kiếm đường đi ngắn nhất với nguồn dữ liệu lớn và phân tán, đáp ứng được mục tiêu rút ngắn thời gian tìm kiếm
2 Mục đích của luận văn
Nghiên cứu và song song hoá thuật toán Dijkstra cho bài toán tìm đường đi ngắn nhất trên nguồn dữ liệu lớn và phân tán; từ đó nâng cao hiệu quả của việc xử lý
dữ liệu
3 Nội dung của luận văn
Trong luận văn này gồm có 3 nội dung:
- Nội dung 1: Nghiên cứu về bài toán tìm kiếm đường đi ngắn nhất Đánh giá
ưu điểm, nhược điểm của từng thuật toán
Trang 10- Nội dung 2: Cải tiến thuật toán Dijkstra cho bài toán tìm kiếm đường đi ngắn nhất bằng cách song song hóa thuật toán để tối ưu về thời gian tìm kiếm trên nguồn dữ liệu lớn
- Nội dung 3: Tiến hành thử nghiệm, đánh giá thuật toán cải tiến
4 Phương pháp nghiên cứu
Để thực hiện những nội dung đã nêu ở trên, tác giả đã sử dụng một số phương pháp cho từng nội dung như sau:
- Nội dung 1: sử dụng phương pháp phân tích, so sánh và đánh giá các thuật toán tìm kiếm đường đi ngắn nhất
- Nội dung 2: sử dụng phương pháp phân tích khả năng song song hóa thuật toán Dijkstra
- Nội dung 3: sử dụng phương pháp đối sánh để đánh giá kết quả thử nghiệm của thuật toán đã cải tiến
Trang 11CHƯƠNG 1 - MỘT SỐ KỸ THUẬT TÌM KIẾM ĐƯỜNG ĐI NGẮN
NHẤT
1.1 Bài toán tìm kiếm đường đi ngắn nhất
Trong lý thuyết đồ thị, bài toán đường đi ngắn nhất nguồn đơn là bài toán tìm một đường đi giữa hai đỉnh sao cho tổng các trọng số của các cạnh tạo nên đường đi đó là nhỏ nhất
Định nghĩa một cách hình thức, cho trước một đồ thị có trọng số (nghĩa là một
tập đỉnh V, một tập cạnh E, và một hàm trong số có giá trị thực f: E → R), cho trước một đỉnh v thuộc V, tìm một đường đi P từ v tới mỗi đỉnh v' thuộc V sao
cho:
P
p
p
f( ) là nhỏ nhất trong tất cả các đường nối từ v tới v'
Các thuật toán quan trọng nhất giải quyết bài toán này là:
- Thuật toán Dijkstra: giải bài toán nguồn đơn nếu tất cả các trọng số đều không âm Thuật toán này có thể tính toán tất cả các đường đi ngắn nhất từ một đỉnh xuất phát cho trước s tới mọi đỉnh khác mà không làm tăng thời gian chạy
- Thuật toán Bellman-Ford: giải bài toán nguồn đơn trong trường hợp trọng
Trang 12- Thuật toán Johnson: giải bài toán đường đi ngắn nhất cho mọi cặp đỉnh, có thể nhanh hơn thuật toán Floyd-Warshall trên các đồ thị thưa
Lý thuyết nhiễu (Perturbation theory): tìm đường đi ngắn nhất địa phương (trong trường hợp xấu nhất)
1.2 Các thuật toán
1.2.1 Thuật toán Dijkstra
Thuật toán Dijkstra [2], mang tên của nhà khoa học máy tính người Hà Lan Edsger Dijkstra, là một thuật toán giải quyết bài toán đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng không có cạnh mang trọng số âm
Bài toán: Cho đơn đồ thị liên thông, có trọng số G=(V,E) Tìm khoảng cách
d(u0,v) từ một đỉnh u0 cho trước đến một đỉnh v bất kỳ của G và tìm đường đi ngắn nhất từ u0 đến v
Phương pháp của thuật toán Dijkstra là: xác định tuần tự đỉnh có khoảng cách đến u0 từ nhỏ đến lớn
Trước tiên, đỉnh có khoảng cách đến a nhỏ nhất chính là a, với d(u0,u0)=0 Trong các đỉnh v u0, tìm đỉnh có khoảng cách k1 đến u0 là nhỏ nhất Đỉnh này phải là một trong các đỉnh kề với u0 Giả sử đó là u1:
d(u0,u1) = k1 Trong các đỉnh v u0 và v u1, tìm đỉnh có khoảng cách k2 đến u0 là nhỏ nhất Đỉnh này phải là một trong các đỉnh kề với u0 hoặc với u1 Giả sử đó là u2:
d(u0,u2) = k2
Trang 13Tiếp tục như trên, cho đến bao giờ tìm được khoảng cách từ u0 đến mọi đỉnh v của G Nếu V={u0, u1, , un} thì:
0 = d(u0,u0) < d(u0,u1) < d(u0,u2) < < d(u0,un)
Thuật toán Dijkstra:
Procedure Dijkstra (G=(V,E) là đơn đồ thị liên thông, có trọng số với trọng số
u:= a while S
Trang 141.2.2 Thuật toán A star
Thuật toán A* [1] được mô tả lần đầu vào năm 1968 bởi Peter Hart, Nils Nilsson, và Bertram Raphael Trong bài báo của họ, thuật toán được gọi là thuật toán A; khi sử dụng thuật toán này với một đánh giá heuristic thích hợp sẽ thu được hoạt động tối ưu, do đó mà có tên A*
Thuật toán này tìm một đường đi từ một nút khởi đầu tới một nút đích cho trước (hoặc tới một nút thỏa mãn một điều kiện đích) Thuật toán này sử dụng một
"đánh giá heuristic" để xếp loại từng nút theo ước lượng về tuyến đường tốt nhất
đi qua nút đó Thuật toán này duyệt các nút theo thứ tự của đánh giá heuristic này Do đó, thuật toán A* là một ví dụ của tìm kiếm theo lựa chọn tốt nhất (best-first search)
Bài toán: Giả sử u là một trạng thái đạt tới (có đường đi từ trạng thái ban đầu u0tới u) Xác định hai hàm đánh giá sau:
- g(u) là đánh giá độ dài đường đi ngắn nhất từ u0 tới u (Đường đi từ u0 tới
trạng thái u không phải là trạng thái đích được gọi là đường đi một phần, để phân
biệt với đường đi đầy đủ, là đường đi từ u0 tới trạng thái đích)
Trang 15- h(u) là đánh giá độ dài đường đi ngắn nhất từ u tới trạng thái đích
Hàm h(u) được gọi là chấp nhận được (hoặc đánh giá thấp) nếu với mọi trạng
thái u, h(u) độ dài đường đi ngắn nhất thực tế từ u tới trạng thái đích Chẳng hạn trong bài toán tìm đường đi ngắn nhất trên bản đồ giao thông, có thể xác định h(u) là độ dài đường chim bay từ u tới đích
Có thể sử dụng kỹ thuật tìm kiếm leo đồi với hàm đánh giá h(u) Tất nhiên phương pháp này chỉ cho phép tìm được đường đi tương đối tốt, chưa chắc đã là đường đi tối ưu
Ngoài ra, cũng có thể sử dụng kỹ thuật tìm kiếm tốt nhất đầu tiên với hàm đánh giá g(u) Phương pháp này sẽ tìm ra đường đi ngắn nhất, tuy nhiên nó có thể kém hiệu quả
Để tăng hiệu quả tìm kiếm, có thể sử dụng hàm đánh giá mới:
f(u) = g(u) + h(u)
Tức là, f(u) là đánh giá độ dài đường đi ngắn nhất qua u từ trạng thái ban đầu tới trạng thái kết thúc
Thuật toán A* là thuật toán sử dụng kỹ thuật tìm kiếm tốt nhất đầu tiên với hàm đánh giá f(u)
Thuật toán A*:
begin
1 Khởi tạo danh sách L chỉ chứa trạng thái ban đầu;
2 loop do
2.1 if L rỗng then
Trang 16{thông báo thất bại; stop};
2.2 Loại trạng thái u ở đầu danh sách L;
2.3 if u là trạng thái đích then
{thông báo thành công; stop}
2.4 for mỗi trạng thái v kề u do
{g(v) g(u) + k(u,v);
f(v) g(v) + h(v);
2.5 Sắp xếp L theo thứ tự tăng dần của hàm f sao cho
trạng thái có giá trị của hàm f nhỏ nhất
ở đầu danh sách;
end;
Độ phức tạp của thuật toán A*: Độ phức tạp thời gian của A* phụ thuộc vào
đánh giá heuristic Trong trường hợp xấu nhất, số nút được mở rộng theo hàm
mũ của độ dài lời giải, nhưng nó sẽ là hàm đa thức khi hàm heuristic hthỏa mãn điều kiện sau:
|h(x) – h * (x)| ≤ O(log h * (x)) Trong đó h * là heuristic tối ưu, nghĩa là hàm cho kết quả là chi phí chính xác để
đi từ x tới đích Nói cách khác, sai số của h không nên tăng nhanh hơn lôgarit của "heuristic hoàn hảo" h * - hàm trả về khoảng cách thực từ x tới
đích
Trang 17Vấn đề sử dụng bộ nhớ của A* còn rắc rối hơn độ phức tạp thời gian Trong trường hợp xấu nhất, A* phải ghi nhớ số lượng nút tăng theo hàm mũ
1.2.3 Thuật toán di truyền
Thuật toán di truyền (TTDT) là thuật toán bắt chước sự chọn lọc tự nhiên và di truyền Trong tự nhiên, các cá thể khỏe, có khả năng thích nghi tốt với môi trường sẽ được tái sinh và nhân bản ở các thế hệ sau Mỗi cá thể có cấu trúc gien đặc trưng cho phẩm chất của cá thể đó Trong quá trình sinh sản, các cá thể con
có thể thừa hưởng các phẩm chất của cả cha và mẹ, cấu trúc gien của nó mang một phần cấu trúc gien của cha và mẹ Ngoài ra, trong quá trình tiến hóa, có thể xảy ra hiện tượng đột biến, cấu trúc gien của cá thể con có thể chứa các gien mà
cả cha và mẹ đều không có
Trong TTDT, mỗi cá thể được mã hóa bởi một cấu trúc dữ liệu mô tả cấu trúc
gien của cá thể đó, ta sẽ gọi nó là nhiễm sắc thể (chroniosome) Mỗi nhiễm sắc
thể được tạo thành từ các đơn vị được gọi là gien Chẳng hạn, trong các TTDT
cổ điển, các nhiễm sắc thể là các chuỗi nhị phân, tức là mỗi cá thể được biểu diễn bởi một chuỗi nhị phân
TTDT sẽ làm việc trên các quần thể gồm nhiều cá thể Một quần thể ứng với một
giai đoạn phát triển sẽ được gọi là một thế hệ Từ thế hệ ban đầu được tạo ra,
TTDT bắt chước chọn lọc tự nhiên và di truyền để biến đổi các thế hệ TTDT sử dụng các toán tử cơ bản sau đây để biến đổi các thế hệ:
- Toán tử tái sinh (reproduction) (còn được gọi là toán tử chọn lọc (selection)): Các cá thể tốt được chọn lọc để đưa vào thế hệ sau Sự lựa chọn này
được thực hiện dựa vào độ thích nghi với môi trường của mỗi cá thể Ta sẽ gọi
hàm ứng mỗi cá thể với độ thích nghi của nó là hàm thích nghi (fitness function)
Trang 18- Toán tử lai ghép (crossover): Hai cá thể cha và mẹ trao đổi các gien để tạo
Khởi tạo thế hệ ban đầu P(t);
Đánh giá P(t) (theo hàm thích nghi);
Trang 19Trong thủ tục trên, điều kiện kết thúc vòng lặp có thể là một số thế hệ đủ lớn nào
đó, hoặc độ thích nghi của các cá thể tốt nhất trong các thế hệ kế tiếp nhau khác nhau không đáng kể Khi thuật toán dừng, cá thể tốt nhất trong thế hệ cuối cùng được chọn làm nghiệm cần tìm
Xét chi tiết hơn toán tử chọn lọc và các toán tử di truyền (lai ghép, đột biến) trong các TTDT cổ điển:
Chọn lọc:
Việc chọn lọc các cá thể từ một quần thể dựa trên độ thích nghi của mỗi cá thể Các cá thể có độ thích nghi cao có nhiều khả năng được chọn Cần nhấn mạnh
rằng, hàm thích nghi chỉ cần là một hàm thực dương, nó có thể không tuyến tính,
không liên tục, không khả vi Quá trình chọn lọc được thực hiện theo kỹ thuật quay bánh xe
Giả sử thế hệ hiện thời P(t) gồm có n cá thể {x1, ,xn} Số n được gọi là cỡ của quần thể Với mỗi cá thể xi, tính độ thích nghi của nó f(xi) Tính tổng các độ thích nghi của tất cả các cá thể trong quần thể:
1 if(xi)F
Mỗi lần chọn lọc, thực hiện hai bước sau:
- Sinh ra một số thực ngẫu nhiên q trong khoảng (0, F);
- xk là cá thể được chọn, nếu k là số nhỏ nhất sao cho
1
4)(
Trang 20Việc chọn lọc theo hai bước trên có thể minh họa như sau: Có một bánh xe được chia thành n phần, mỗi phần ứng với độ thích nghi của một cá thể (hình 1) Một mũi tên chỉ vào bánh xe Quay bánh xe, khi bánh xe dừng, mũi tên chỉ vào phần nào, cá thể ứng với phần đó được chọn
Hình 1.1: Kỹ thuật quay bánh xe
Rõ ràng là với cách chọn này, các cá thể có thể có độ thích nghi càng cao càng
có khả năng được chọn Các cá thể có độ thích nghi cao có thể có một hay nhiều bản sao, các cá thể có độ thích nghi thấp có thể không có mặt ở thế hệ sau (nó bị chết đi)
Lai ghép:
Trên cá thể được chọn lọc, tíến hành toán tử lai ghép Đầu tiên cần đưa ra xác suất lai ghép pc xác suất này cho hy vọng có pc.n cá thể được lai ghép (n là cỡ của quần thể)
Với mỗi cá thể ta thực hiện hai bước sau:
- Sinh ra số thực ngẫu nhiên r trong đoạn [0, 1];
- Nếu r < pc thì cá thể đó được chọn để lai ghép
Từ các cá thể được chọn để lai ghép, người ta cặp đôi chúng một cách ngẫu nhiên Trong trường hợp các nhiễm sắc thể là các chuỗi nhị phân có độ dài cố định m, ta có thể thực hiện lai ghép như sau: Với mỗi cặp, sinh ra một số nguyên
Trang 21ngẫu nhiên p trên đoạn [0, m -1], p là vị trí điểm ghép Cặp gồm hai nhiễm sắc thể
a = (a1 , , ap , ap+1 , , am)
a = (b1 , , bp , bp+1 , , bm) được thay bởi hai con là:
a' = (a1 , , ap , bp+1 , , bm) b' = (b1 , , bp , ap+1 , , am)
Đột biến:
Thực hiện toán tử đột biến trên các cá thể có được sau quá trình lai ghép Đột biến là thay đổi trạng thái một số gien nào đó trong nhiễm sắc thể Mỗi gien chịu đột biến với xác suất pm Xác suất đột biến pm do ta xác định và là xác suất thấp Sau đây là toán tử đột biến trên các nhiễm sắc thể chuỗi nhị phân
Với mỗi vị trí i trong nhiễm sắc thể:
a = (a1 , , ai , , am) Sinh ra một số thực nghiệm ngẫu nhiên pi trong [0,1] Qua đột biến a được biến thành a’ như sau:
a' = (a'1 , , a'i , , a'm) Trong đó:
a'i = ai nếu pi pm
1 - ai nếu pi < pm
Trang 22Sau quá trình chọn lọc, lai ghép, đột biến, một thế hệ mới được sinh ra Công việc còn lại của thuật toán di truyền bây giờ chỉ là lặp lại các bước trên
Thuật toán di truyền khác với các thuật toán tối ưu khác ở các điểm sau:
- TTDT chỉ sử dụng hàm thích nghi để hướng dẫn sự tìm kiếm, hàm thích nghi chỉ cần là hàm thực dương Ngoài ra, nó không đòi hỏi không gian tìm kiếm phải có cấu trúc nào cả
- TTDT làm việc trên các nhiễm sắc thể là mã của các cá thể cần tìm
- TTDT tìm kiếm từ một quần thể gồm nhiều cá thể
- Các toán tử trong TTDT đều mang tính ngẫu nhiên
Để giải quyết một vấn đề bằng TTDT, cần thực hiện các bước sau đây:
- Trước hết cần mã hóa các đối tượng cần tìm bởi một cấu trúc dữ liệu nào
- Xác định cỡ của quần thể và khởi tạo quần thể ban đầu
- Xác định xác suất lai ghép pc và xác suất đột biến Xác suất đột biến cần là xác suất thấp Người ta (Goldberg, 1989) khuyên rằng nên chọn xác suất lai ghép
là 0,6 và xác suất đột biến là 0,03 Tuy nhiên cần qua thử nghiệm để tìm ra các xác suất thích hợp cho vấn đề cần giải quyết
Trang 23Nói chung thuật ngữ TTDT là để chỉ TTDT cổ điển, khi mà cấu trúc của các nhiễm sắc thể là các chuỗi nhị phân với các toán tử di truyền đã được mô tả ở trên Song trong nhiều vấn đề thực tế, thuận tiện hơn, có thể biểu diễn nhiễm sắc thể bởi các cấu trúc khác, chẳng hạn vectơ thực, mảng hai chiều, cây Tương ứng với cấu trúc của nhiễm sắc thể, có thể có nhiều cách xác định các toán tử di truyền Quá trình sinh ra thế hệ mới P(t) từ thế hệ cũ P(t - 1) cũng có nhiều cách chọn lựa Người ta gọi chung các thuật toán này là thuật toán tiến hóa (evolutionary algorithms) hoặc chương trình tiến hóa (evolution program)
Trang 24CHƯƠ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 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
Trang 25Trong 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
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
Trang 26Hầ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 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ô