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

ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN CANNON SỬ DỤNG MPI TRONG NHÂN MA TRẬN

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 (772.56 KB, 30 trang )

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

BÁO CÁO BTL THUỘC HỌC PHẦN:
TÍNH TỐN HIỆU NĂNG CAO

ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN CANNON SỬ
DỤNG MPI TRONG NHÂN MA TRẬN

GVHD: Ths. Hà Mạnh Đào
Nhóm – Lớp: 11 – 2023IT6069001
Thành viên: Nguyễn Hoàng Giang
Nguyễn Tiến Nam
Đỗ Trung Quân

Hà Nội, 2023

2021603232
2021600859
2021600969


LỜI MỞ ĐẦU
Trong suốt bốn thập kỷ gần đây, tiến bộ của cơng nghệ máy tính đã mở ra
những khả năng mới đầy hứa hẹn. Sự gia tăng về hiệu suất của vi xử lý, theo xu
hướng tăng theo thời gian, đã tạo ra bước tiến quan trọng, đánh dấu sự xuất hiện
của nhiều đổi mới công nghệ. Các lĩnh vực như trí tuệ nhân tạo, internet vạn vật
và nhiều lĩnh vực khác đã mở rộng và phát triển nhờ vào sự nâng cao này.
Tuy nhiên, như mọi thứ khác, sự phát triển này cũng đối mặt với những
thách thức. Giới hạn về vật lý và sự hạn chế trong việc tăng cường hiệu suất


phần cứng đặt ra một câu hỏi quan trọng: Làm thế nào chúng ta có thể tiếp tục
cải thiện khả năng tính tốn?
Trong bối cảnh này, tính tốn song song trở thành một hướng đi quan trọng.
Thay vì chỉ tập trung vào việc cải thiện tốc độ của phần cứng, chúng ta đang
nghiên cứu cách thức tính tốn có thể được tối ưu hóa. Tính tốn song song, một
chiến lược đã tồn tại từ lâu, là một trong những phương pháp quan trọng nhất
trong lĩnh vực này.
Trong nghiên cứu này, chúng em sẽ mô phỏng sức mạnh của tính tốn song
song thơng qua việc giải quyết bài tốn nhân ma trận trên cả hai mơ hình và đưa
ra so sánh về hiệu suất. Mặc dù đã nỗ lực hết sức để tránh những sai sót, nhưng
chúng em nhận thức rằng có thể vẫn tồn tại những khuyết điểm nhỏ và mong
nhận được sự thông cảm.
Chúng em cũng muốn bày tỏ lòng biết ơn đặc biệt đến TS. Hà Mạnh Đào,
người đã đồng hành và hỗ trợ chúng em suốt quá trình thực hiện đề tài này.

MỤC LỤ
2


LỜI MỞ ĐẦU..................................................................................................................2
CHƯƠNG 1: CƠ SỞ TÍNH TỐN SONG SONG......................................................6
1.1. Khái niệm...............................................................................................................6
1.2. Tài ngun.............................................................................................................7
1.3. Vấn đề tính tốn....................................................................................................7
1.4. Ứng dụng................................................................................................................7
1.5. Lợi ích.....................................................................................................................8
CHƯƠNG 2: TỔNG QUAN VỀ MPI...........................................................................9
2.1. Khái niệm...............................................................................................................9
2.2. Lập trình MPI.......................................................................................................9
2.2.1. Mơ hình lập trình..............................................................................................9

2.2.2.Lập trình MPI.....................................................................................................9
2.3. Truyền thơng và nhóm (Communicators and Groups)...................................10
2.4. Rank.....................................................................................................................10
2.5. Các hàm quản lý mơi trường.............................................................................11
2.6. Các hàm MPI thơng dụng..................................................................................11
CHƯƠNG 3: BÀI TỐN NHÂN MA TRẬN.............................................................13
3.1. Ma trận.................................................................................................................13
3.1.1. Khái niệm..........................................................................................................13
3.1.2. Ứng dụng của nhân ma trận...........................................................................14
3.2. Thuật toán nhân ma trận tuần tự......................................................................15
3.3. Thuật toán Canon...............................................................................................18
CHƯƠNG 4: KẾT LUẬN............................................................................................27
3


