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

Nghiên cứu và đánh giá hiệu năng thuật toán BFS sử dụng MPI

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 (3.52 MB, 29 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
------

BÀI TẬP LỚN
Học Phần: TÍNH TỐN HIỆU NĂNG CAO
ĐỀ TÀI:

Nghiên cứu và đánh giá hiệu năng thuật toán
BFS sử dụng MPI
Giảng viên hướng dẫn

: Hà Mạnh Đào

Lớp

: IT6069.1 - 20231IT6069001

Nhóm thực hiện

: Nhóm 11

1. Đỗ Hồi Phong - 2021603816
2. Trần Minh Tuấn - 2021606916

Hà Nội - 2023


LỜI NÓI ĐẦU
Trong thời đại ngày nay, nhu cầu về tính tốn ngày càng tăng cao, việc
phát triển các phương pháp tính tốn hiệu năng cao là một thách thức không


nhỏ. Cùng với sự tiến bộ của công nghệ và phần cứng cũng như phần mềm,
chúng ta đang có những cơ hội mới để nâng cao khả năng xử lý của hệ thống
tính tốn. Đồng thời, những thách thức cũng đặt ra trước chúng ta, đòi hỏi sự
sáng tạo và nghiên cứu sâu rộng về các thuật toán phức tạp, trong đó có BFS.
Vì vậy, nhóm chúng em lựa chọn “Nghiên cứu và đánh giá hiệu năng
thuật toán BFS sử dụng MPI” làm đề tài nghiên cứu của nhóm mình. Chúng em
xác định rằng việc nắm vững thuật toán BFS khơng chỉ quan trọng lý thuyết mà
cịn mang lại những kiến thức cơ bản để áp dụng vào những bài toán trong thực
tế. Sự kết hợp giữa BFS và MPI cho phép sử dụng sức mạnh của tính tốn song
song để giải quyết các bài toán lớn và phức tạp.
Chúng em xin gửi lời cảm ơn sâu sắc đến Thầy Hà Mạnh Đào đã dành
thời gian và kiến thức quý báu để hỗ trợ chúng em trong quá trình nghiên cứu
và phát triển đề tài này.
Tuy vậy, đề tài của chúng em khơng tránh khỏi những sai sót. Nhóm
chúng em rất mong muốn nhận được những đóng góp của các thầy cơ trong hội
đồng.
Nhóm chúng em xin chân thành cảm ơn!

1


MỤC LỤC
LỜI NÓI ĐẦU.....................................................................................................1
MỤC LỤC...........................................................................................................2
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT..................................................................4
1.1. Một số khái niệm về xử lý song song......................................................4
1.2. Tính toán song song.................................................................................4
1.3. Thuật toán BFS......................................................................................12
1.3.1 Khái niệm..........................................................................................12
1.3.2 Tư tưởng của thuật toán..................................................................13

1.3.3 Ứng dụng của thuật toán BFS.........................................................14
1.4. MPI..........................................................................................................14
1.4.1. Giới thiệu về MPI............................................................................14
1.4.2. Sự cần thiết của MPI đối với đề tài................................................15
1.4.3. Ứng dụng của MPI..........................................................................15
CHƯƠNG 2: Thuật toán BFS cho bài tốn tìm đường đi ngắn nhất trong
đồ thị khơng trọng số........................................................................................17
2.1. Khái niệm và ví dụ bài tốn tìm đường đi ngắn nhất trong đồ thị
khơng trọng số...............................................................................................17
2.2. Phân tích bài tốn..................................................................................17
CHƯƠNG 3: Cài Đặt Thuật Tốn..................................................................19
3.1. Xây dựng thuật toán BFS tuần tự cho bài toán..................................19
3.2. Thực hiện song song hố với MPI........................................................21
3.2.1 Cấu hình MPI cho Project...............................................................21
3.2.2 Tích hợp các hàm MPI cần thiết..................................................22
3.2.3 Chương trình thực hiện song song..................................................23
3.3. Đánh giá độ phức tạp của thuật toán BFS...........................................25
CHƯƠNG 4: Kết quả thực nghiệm.................................................................26
2


4.1. Kết quả thực nghiệm chương trình chạy tuần tự................................26
4.2. Kết quả thực nghiệm chương trình chạy song song...........................26
4.3. Nhận xét và đánh giá.............................................................................26
TÀI LIỆU THAM KHẢO................................................................................28

3


CHƯƠNG 1: CƠ SỞ LÝ THUYẾT

1.1. Một số khái niệm về xử lý song song
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.
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 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. Những thuật toán, trong đó có một số thao tác có
thể thực hiện đồng thời được gọi là thuật tốn song song.
1.2. Tính tốn song song
Theo nghĩa đơn giản nhất, tính tốn song song là việc sử dụng đồng thời
nhiều tài ngun tính tốn để giải quyết một vấn đề tính tốn:
 Một vấn đề được chia thành các phần riêng biệt có thể được giải quyết
đồng thời
 Mỗi phần được chia nhỏ thành một loạt các hướng dẫn
 Các hướng dẫn từ mỗi phần thực thi đồng thời trên các bộ xử lý khác
nhau
 Một cơ chế kiểm soát/phối hợp tổng thể được sử dụng

4


Vấn đề tính tốn sẽ có thể:
 Chia nhỏ các cơng việc rời rạc để có thể giải quyết đồng thời;
 Thực hiện nhiều hướng dẫn chương trình bất cứ lúc nào;
 Được giải quyết trong thời gian ngắn hơn với nhiều tài nguyên điện toán
so với một tài nguyên điện tốn duy nhất.
Các tài ngun tính tốn thường là:
 Một máy tính có nhiều bộ xử lý/lõi
 Một số lượng tùy ý các máy tính như vậy được kết nối bởi một mạng
Máy tính song song:
Hầu như tất cả các máy tính độc lập ngày nay đều song song từ góc độ

phần cứng:
 Nhiều đơn vị chức năng (bộ đệm L1, bộ đệm L2, nhánh, tìm nạp
trước, giải mã, dấu phẩy động, xử lý đồ họa (GPU), số nguyên, v.v.)
 Nhiều đơn vị thực thi/lõi
 Nhiều chủ đề phần cứng
5


 Các mạng kết nối nhiều máy tính độc lập (các nút) để tạo thành các
cụm máy tính song song lớn hơn.

Ví dụ, sơ đồ bên dưới hiển thị một cụm máy tính song song LLNL điển hình:
 Bản thân mỗi nút tính tốn là một máy tính song song đa bộ xử lý
 Nhiều nút điện toán được nối mạng cùng với mạng Infiniband
 Các nút mục đích đặc biệt, cũng là bộ xử lý đa năng, được sử dụng
cho các mục đích khác

6


 Phần lớn các máy tính song song lớn (siêu máy tính) trên thế giới là các
cụm phần cứng được sản xuất bởi một số ít (hầu hết) các nhà cung cấp
nổi tiếng.
1.2.1. Mơ hình tính tốn song song
Mơ hình tính tốn song song hiện nay có 4 cách phân loại theo Flynn:
SISD: Single Instruction stream Single Data stream
 Một máy tính nối tiếp (khơng song song)
 Chỉ lệnh đơn: Chỉ có một luồng lệnh đang được CPU thực hiện trong bất
kỳ một chu kỳ xung nhịp nào
 Dữ liệu đơn: Chỉ một luồng dữ liệu được sử dụng làm đầu vào trong bất

kỳ một chu kỳ đồng hồ nào
 Thực hiện xác định
 Đây là loại máy tính lâu đời nhất
 Ví dụ: máy tính lớn thế hệ cũ, máy tính mini, máy trạm và PC lõi đơn/bộ
xử lý.

7


SIMD: Single Instruction stream Multiple Data stream
 Một loại máy tính song song
 Lệnh đơn: Tất cả các đơn vị xử lý thực hiện cùng một lệnh tại bất kỳ chu
kỳ xung nhịp nhất định nào
 Nhiều dữ liệu: Mỗi đơn vị xử lý có thể hoạt động trên một phần tử dữ liệu
khác nhau
 Thích hợp nhất cho các vấn đề chuyên biệt được đặc trưng bởi mức độ
đều đặn cao, chẳng hạn như xử lý đồ họa/hình ảnh.
 Thực thi đồng bộ (lockstep) và xác định
 Hai loại: Mảng bộ xử lý và Đường ống Vector
8


MISD: Multiple Instruction stream Single Data stream
 Một loại máy tính song song
 Nhiều lệnh: Mỗi đơn vị xử lý hoạt động trên dữ liệu một cách độc lập
thông qua các luồng lệnh riêng biệt.
 Dữ liệu đơn: Một luồng dữ liệu được đưa vào nhiều đơn vị xử lý.
 Rất ít (nếu có) ví dụ thực tế về loại máy tính song song này đã từng tồn
tại.
 Một số cách sử dụng có thể hiểu được có thể là:

9


o Nhiều bộ lọc tần số hoạt động trên một luồng tín hiệu
o Nhiều thuật tốn mã hóa cố gắng bẻ khóa một tin nhắn được mã
hóa.

MIMD: Multiple Instruction stream Multiple Data stream
 Một loại máy tính song song
 Nhiều lệnh: Mỗi bộ xử lý có thể đang thực thi một luồng lệnh khác nhau
 Nhiều dữ liệu: Mọi bộ xử lý có thể đang làm việc với một luồng dữ liệu
khác
 Việc thực thi có thể đồng bộ hoặc không đồng bộ, xác định hoặc không
xác định
10


 Hiện tại, loại máy tính song song phổ biến nhất - hầu hết các siêu máy
tính hiện đại đều thuộc loại này.
 Ví dụ: hầu hết các siêu máy tính hiện tại, các cụm máy tính song song
được nối mạng và "lưới", máy tính SMP đa bộ xử lý, PC đa lõi.

1.2.2. Nguyên lý thiết kế thuận toán song song
Khi muốn thực hiện việc xử lí song song ta phải xét cả kiến trúc máy
tính và các thuật tốn song song.
Để thiết kế được các thuật toán song song cần phải thực hiện:
11


 Phân chia dữ liệu cho các tác vụ.

 Chỉ ra cách truy cập và chia sẻ dữ liệu.
 Phân các tác vụ cho các tiến trình (bộ xử lí).
 Các tiến trình được đồng bộ ra sao.
Khi thiết kế một thuật tốn song song có thể sử dụng năm ngun lí chính trong
thiết kế thuật tốn song song:
+ Ngun lý lập lịch: mục đích là giảm tối thiểu các bộ xử lí sử dụng
trong thuật tốn sao cho thời gian tính tốn là khơng tăng (xét theo
khía cạnh độ phức tạp).
+ Nguyên lý hình ống: Nguyên lý này được áp dụng khi 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.
+ Nguyên lý chia để trị: Chia bài toán thành những phần nhỏ hơn tương
đối độc lập với nhau và giải quyết chúng một cách song song.
+ Nguyên lý đồ thị phụ thuộc dữ liệu: Phân tích mối quan hệ dữ liệu
trong tính tốn để xây dựng đồ thị phụ thuộc dữ liệu và dựa vào đó để
xây dựng thuật tốn song song.
+ Ngun lý điều kiện tương tranh: Nếu hai tiến trình cùng muốn truy
cập vào cùng một mục dữ liệu chia sẻ thì chúng phải tương tranh với
nhau, nghĩa là chúng có thể cản trở lẫn nhau.
1.3. Thuật toán BFS
1.3.1 Khái niệm
Thuật toán duyệt đồ thị ưu tiên chiều rộng (Breadth-first search - BFS) là
một trong những thuật tốn tìm kiếm cơ bản và thiết yếu trên đồ thị. Mà trong
đó, những đỉnh nào gần đỉnh xuất phát hơn sẽ được duyệt trước.

12


1.3.2 Tư tưởng của thuật tốn
Với đồ thị khơng trọng số và đỉnh nguồn s. Đồ thị này có thể là đồ thị có

hướng hoặc vơ hướng, điều đó khơng quan trọng đối với thuật tốn. Có thể hiểu
thuật tốn như một ngọn lửa lan rộng trên đồ thị. Ở bước thứ 0, chỉ có đỉnh
nguồn s đang cháy. Ở mỗi bước tiếp theo, ngọn lửa đang cháy ở mỗi đỉnh lại lan
sang tất cả các đỉnh kề với nó. Trong mỗi lần lặp của thuật tốn, "vịng lửa" lại
lan rộng ra theo chiều rộng. Những đỉnh nào gần s hơn sẽ bùng cháy trước.
Chính xác hơn, thuật tốn có thể được mô tả như sau:
Đầu tiên ta thăm đỉnh nguồn s.Việc thăm đỉnh s sẽ phát sinh thứ tự thăm
các đỉnh (u1,u2,…up) kề với s (những đỉnh gần s nhất). Tiếp theo, ta thăm đỉnh
u1, khi thăm đỉnh u1 sẽ lại phát sinh yêu cầu thăm những đỉnh (v1,v2,…,vq) kề
với u1. Nhưng rõ ràng những đỉnh v này “xa” s hơn những đỉnh u nên chúng chỉ
được thăm khi tất cả những đỉnh u đều đã được thăm. Tức là thứ tự thăm các
đỉnh sẽ là: s, u1, u2,…, up, v1, v2,…, vq,…

13


Thuật tốn tìm kiếm theo chiều rộng sử dụng một danh sách để chứa
những đỉnh đang “chờ” thăm. Tại mỗi bước, ta thăm một đỉnh đầu danh sách,
loại nó ra khỏi danh sách và cho những đỉnh kề với nó chưa được thăm xếp
hàng vào cuối danh sách. Thuật toán sẽ kết thúc khi danh sách rỗng.
1.3.3 Ứng dụng của thuật tốn BFS
 

BFS có thể giúp ta giải quyết tốt một số bài tốn trong thời gian và khơng

gian tối thiểu. Đặc biệt là bài tốn tìm kiếm đường đi ngắn nhất từ một đỉnh gốc
tới tất cả các đỉnh khác. Trong đồ thị khơng có trọng số hoặc tất cả trọng số
bằng nhau, thuật tốn sẽ ln trả ra đường đi ngắn nhất có thể. Ngồi ra, thuật
tốn này cịn được dùng để tìm các thành phần liên thơng của đồ thị, hoặc kiểm
tra đồ thị hai phía, …

1.4. MPI
1.4.1. Giới thiệu về MPI
 

Thông thường, hầu hết các chương trình tính tốn đều được thiết kế để

chạy trên một lõi, đó là cách tính tốn tuần tự (serial computation). Để có thể
chạy được chương trình một cách hiệu quả trên hệ thống máy tính hoặc các
CPU đa lõi, chúng ta phải tiến hành song song hóa chương trình đó. Việc lập
trình song song có thể thực hiện thơng qua các hàm thư viện (ví dụ: mpi.h) hoặc

14


các đặc tính đã được tích hợp trong các chương trình biên dịch song song dữ
liệu.
MPI là viết tắt của Message Passing Interface. Đó là một thư viện các
hàm trong C và Fortran cho phép chèn vào trong code để thực hiện trao đổi dữ
liệu giữa các tiến trình.
MPI thường sử dụng cho hệ thống có kiến trúc bộ nhớ phân tán (hệ thống
máy tính phân cụm (cluster))), tuy nhiên nó cũng hoạt động bình thường trên hệ
thống kiến trúc chia sẻ bộ nhớ.
Chương trình MPI được dịch và chạy trên nền tảng có hỗ trợ chuẩn 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.
Một chương trình MPI bao gồm nhiều chương trình tuần tự có trao đổi dữ
liệu với nhau thông qua việc gọi các hàm trong thư viện.