4.1. Kết quả đánh giá trên ma trận khác nhau........................................................27
4.1.1. Thơng số hệ thống...........................................................................................27
4.1.2. Thiết lập bài tốn..........................................................................................27
4.1.3. Thống kê thời gian........................................................................................27
4.1.4. Nhận xét..........................................................................................................28
TỔNG KẾT....................................................................................................................29
TÀI LIỆU THAM KHẢO............................................................................................30

DANH MỤC HÌNH ẢN

4


Hình 1.2. Minh họa thuật tốn song song....................................................................6
Hình 2.1. Minh họa mpi..............................................................................................9

Hình 2.2. Minh họa header file....................................................................................9
Hình 2.3. Cấu trúc chương trình mpi.........................................................................10
Hình 2.4. Truyền thơng và nhóm..............................................................................10
Hình 3.1. Ma trận......................................................................................................13
Hình 3.2. Minh họa tích ma trận...............................................................................14
Hình 3.2. Ví dụ ma trận.............................................................................................14
Hình 3.3. Minh họa quá trình nhân ma trận..............................................................14
Hình 3.4. Code nhân ma trận tuần tự.........................................................................16
Hình 3.5. Code nhân ma trận tuần tự.........................................................................17
Hình 3.6. Hàm cài đặt cannon...................................................................................19
Hình 3.7. Hàm khởi tạo ma trận................................................................................20
Hình 3.8. Khởi tạo 2d cartesian.................................................................................20
Hình 3.9. Hàm kiểm tra số tiến trình là bình phương hoàn hảo................................21

5


CHƯƠNG 1: CƠ SỞ TÍNH TỐN SONG
SONG
1.1. Khái niệm
Tính tốn song song (parallel computing) là một phương pháp tính tốn mà
trong đó nhiều tác vụ tính tốn được thực hiện đồng thời. Thay vì thực hiện các
tác vụ tính tốn theo trình tự thứ tự, tính tốn song song cho phép chúng được
thực hiện cùng một lúc trên nhiều tài ngun tính tốn độc lập, như các bộ xử lý
đa lõi, máy tính đa nịng hoặc mạng máy tính phân tán.
So sánh tính tốn song song và tính tốn tuần tự:









Tính tốn tuần tự
(serial computation)
Được chạy trên máy tính đơn
với một bộ xử lý trung tâm
(CPU).
Mộ bài toán (problem) sẽ được
chia thành một chuỗi các câu
lệnh rời rạc.
Các câu lệnh được thực hiện
một cách tuần tự.
Tại mỗi thời điểm chỉ thực hiện
được một câu lệnh.

Hình 1.1. Minh họa thuật tốn tuần tự

6







Tính tốn song song
(parallel computing)
Để chạy trên nhiều CPU.

Một bài tốn được chia thành
các phần riêng biệt mà có thể
được giải quyết đồng thời.
Mỗi phần được chia nhỏ hơn
dưới một dãy các câu lệnh .
Các câu lệnh của mỗi phần thực
thi đồng thời trên các CPU
khác nhau.

Hình 1.2. Minh họa thuật toán song song


1.2. Tài ngun
Các nguồn tài ngun tính tốn có thể bao gồm:
- Một máy tính đơn với nhiều bộ vi xử lý (CPU).
- Một máy tính đơn với một hoặc nhiều CPU và một số tài nguyên chuyên dụng
như GPU, FPGA …
- Một số lượng tuỳ ý các máy tính được kết nối bởi một mạng máy tính.
- Hoặc kết hợp của cả hai loại trên.
1.3. Vấn đề tính tốn
Vấn đề tính tốn thường được thể hiện qua các đặc điểm như khả năng:
- Chia thành các phần riêng biệt các cơng việc để có thể giải quyết cùng một lúc.
- Thực thi nhiều câu lệnh chương trình tại nhiều thời điểm.
- Giải quyết bài tốn trong thời gian ít hơn với nhiều tài ngun tính tốn hơn là
thực thi chỉ trên một tài ngun tính tốn duy nhất.
1.4. Ứng dụng
- Tính tốn song song là sự tiến hố của tính tốn tuần tự để cố gắng mơ
phỏng các trạng thái diễn ra trong thế giới tự nhiên: rất phức tạp, các sự kiện liên
quan xảy ra cùng một thời điểm, nhưng trong cùng một chuỗi.
Ví dụ:

+ Quỹ đạo hành tinh và thiên hà
+ Các mơ hình thời tiết và đại dương
+ Kiến tạo địa chất
+ Các hoạt động hàng ngày trong một doanh nghiệp
+…
- Tính tốn song song có thể được coi là “tính tốn hiệu năng cao” và là
động lực để mô phỏng cho các hệ thống phức tạp và giải quyết “các bài lớn”
như:
+ Dự báo thời tiết và khí hậu
+ Các phản ứng hố học và hạt nhân
+ Các bài toán sinh học và gen người
+ Các hoạt động địa chất
+ Các thiết bị cơ khí – như chân tay giả cho tàu vũ trụ
+ Các mạch điện tử
7


+ Các quy trình sản xuất
- Ngày nay các ứng dụng thương mại đang là động lực thúc đẩy các nhà
phát triển máy tính và phần mềm tạo ra các máy tính có tốc độ nhanh hơn. Vì các
ứng dụng này yêu cầu xử lý một số lượng lớn dữ liệu và có độ tinh vi phức tạp
cao.
Ví dụ như các ứng dụng:
+ Các cơ sở dữ liệu song song, data mining
+ Thăm dị dầu khí
+ Các máy chủ tìm kiếm, các dịch vụ thương mại
+ Máy tính trợ giúp chuẩn đốn trong y học
+ Quản lý các tập đồn quốc gia và đa quốc gia
+ Cải tiến đồ hoạ và ảo hố
+ Video mạng và các cơng nghệ đa phương tiện

+ Mơi trường làm việc cộng tác
1.5. Lợi ích
- Tiết kiệm thời gian
- Giải quyết những bài toán lớn
- Xử lý đồng thời cùng một lúc
- Tận dụng các nguồn tài ngun như khai thác tài ngun tính tốn có sẵn trên
mạng diện rộng, hoặc thậm chí sử dụng Internet khi các tài nguyên cục bộ hạn
chế
- Tiết kiệm chi phí – sử dụng nhiều tài nguyên máy tính “rẻ” thay vì phải đầu tư
một con siêu máy tính.
- Khắc phục những hạn chế về bộ nhớ - Các máy tính đơn có tài ngun bộ nhớ
rất hữu hạn. Đối với những bài toán lớn, sử dụng bộ nhớ của nhiều máy tính có
thể vượt qua trở ngại này.

8


CHƯƠNG 2: TỔNG QUAN VỀ MPI
2.1. Khái niệm
Là viết tắt của Message Passing Interface, chỉ một dạng giao thức kết nối
của máy tính. Nó nằm trong chuẩn “de facto” cho kết nối giữa các nút chạy một
chương trình song song trên bộ nhớ phân tán.
Tập MPI thi hành bao gồm một thư viện các thủ tục sao cho có thể gọi được
từ các chương trình Fortran, C, C++ hay Ada.
2.2. Lập trình MPI
2.2.1. Mơ hình lập trình
MPI ra đời mục đích dành cho các hệ thống máy tính có bộ nhớ phân tán.
Tuy nhiên MPI cũng có thể triển khai được trên hệ thống máy tính có bộ nhớ
chia sẻ.


Hình 2.1. Minh họa MPI

2.2.2.Lập trình MPI
Header file:
Yêu cầu cho mọi chương trình được lập trình bởi MPI
Định dạng các hàm trong MPI

9


Hình 2.2. Minh họa Header file

Cấu trúc của chương trình MPI

Hình 2.3. Cấu trúc chương trình MPI

2.3. Truyền thơng và nhóm (Communicators and Groups)
Communicators và Group là tập hợp tất cả các processes có thể giao tiếp
được với nhau. Phần lớn các hàm trong thư viện MPI yêu cầu tham số
Communicator. MPI_COMM_WORLD được định nghĩa sẵn.

10


Hình 2.4. Truyền thơng và nhóm

2.4. Rank
Với mỗi Communicator, mỗi processes có một ID nhất định.
Rank được bắt đầu từ 0 .
Sử dụng rank trong các message để chỉ ra nguồn (source) và đích (destination)