1.4.2. Sự cần thiết của MPI đối với đề tài
MPI giúp tận dụng được sức mạnh tính tốn của nhiều máy tính, làm tăng
tốc độ thực thi của thuật tốn BFS trên các dự án lớn và có độ phức tạp cao.
MPI là một chuẩn phổ biến được hỗ trợ trên nhiều nền tảng và kiến trúc
khác nhau, điều này giúp đảm bảo tính mở rộng của nghiên cứu và đánh giá
hiệu năng, không phụ thuộc vào một hệ thống cụ thể.
MPI hỗ trợ các chức năng đồng bộ hóa, giúp đảm bảo rằng dữ liệu được
truyền và xử lý một cách đồng bộ, tránh tình trạng đọc/ghi khơng an toàn.

15


1.4.3. Ứng dụng của MPI
MPI có 2 ứng dụng chính:
-

Tính toán Phân tán (Distributed Computing): MPI là lựa chọn phổ biến

cho các ứng dụng u cầu tính tốn phân tán, nơi nhiều máy tính cộng tác để
giải quyết một vấn đề lớn. Điều này có thể bao gồm việc phân phối dữ liệu, tính
tốn đồng thời, và gửi/nhận thơng tin giữa các nút.
-

Xử lý Song song và Tính tốn Đa luồng (Parallel Processing and

Multithreading): Trong môi trường song song và đa luồng, MPI có thể được tích
hợp với các kỹ thuật song song khác để tăng cường hiệu suất tính toán.

 