2.5. Các hàm quản lý mơi trường
- MPI_Init: Khởi tạo môi trường thực thi MPI. Hàm này được gọi trong mọi
chương trình MPI, được gọi trước các hàm MPI khác, và chỉ được gọi một lần
duy nhất.
int MPI_Init(int *argc,char
***argv)
- MPI_Comm_size: Xác định số lượng process trong nhóm ứng với một
Communicator (thường là MPI_COMM_WORLD)
- MPI_Comm_rank: Trả về id của Communicator hiện tại
int MPI_Comm_size(MPI_Comm comm,int *size ) int MPI_Comm_rank
(comm,&rank)
- MPI_Abort: Hủy bỏ tất cả các MPI processes gắn với một Communicator
int MPI_Abort(MPI_Comm comm,int errorcode)
- MPI_Finalize: Kết thúc môi trường thực thi MPI
int MPI_Finalize()
2.6. Các hàm MPI thông dụng
MPIAPI
MPI_Comm_rank
MPI_File_write_at
MPIAPI MPI_Comm_size
MPI_File_close
MPIAPI
MPI_Comm_split
MPI_Bcast MPI_Send
11

MPI_Ssend
MPI_Iallgather
MPI_Isend
MPI_Iallreduce

MPI_Issend
MPI_Barrier
MPI_Irecv
MPI_Ibarrier


MPIAPI
MPI_Allgather
MPI_Recv
MPI_Allreduce
MPI_Recv_init
MPI_Alltoall
MPI_Rsend
MPI_Gather
MPI_Rsend_init
MPI_Iallreduce
MPI_Sendrecv
MPI_Reduce
MPI_Sendrecv_replace
MPI_Scatter

12

MPI_Group_rank
MPI_Ibcast
MPI_Group_size
MPI_Igather
MPI_File_open
MPI_Igatherv
MPI_File_read

MPI_Ireduce
MPI_File_read_at
MPI_Iscatter
MPI_File_write
MPI_Iscatterv


CHƯƠNG 3: BÀI TOÁN NHÂN MA TRẬN
3.1. Ma trận
3.1.1. Khái niệm
Ma trận là một mảng chữ nhật gồm các số, ký hiệu, hoặc biểu thức, sắp xếp
theo hàng và cột mà mỗi ma trận tuân theo những quy tắc định trước. Các ô
trong ma trận được gọi là các phần tử của ma trận. Các phần tử được xác định
bằng 2 địa chỉ hàng i và cột j tương ứng (kí hiệu là aij)
Ma trận thường được viết trong dấu ngoặc vng:

Hình 3.1. Ma trận

Phép nhân ma trận
Phép nhân hai ma trận chỉ thực hiện được khi số lượng cột trong ma trận
thứ nhất phải bằng số lượng hàng trong ma trận thứ hai. Ma trận kết quả, được
gọi là tích ma trận, có số lượng hàng của ma trận đầu tiên và số cột của ma trận
thứ hai.
Nếu ma trận A có kích thước (m x n) và ma trận B có kích thước (n x p), thì
ma trận tích C = A x B có kích thước (m x p), phần tử đứng ở hàng thứ i, cột thứ
j xác định bởi cơng thức:

 Minh họa tích ma trận AB của hai ma trận A và B:

13



Hình 3.2. Minh họa tích ma trận

Ví dụ: cho 2 ma trận:

Hình 3.2. Ví dụ ma trận

Phần tử C12 của ma trận tích AB là tích của vector hàng thứ nhất của A và
vector cột thứ hai của B, ta có:

Tính tương tự với tất cả phần tử cịn lại của ma trận C. Ta được ma trận tích AB
có dạng:

Mơ tả q trình nhân ma trận:

Hình 3.3. Minh họa quá trình nhân ma trận

3.1.2. Ứng dụng của nhân ma trận
14


a. Mạng Nơ-ron (Neural Networks):
Mạng nơ-ron sử dụng tích ma trận để thực hiện các bước quan trọng như
lan truyền ngược (backpropagation) để điều chỉnh trọng số giữa các nơ-ron.
Trong mỗi lớp, trọng số được biểu diễn bằng ma trận, và phép nhân ma trận
được sử dụng để tính tốn đầu ra của mỗi nơ-ron.
b. Xử Lý Ảnh:
Trong xử lý ảnh, nhân ma trận được sử dụng để thực hiện các phép biến đổi
đồ họa. Ví dụ, để áp dụng bộ lọc (filter) lên một hình ảnh, ta có thể sử dụng phép

nhân ma trận để tính tốn giá trị mới cho từng pixel của hình ảnh.
c. Đồ Họa Máy Tính:
Trong đồ họa máy tính, tích ma trận được sử dụng để thực hiện các phép
biến đổi như dịch, xoay, co giãn và chiếu. Các ma trận biến đổi được kết hợp để
tạo ra hiệu ứng đồ họa phức tạp.
d. Tính Tốn Khoa Học:
Trong nhiều lĩnh vực của tính tốn khoa học, tích ma trận được sử dụng để
giải quyết các hệ phương trình tuyến tính, mơ phỏng và phân tích dữ liệu số.
e. Cơng Nghệ Mơi Trường (Environmental Modeling):
Trong mô phỏng môi trường và hệ thống sinh thái, nhân ma trận được sử
dụng để biểu diễn mối quan hệ phức tạp giữa các yếu tố khác nhau, như thời tiết,
địa hình, và tác động của con người.
3.2. Thuật tốn nhân ma trận tuần tự
Giới Thiệu Thuật Toán:
Thuật toán nhân ma trận theo tuần tự sử dụng ba vòng lặp để tính tốn
từng phần tử của ma trận kết quả.
Vịng lặp ngoài (i) duyệt qua từng hàng của ma trận kết quả.
Vòng lặp giữa (j) duyệt qua từng cột của ma trận kết quả.
Vòng lặp bên trong (k) duyệt qua từng phần tử của hàng i của ma trận A và cột j
của ma trận B để tính tổng.
Biến và Kích Thước Ma Trận:
Biến m, n, và p lần lượt là số hàng của ma trận A, số cột của ma trận A
(cũng là số hàng của ma trận B), và số cột của ma trận B.
Tạo ma trận kết quả result với kích thước m x p và giá trị ban đầu là 0.
15


Vịng Lặp Chính:
Vịng lặp ngồi (i) duyệt qua từng hàng của ma trận kết quả.
Vòng lặp giữa (j) duyệt qua từng cột của ma trận kết quả.

Vòng lặp bên trong (k) duyệt qua từng phần tử của hàng i của ma trận A và cột j
của ma trận B.
Tại mỗi bước, giá trị result[i][j] được cập nhật bằng cộng dồn của tích phần tử
A[i][k] và B[k][j].
Kết Quả:
Ma trận result sau cùng chứa giá trị của tích ma trận A và B.
In Ra Kết Quả:
Một hàm in ra console được sử dụng để hiển thị ma trận kết quả
Code nhân ma trận tuần tự (c++):

Hình 3.4. Code nhân ma trận tuần tự

16


Hình 3.5. Code nhân ma trận tuần tự

Đánh giá độ phức tạp thuật toán:
Độ phức tạp của thuật toán nhân ma trận theo tuần tự có thể được đánh giá
bằng cách xem xét số lần thực hiện phép toán cơ bản (so sánh, gán giá trị, nhân,
cộng). Để đánh giá độ phức tạp, chúng ta sẽ xem xét các thành phần chính của
thuật tốn:
Số Lần Thực Hiện Phép Nhân:
Trong một vịng lặp đầy đủ, ta có ba phép nhân: result[i][j] += A[i][k] * B[k][j].
Vịng lặp ngồi (i) chạy m lần.
Vịng lặp giữa (j) chạy p lần.
Vòng lặp bên trong (k) chạy n lần.
Tổng số lần thực hiện phép nhân là m * p * n.
Tổng Số Phép Toán Cơ Bản:
Số phép toán cơ bản bao gồm cả phép nhân và phép cộng trong vòng lặp

bên trong.
Trong mỗi vòng lặp bên trong, có một phép cộng và một phép nhân.
Tổng số phép toán cơ bản là 2 * m * p * n.
17