16


CHƯƠNG 2: Thuật tốn BFS cho bài tốn tìm đường đi
ngắn nhất trong đồ thị không trọng số
2.1. Khái niệm và ví dụ bài tốn tìm đường đi ngắn nhất trong đồ thị khơng
trọng số
Bài tốn tìm đường đi ngắn nhất trong đồ thị không trọng số là những bài
sử dụng BFS thường u cầu tìm số bước ít nhất (hoặc đường đi ngắn nhất) từ
điểm đầu đến điểm cuối. Bên cạnh đó, đường đi giữa 2 điểm bất kì thường có
chung trọng số (và thường là 1). Phổ biến nhất là dạng bài cho bảng N×M, có
những ơ đi qua được và những ô không đi qua được. Bảng này có thể là mê
cung, sơ đồ, các thành phố hoặc các thứ các thứ tương đương.
Ví dụ về bài tốn tìm đường đi ngắn nhất trong đồ thị khơng trọng số:
Đề bài: Cho một bảng hình chữ nhật chia thành lưới ơ vng kích thước M×N
(1 ≤ M, N ≤ 100). Mỗi ô mang 1 trong 4 giá trị sau : ‘.’ , ‘*’ , ‘B’ , ‘C’. Cô bị
Bessie đang đứng ở ơ C và cần đi đến ô B. Mỗi bước đi Bessie có thể đi từ 1 ô
vuông sang 4 ô vuông khác kề cạnh nhưng không được đi vào ô * hay đi ra khỏi
bảng. Hãy tìm số bước đi ít nhất để Bessie đến được ơ B.
Đảm bảo chỉ có duy nhất 1 ơ B và 1 ô C trong bảng, và luôn tồn tại đường đi từ
C đến B.
2.2. Phân tích bài tốn
Theo mối quan hệ được xây dựng trong đề bài, Bessie có thể di chuyển từ
1 ơ vng sang 4 ơ vng khác kề cạnh. Từ đó, ta có thể xây dựng một mơ hình
đồ thị của bài tốn:
-

Gọi mỗi đỉnh của đồ thị tương ứng với mỗi ô trong lưới ô vuông.Tồn tại

một cạnh nối giữa cặp đỉnh (u, v) khi và chỉ khi từ ô tương ứng với đỉnh u có


17


thể di chuyển đến ô tương ứng với đỉnh v (đồng nghĩa, ô tương ứng với đỉnh u
kề cạnh với ô tương ứng với đỉnh v và cả 2 ô đều không phải là ô * ).
-

Sau khi xây dựng được đồ thị, bài tốn quy về như sau: Tìm đường đi

ngắn nhất từ đỉnh tương ứng với ô C đến đỉnh tương ứng với ô B. Độ dài đường
đi ngắn nhất đó chính là số bước ít nhất mà Bessie cần thực hiện.
=> Vậy để tìm được kết quả bài toán, ta sẽ áp dụng thuật toán BFS.

18


CHƯƠNG 3: Cài Đặt Thuật Toán
3.1. Xây dựng thuật toán BFS tuần tự cho bài tốn
Chương trình thực hiện tuần tự:

19



×