Độ Phức Tạp Thời Gian:
Độ phức tạp thời gian của thuật tốn là O(m * p * n).
Điều này có nghĩa là thời gian chạy của thuật toán tăng theo tỉ lệ với kích thước
của ma trận.
Độ Phức Tạp Bộ Nhớ:
Thuật tốn này khơng sử dụng bộ nhớ phụ đặc biệt và có độ phức tạp khơng gian
O(1), tức là khơng phụ thuộc vào kích thước của ma trận.
Ưu Điểm và Hạn Chế:
Ưu điểm: Thuật toán đơn giản và dễ hiểu, phù hợp cho các ma trận có kích thước
nhỏ đến trung bình.
Hạn chế: Độ phức tạp tăng nhanh khi kích thước ma trận lớn.
3.3. Thuật tốn Canon
Thuật tốn Canon MPI là một thuật toán song song được sử dụng trong tính
tốn phân tán để thực hiện các phép tính trên một cụm máy tính có nhiều nút xử
lý. Thuật toán này được thiết kế để phân chia một tác vụ lớn thành các phần nhỏ
hơn và thực hiện tính toán song song trên các phần này.
Thuật toán nhân ma trận Cannon:
1. Xác định tổng số nút xử lý trong cụm tính tốn (p).
2. Tạo một lưới sqrt(p) x sqrt(p) các nút xử lý (được sắp xếp thành các hàng và
cột).
3. Chia dữ liệu cần tính tốn thành sqrt(p) cột và sqrt(p) hàng.
4. Trong pha di chuyển dữ liệu:
a. Di chuyển dữ liệu từng hàng theo chiều ngang (gửi dữ liệu sang nút xử lý bên
phải) và nhận dữ liệu từ nút xử lý bên trên.

b. Lặp lại bước a sqrt(p) lần để đảm bảo dữ liệu cuối cùng được đưa đến vị trí
đúng.
5. Trong pha tính tốn:
a. Mỗi nút xử lý thực hiện phép tính trên phần dữ liệu của mình.
b. Phép tính có thể là tính tốn độc lập trên từng phần dữ liệu hoặc là một phép
tính phức tạp hơn yêu cầu tương tác giữa các nút xử lý.
6. Trong pha di chuyển kết quả:
a. Di chuyển dữ liệu từng hàng theo chiều ngang (gửi kết quả sang nút xử lý bên
18


trên) và nhận kết quả từ nút xử lý bên phải.
b. Lặp lại bước a sqrt(p) lần để đảm bảo kết quả cuối cùng được trả về nút xử lý
ban đầu.
7. Hồn thành thuật tốn và thu thập kết quả.

Hình 3.6. Hàm cài đặt Cannon

- Trong đó:
+ psa và psb là hai ma trận cần nhân
+ process: Số hiệu của tiến trình hiện tại
19


+ numprocs: Tổng số tiến trình trong communicator cartComm. Đây là số lượng
tiến trình mà thuật tốn Cannon sẽ chạy trên.
+ cartComm: Communicator 2D Cartesian mà các tiến trình sẽ tham gia. Trong
ngữ cảnh này, nó được tạo ra để định vị các tiến trình trên một lưới 2D.
+ left_neigh, right_neigh, up_neigh, down_neigh: Số hiệu của hàng xóm trái,
hàng xóm phải, hàng xóm trên, và hàng xóm dưới của tiến trình hiện tại trong

lưới 2D Cartesian. Các giá trị này được xác định bằng MPI_Cart_shift và được
sử dụng để gửi và nhận dữ liệu giữa các hàng xóm trong quá trình thực hiện
thuật tốn Cannon.
Bằng cách này, hàm cannonAlgorithm có thể thực hiện thuật tốn Cannon dựa
trên các thơng tin về vị trí và hàng xóm của tiến trình trong lưới 2D Cartesian.

Hình 3.7. Hàm khởi tạo ma trận

Hình 3.8. Khởi tạo 2D Cartesian

- Để thuận tiện trong việc tổ chức và phân phối dữ liệu ở thuật toán Cannon,
yêu cầu số lượng tiến trình là một số bình phương hoàn hảo: VD: 4, 9,…
20



×