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

ĐÁNH GIÁ HIỆU NĂNG BÀI TOÁN GIẢI PHƯƠNG TRÌNH TUYẾN TÍNH 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 (421.64 KB, 22 trang )

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

BÁO CÁO BÀI TẬP LỚN
THUỘC HỌC PHẦN TÍNH TỐN HIỆU NĂNG CAO
ĐỀ TÀI: ĐÁNH GIÁ HIỆU NĂNG BÀI TOÁN GIẢI PHƯƠNG TRÌNH
TUYẾN TÍNH SỬ DỤNG MPI
Giáo viên hướng dẫn

:

Ts. Hà Mạnh Đào

Nhóm

:

20

Tên thành viên

:

Phạm Mạnh Cường- 2020605601
Nguyễn Việt Hưng- 2020606349
Phạm Cao Lương- 2020605264

Lớp: 20231IT6069001

Hà Nội - 2023




LỜI MỞ ĐẦU
Hiện nay, sự phát triển của khoa học máy tính là một trong những lĩnh vực
được phát triển hàng đầu với việc triển khai rộng rãi các ứng dụng cho các ngành
nghề, tổ chức và xã hội. Cùng với đó là nhu cầu tính tốn trong lĩnh vực khoa học
công nghệ ngày càng được đề cao bởi vậy nó cũng trở thành một thách thức lớn
khi phương pháp xử lý tuần tự không thể giải quyết được bài tốn khó này. Trong
thời điểm ấy, nghiên cứu trong lĩnh vực tính tốn hiệu năng cao ra đời (High
Performance Computing) hình thành và trở nên rất cần thiết.
Để tiếp nối giải quyết các vấn đề về tính tốn, nhóm em lựa chọn đề tài “đánh
giá hiệu năng cao bài toán giải phương trình tuyến tính sử dụng MPI” mà nhóm
chúng em đã nghiên cứu và xây dựng trong bài tập sau đây sẽ là phần nào giúp cho
các bài toán sử dụng tuyến tính với MPI trở nên dễ dàng hơn.
Trong thời gian hồn thành cơng việc có thể sẽ có những thiếu sót mà chúng
em chưa thể hồn thành một cách trọn vẹn. Kính mong quý thầy cùng các bạn nhận
xét, đóng góp ý kiến cho chúng em. Chúng em xin chân thành cảm ơn.


MỤC LỤC
LỜI MỞ ĐẦU..................................................................................................................................2
Phần I: PHẦN MỞ ĐẦU...............................................................................................................5
1.1

Tên đề tài..........................................................................................................................5

1.2 Giới thiệu đề tài....................................................................................................................5
1.3 Kiến thức cần có...................................................................................................................5
1.4 Các kỹ năng đã có để thực hiện đề tài nghiên cứu............................................................5
1.5 Phương trình tuyến tính......................................................................................................6

1.5.1 Định nghĩa.....................................................................................................................6
1.5.2 Nghiệm số......................................................................................................................6
1.5.3 Trường hợp đặc biệt.....................................................................................................6
1.6 MPI trong tính tốn hiệu năng...........................................................................................6
1.6.1 Định nghĩa.....................................................................................................................6
1.6.2 Phương thức giao tiếp...................................................................................................7
1.6.3 Mơ hình lập trình..........................................................................................................7
1.6.4 Cấu trúc chương trình MPI.........................................................................................9
1.6.5 Hạn chế..........................................................................................................................9
1.7 Visual studio 2019..............................................................................................................10
1.7.1 định nghĩa....................................................................................................................10
1.7.2 Tính năng.....................................................................................................................11
1.8 Chức năng mơn học...........................................................................................................13
1.8.1 Hồn cảnh ra đời........................................................................................................13
1.8.2 Định nghĩa...................................................................................................................14
1.8.3 Các thách thức............................................................................................................14
Phần II: KẾT QUẢ NGHIÊN CỨU..........................................................................................15
1

2

3

Tìm hiểu về thuật toán tuần tự và thuật toán song song...............................................15
1.1

Khái niệm...................................................................................................................15

1.2


Sự khác nhau cơ bản giữa thuật toán song song và thuật tốn tuần tự...............15

Cài đặt chương trình........................................................................................................16
2.1

Thuật tốn tuần tự....................................................................................................16

2.2

Thuật tốn song song................................................................................................17

Kết quả cài đặt chương trình...........................................................................................19
3.1

Kết quả thuật toán.....................................................................................................19

3.2

Thời gian chạy thuật toán tuần tự...........................................................................19


3.3

Thời gian chạy thuật toán song song.......................................................................19

3.4

So sánh hiệu năng......................................................................................................20

Phần III: KẾT LUẬN VÀ BÀI HỌC KINH NGHIỆM...........................................................20

3.1 Nội dung đã thực hiện.......................................................................................................20
3.2 Hướng phát triển...............................................................................................................21
3.2

Bài học kinh nghiệm.....................................................................................................21

TÀI LIỆU THAM KHẢO...........................................................................................................21


Phần I: PHẦN MỞ ĐẦU
1.1 Tên đề tài
Tên đề tài: Đánh giá hiệu năng bài tốn giải phương trình tuyến tính sử dụng
MPI
1.2 Giới thiệu đề tài
Từ những kiến thức đã được dạy bởi thầy và đề tài được thầy giao cho.
Nhóm em đã tìm hiểu và nghiên cứu về bài tốn giải phương trình tuyến tính và
việc sử dụng MPI để đánh giá hiệu năng của thuật toán. Bằng việc áp dụng các
kiến thức về MPI đã học được trên lớp cũng như tài liệu tìm được ở trên mạng. Để
hồn thiện sản phẩm mỗi thành viên trong nhóm cần có kiến thức, sự hiểu biết về
bài tốn giải trình tuyến tính và thư viện MPI. Bài báo cáo này là thành quả của tất
cả ba thành viên trong nhóm em sau khi tìm hiểu và nghiên cứu về việc đánh giá
hiệu năng bài tốn giải phương trình tuyến tính khi sử dụng MPI.
1.3 Kiến thức cần có
 Kiến thức về bài tốn giải phương trình tuyến tính
 Kiến thức về MPI
 Lập trình chương trình bằng ứng dụng Visual Studio 2019
1.4 Các kỹ năng đã có để thực hiện đề tài nghiên cứu
 Kỹ năng tổng hợp kiến thức: tổng hợp các kiến thức đã học được từ trên lớp
cũng như trên mạng để hoàn thiện bài tập lớn.
 Khả năng đọc hiểu các tài liệu bằng tiếng Anh


1.5 Phương trình tuyến tính
1.5.1 Định nghĩa
- Phương trình tuyến tính (hay cịn gọi là phương trình bậc một hay phương
trình bậc nhất) là một phương trình đại số có dạng:


 b là một hằng số (hay hệ số bậc 0).
 a là hệ số bậc một.
- Phương trình bậc một được gọi là phương trình tuyến tính vì đồ thị của
phương trình này (xem hình bên) là đường thẳng.
1.5.2 Nghiệm số
Nghiệm số của phương trình là :

1.5.3 Trường hợp đặc biệt
- Phương trình này khơng có nghiệm khi b khác khơng, và có vơ số nghiệm
(mọi số x) khi b bằng 0. Trên thực tế, khi a bằng 0, phương trình trên đã khơng
cịn là phương trình bậc nhất nữa; nó đã trở thành phương trình bậc 0. Khi a khác
0, phương trình ln có một nghiệm duy nhất.
1.6 MPI trong tính tốn hiệu năng
1.6.1 Định nghĩa
- MPI (Message Passing Interface) là một giao diện lập trình (API) được
phát triển từ khá lâu. MPI cung cấp một thư viện căn bản nhất cho việc tổ chức
một chương trình song song theo kiểu đa tiến trình. Chúng bao gồm các câu lệnh
để khởi tạo môi trường MPI, phân chia các xử lý vào các đoạn mã song song, mỗi
phần chạy trên một tiến trình; các câu lệnh để trao đổi dữ liệu giữa các tiến trình;
các câu lệnh đồng bộ hóa các tiến trình...
- Mơ hình xử lý thường được dùng là một tiến trình chính (master) và nhiều
tiến trình phụ (slave). Thơng thường, tiến trình chính tại máy (hoặc CPU) nguyên
thủy ban đầu, làm nhiệm vụ khởi tạo chương trình, phân chia cơng việc và nhận

kết quả tính tốn từ các tiến trình phụ. Các tiến trình phụ chạy ở các máy (hoặc


CPU) phụ, mỗi tiến trình nhận dữ liệu ban đầu tiến trình chính, thực hiện việc tính
tốn được giao và gửi kết quả về tiến trình chính.
- Hiện nay MPI là một chuẩn công nghiêp, 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.
- Với kiến trúc bộ nhớ chia sẻ, thực thi MPI thường không sử dụng giao tiếp
các tác vụ qua mạng mà thay vào đó chúng sử dụng bộ nhớ chia sẻ (bản sao bộ
nhớ) vì các lý do hiệu năng
- 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.
1.6.2 Phương thức giao tiếp
MPI cung cấp ba phương thức giao tiếp khác nhau mà các quy trình MPI có
thể sử dụng để giao tiếp với nhau:
1. Truyền thơng điểm điểm(Point-to-Point)
2. Truyền thông cộng tác(Collective)
3. Truyền thông một chiều(One-sided)
1.6.3 Mơ hình lập trình
- Ban đầu MPI được thiết kế cho các kiến trúc bộ nhớ phân tán, kiến trúc rất
phổ biến thời kỳ 1980 đến đầu năm 1990.


- Xu hướng công nghệ thay đổi, bộ nhớ chia sẻ kết hợp với mạng máy tính
tạo ra dạng lai của hai hệ thống bộ nhớ chia sẻ và bộ nhớ phân tán.
- Thực thi MPI tương thích với cả hai kiểu kiến trúc trên và cũng tương thích
với các kiểu kết nối và giao thức khác nhau.

- Ngày nay MPI có thể chạy trên hầu hết các nền tảng phần cứng:
 Bộ nhớ chia sẻ

 Bộ nhớ phân tán
 Dạng lai 2 loại trên


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

1.6.5 Hạn chế
- Tuy có khả năng cung cấp hiệu năng cao và có thể chạy trên cả các kiến trúc
sử dụng bộ nhớ chia sẻ lẫn phân tán, nhưng các chương trình MPI địi hỏi người
lập trình phải tự phân chia chương trình thành các khối cho tiến trình chính và
phụ bằng các câu lệnh 2 tường minh. Các công việc khác như gửi và nhận dữ liệu,
đồng bộ hóa tiến trình… cũng cần được chỉ rõ bằng các câu lệnh và tham số cụ
thể. Điều này gây khó khăn và địi hỏi nhiều cơng sức đối với người lập trình, thể
hiện qua ba khía cạnh lớn. Thứ nhất là MPI địi hỏi phải tổ chức ngay từ đầu


chương trình thành theo cấu trúc song song trên mơ hình master-slave, một việc
phức tạp hơn nhiều so với việc tổ chức chương trình tuần tự vốn quen thuộc với
tư duy của đa số lập trình viên.
- Thứ hai là nếu MPI được sử dụng để song song hoá các chương trình tuần tự
thì vì nó phá vỡ nghiêm trọng cấu trúc ban đầu của chương trình. Điều khó khăn
thứ ba gây nên bởi sự rắc rối của các câu lệnh MPI, với một loạt các tham số khá
khó hiểu cho mỗi câu lệnh. Do ba khó khăn vừa nêu, tuy có hiệu năng cao và đã
cung cấp một cách thức lập trình trừu tượng hóa nhưng MPI vẫn được xem là
assembler của việc lập trình song song.

1.7 Visual studio 2019
1.7.1 định nghĩa
- Microsoft Visual Studio là một môi trường phát triển tích hợp (IDE)
từ Microsoft. Microsoft Visual Studio cịn được gọi là "Trình soạn thảo mã nhiều

người sử dụng nhất thế giới ", được dùng để lập trình C++ và C# là chính. Nó
được sử dụng để phát triển chương trình máy tính cho Microsoft Windows, cũng
như các trang web, các ứng dụng web và các dịch vụ web. Visual Studio sử dụng
nền tảng phát triển phần mềm của Microsoft như Windows API, Windows
Forms, Windows Presentation Foundation, Windows Store và Microsoft
Silverlight. Nó có thể sản xuất cả hai ngơn ngữ máy và mã số quản lý.
- Visual Studio bao gồm một trình soạn thảo mã hỗ trợ IntelliSense cũng
như cải tiến mã nguồn. Trình gỡ lỗi tích hợp hoạt động cả về trình gỡ lỗi mức độ
mã nguồn và gỡ lỗi mức độ máy. Cơng cụ tích hợp khác bao gồm một mẫu thiết
kế các hình thức xây dựng giao diện ứng dụng, thiết kế web, thiết kế lớp và thiết
kế giản đồ cơ sở dữ liệu. Nó chấp nhận các plug-in nâng cao các chức năng ở hầu


hết các cấp bao gồm thêm hỗ trợ cho các hệ thống quản lý phiên
bản (như Subversion) và bổ sung thêm bộ công cụ mới như biên tập và thiết kế
trực quan cho các miền ngôn ngữ cụ thể hoặc bộ cơng cụ dành cho các khía cạnh
khác trong quy trình phát triển phần mềm.
- Visual Studio hỗ trợ nhiều ngơn ngữ lập trình khác nhau và cho phép trình
biên tập mã và gỡ lỗi để hỗ trợ (mức độ khác nhau) hầu như mọi ngơn ngữ lập
trình. Các ngơn ngữ tích hợp gồm có C,[4] C++ và C++/CLI (thơng qua Visual
C++), VB.NET (thông qua Visual Basic.NET), C# (thông qua Visual C#)
và F# (như của Visual Studio 2010[5]). Hỗ trợ cho các ngôn ngữ khác như J+
+/J#, Python và Ruby thơng qua dịch vụ cài đặt riêng rẽ. Nó cũng hỗ
trợ XML/XSLT, HTML/XHTML, JavaScript và CSS.
1.7.2 Tính năng
1.7.2.1 Biên tập mã
- Giống như bất kỳ IDE khác, nó bao gồm một trình soạn thảo mã hỗ trợ tơ
sáng cú pháp và hồn thiện mã bằng cách sử dụng IntelliSense khơng chỉ cho
các biến, hàm và các phương pháp mà còn các cấu trúc ngơn ngữ như vịng điều
khiển hoặc truy vấn. IntelliSense được hỗ trợ kèm theo cho các ngôn ngữ

như XML, Cascading Style Sheets và JavaScript khi phát triển các trang web và
các ứng dụng web. Các đề xuất tự động hoàn chỉnh được xuất hiện trong một hộp
danh sách phủ lên trên đỉnh của trình biên tập mã. Trong Visual Studio 2008 trở
đi, nó có thể được tạm thời bán trong suốt để xem mã che khuất bởi nó. Các trình
biên tập mã được sử dụng cho tất cả các ngơn ngữ được hỗ trợ.
- Các trình biên tập mã Visual Studio cũng hỗ trợ cài đặt dấu trang trong mã để
điều hướng nhanh chóng. Hỗ trợ điều hướng khác bao gồm thu hẹp các khối mã
lệnh và tìm kiếm gia tăng, ngồi việc tìm kiếm văn bản thơng thường và tìm


kiếm Biểu thức chính quy. Các trình biên tập mã cũng bao gồm một bìa kẹp đa
mục và một danh sách cơng việc. Các trình biên tập mã hỗ trợ lưu lại các đoạn mã
được lặp đi lặp lại nhằm để chèn vào mã nguồn sử dụng về sau. Một công cụ quản
lý cho đoạn mã được xây dựng là tốt. Những công cụ này nổi lên như các cửa sổ
trơi nổi có thể được thiết lập để tự động ẩn khi không sử dụng hoặc neo đậu đến
các cạnh của màn hình. Các trình biên tập mã Visual Studio cũng hỗ trợ cải tiến
mã nguồn bao gồm tham số sắp xếp lại, biến và phương pháp đổi tên, khai thác và
đóng gói giao diện các lớp thành viên bên trong những trạng thái giữa những thứ
khác.
- Visual Studio có tính năng biên dịch nền (cịn gọi là biên dịch gia tăng). Như
mã đang được viết, Visual Studio biên dịch nó trong nền để cung cấp thơng tin
phản hồi về cú pháp và biên dịch lỗi, được đánh dấu bằng một gạch dưới gợn
sóng màu đỏ. Biên dịch nền khơng tạo ra mã thực thi, vì nó địi hỏi một trình biên
dịch khác hơn là để sử dụng tạo ra mã thực thi. Biên dịch nền ban đầu được giới
thiệu với Microsoft Visual Basic nhưng bây giờ đã được mở rộng cho tất cả các
ngơn ngữ.
1.7.2.2 Trình gỡ lỗi
- Visual Studio có một trình gỡ lỗi hoạt động vừa là một trình gỡ lỗi cấp mã
nguồn và là một trình gỡ lỗi cấp máy. Nó hoạt động với cả hai mã quản lý cũng
như ngơn ngữ máy và có thể được sử dụng để gỡ lỗi các ứng dụng được viết bằng

các ngôn ngữ được hỗ trợ bởi Visual Studio. Ngồi ra, nó cũng có thể đính kèm
theo quy trình hoạt động và theo dõi và gỡ lỗi những quy trình. Nếu mã nguồn
cho q trình hoạt động có sẵn, nó sẽ hiển thị các mã như nó đang được chạy.
Nếu mã nguồn khơng có sẵn, nó có thể hiển thị các tháo gỡ. Các Visual Studio
debugger cũng có thể tạo bãi bộ nhớ cũng như tải chúng sau để gỡ lỗi. Các
chương trình đa luồng cao cấp cũng được hỗ trợ. Trình gỡ lỗi có thể được cấu


hình sẽ được đưa ra khi một ứng dụng đang chạy ngồi Visual Studio bị treo mơi
trường.
- Trình gỡ lỗi cho phép thiết lập các breakpoint (mà cho phép thực thi được
tạm thời dừng lại tại một vị trí nhất định) và watch (trong đó giám sát các giá trị
của biến là việc thực hiện tiến bộ). Breakpoint có thể có điều kiện, nghĩa là chúng
được kích hoạt khi điều kiện được đáp ứng. Mã có thể được biểu diễn, tức là chạy
một dòng (của mã nguồn) tại một thời điểm. Nó có hoặc là bước sang các chức
năng để gỡ lỗi bên trong nó, hoặc là nhảy qua nó, tức là, việc thực hiện các chức
năng khơng có sẵn để kiểm tra thủ cơng. Trình gỡ lỗi hỗ trợ Edit and Continue,
nghĩa là, nó cho phép mã được chỉnh sửa khi nó đang được sửa lỗi (chỉ có 32 bit,
không được hỗ trợ trong 64 bit). Khi gỡ lỗi, nếu con trỏ chuột di chuyển lên bất
kỳ biến, giá trị hiện tại của nó được hiển thị trong phần chú giải ("chú thích dữ
liệu"), nơi mà nó cũng có thể được thay đổi nếu muốn. Trong quá trình viết mã,
các trình gỡ lỗi của Visual Studio cho phép một số chức năng được gọi ra bằng
tay từ cửa sổ công cụ Immediate. Các thông số cho phương thức được cung cấp
tại các cửa sổ Immediate.
1.8 Chức năng môn học
1.8.1 Hồn cảnh ra đời
Các bài tốn phức tạp và địi hỏi sự tính tốn lớn ln được tìm thấy trong các
ngành khoa học như hóa học, vật lý hạt nhân, vũ trụ học, cơ lưu chất, sinh học, y
học... Một số bài tốn có độ phức tạp khá lớn nên được gọi là “các bài toán thách
đố” (Grand Challenge Problems). Các bài tốn thách đố này khơng thể giải được

trong một khoảng thời gian chấp nhận nếu sử dụng các loại máy tính hiện có ngày
nay. Vấn đề càng phức tạp khi bài tốn địi hỏi việc mơ phỏng và hiển thị mơ hình
đồ họa. Mặt khác u cầu về thời gian xử lý của bài toán cũng quan trọng khơng
kém. Ví dụ một bài tốn dự báo thời tiết được giải trong 2 ngày để có thể cho kết
quả dự báo thời tiết trong 1 ngày là khơng có ý nghĩa. Chính u cầu về tính tốn


phức tạp này đã thúc đẩy các máy tính song song có khả năng tính tốn mạnh ra
đời.
1.8.2 Định nghĩa
- Tính tốn hiệu năng cao (High Performance Computing - HPC) trên cơ sở các hệ
thống siêu máy tính là một trong những thành phần cốt lõi trong sự phát triển đó và
nó đã đánh dấu cho sự thay đổi trong bước chuyển hóa về nghiên cứu dựa trên
những cơng cụ tính tốn lớn. HPC được coi là một siêu máy tính tập hợp bởi nhiều
máy chủ với sự kết hợp về sức mạnh tính tốn giúp hiệu năng có sự vượt trội hơn
rất nhiều so với một chiếc máy tính truyền thống.
1.8.3 Các thách thức
- Sự đòi hỏi về sức mạnh tính tốn của máy tính khơng ngừng tăng lên nhằm để
giải quyết các bài toán trong lĩnh vực khoa học và công nghệ. Các vấn đề trong
nhiều lĩnh vực đa số đều đưa về mơ hình số và mơ phỏng. Tùy theo độ lớn của bài
toán cần giải quyết hay độ chính xác của kết quả bài tốn mà khối lượng tính tốn
sẽ lớn đến mức nào. Ví dụ trong bài toán dự báo thời tiết bằng phương pháp số, để
có kết quả dự báo chính xác thì ta phải giải bài tốn trên một khơng gian rộng hơn
và như thế số lượng phép tính cũng nhiều hơn.
- Yêu cầu về thời gian tính tốn cũng là một yếu tố cần sức mạnh tính tốn của
máy tính. Điều này rất thường thấy trong các qui trình sản xuất trong cơng nghiệp.
Trong một qui trình sản xuất sự phối hợp hoạt động của các bộ phận rất quan
trọng. Vì vậy việc tính tốn chậm tại một bộ phận sẽ làm ảnh hưởng các bộ phận
khác. Bài toán dự báo thời tiết trong lĩnh vực khoa học cũng đòi hỏi về thời gian
tính tốn. Để có kết quả dự báo chính xác, ta khơng thể chạy chương trình trong

hai ngày chỉ để dự báo thời tiết cho ngày hôm sau.
- Trong thực tế cịn nhiều bài tốn có độ phức tạp rất lớn mà sức mạnh siêu máy
tính hiện tại cũng chưa giải quyết được. Vì vậy người ta gọi đây là các thách đố.


Hiện nay có rất nhiều lĩnh vực khoa học cần khoa học tính tốn như hóa học, vật lý
hạt nhân, vũ trụ học, cơ lưu chất, sinh học, y học... Khoa học tính tốn giúp giải
quyết nhiều vấn đề trên mơ hình tốn để tiên đốn trước kết quả thử nghiệm và như
vậy giúp rút ngắn quá trình thử nghiệm. Nhiều bài tốn cần giải quyết trên mơi
trường tính tốn lưới như trong càng cho thấy sự cần thiết của sức mạnh tính tốn
trong các lĩnh vực khoa học và cơng nghệ.

Phần II: KẾT QUẢ NGHIÊN CỨU
1

Tìm hiểu về thuật toán tuần tự và thuật toán song song

1.1 Khái niệm
-Thuật toán tuần tự là thuật toán được thực hiện tuần tự - một lần, từ đầu đến
cuối, khơng có q trình xử lý khác thực hiện - trái ngược với đồng thời hoặc song
song.
-Thuật toán song song là thuật toán có thể thực hiện đồng thời nhiều lệnh
trên các thiết bị xử lý khác nhau, sau đó kết hợp tất cả các đầu ra riêng lẻ để tạo ra
kết quả cuối cùng
1.2 Sự khác nhau cơ bản giữa thuật toán song song và thuật toán tuần tự
Thuật toán tuần tự

Thuật toán song song

-Mỗi thời điểm chỉ thực hiện được một

phép tốn

-Mỗi thời điểm có thể thực hiện được
nhiều phép tốn

-Thời gian thực hiện phép toán chậm

-Thời gian thực hiện phép toán nhanh


2
Cài đặt chương trình
2.1 Thuật tốn tuần tự
#include
#include
#include
#include

<stdio.h>
<time.h>
<stdlib.h>
<mpi.h>

int main(int argc, char** argv) {
double tstart, tend, time; // khai báo các biế"
n tstart,
tend, mytime kiế$
u số"thực
MPI_Init(&argc, &argv);
//khở

$ i tạo mối trường mpi
// Nhập số"lượng phưởng trình bậc 1
int n = 10000;
// Nhập giá trị a, b cho các phưởng trình bậc 1
double* a = (double*)malloc(n * sizeof(double));
double* b = (double*)malloc(n * sizeof(double));
printf("Nhap gia tri a, b cho cac phuong trinh bac 1: ");
for (int i = 0; i < n; i++) {
a[i] = rand()%(1000 - 100 + 1)+ 100;
b[i] = rand() % (1000 - 100 + 1) + 100;
}
// Lấ"
y thời gian hiện tại
tstart = MPI_Wtime();
// Tính giá trị x cu
$a các phưởng trình bậc 1
double* x = (double*)malloc(n * sizeof(double));
for (int i = 0; i < n; i++) {
x[i] = -b[i] / a[i];
}
// Lấ"
y thời gian hiện tại
tend = MPI_Wtime();
time = tend - tstart;
// In kế"
t qua
$
printf("Ket qua:\n");



for (int i = 0; i < n; i++) {
printf("x[%d] = %lf\n", i, x[i]);
}
// In ra thời gian chạy cu
$a thuật toán tuấL
n tự
printf("Thoi gian chay cua thuat toan tuan tu la: %lf\n",
time);
return 0;
}

2.2 Thuật toán song song
#include <stdio.h>
#include <mpi.h>
#include <stdlib.h>
#define n 10000
int main(int argc, char** argv) {
float** coeffs;
// Khở
$ i tạo MPI
MPI_Init(NULL, NULL);
// Lấ"
y rank và size cu
$a mốO
i quá trình
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Số"lượng phưởng trình mốO

i quá trình sẽ gia
$i
int num_eqns_per_process = n / world_size;
double tstart, tend, time;
// Ma
$ng chứa các hệ số"cu
$a phưởng trình
/*Cấ"
p phát bộ nhớ động cho 1 ma
$ng mẹ gốL
m
num_eqns_per_process phấL
n tư$
,
đế$chứa địa chỉ
$ tưởng ứng cu
$a y hàng trong ma
$ng 2 chiếL
u cấL
n
tạo*/
/*Gán địa chỉ
$ ma
$ng mẹ vào con tro
$ coeffs*/
coeffs = (float**)malloc(sizeof(int*) *
num_eqns_per_process);
/*Cấ"
p phát bộ nhớ động cho num_eqns_per_process ma
$ng con,

mốO
i ma
$ng gốL
m 2 phấL
n tư$
,


đế$chứa 3 phấL
n tư$tưởng ứng trong từng hàng cu
$a ma
$ng 2 chiếL
u
cấL
n tạo*/
/*Gán địa chỉ
$ cu
$a các ma
$ng này vào phấL
n tư$cu
$a ma
$ng mẹ*/
for (int i = 0; i < num_eqns_per_process; i++) {
coeffs[i] = (float*)malloc(sizeof(int) * 2);
}
// Nế"
u quá trình là quá trình 0, nhập các hệ số"cu
$a tấ"
t ca
$

các phưởng trình
if (world_rank == 0) {
for (int i = 0; i < n; i++) {
coeffs[i][0] = rand() % (1000 - 1 + 1) + 1;
coeffs[i][1] = rand() % (1000 - 1 + 1) + 1;
}
}
tstart = MPI_Wtime();
// Gư$
i các hệ số"cho các quá trình khác
for (int i = 1; i < world_size; i++) {
MPI_Send(&coeffs[i * num_eqns_per_process][0],
num_eqns_per_process * 2, MPI_FLOAT, i, 0, MPI_COMM_WORLD);
}
// Nhận các hệ số"từ quá trình 0
if (world_rank != 0) {
MPI_Recv(coeffs, num_eqns_per_process * 2, MPI_FLOAT, 0,
0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
// Gia
$i các phưởng trình có trong ma
$ng coeffs
float x;
for (int i = 0; i < num_eqns_per_process; i++) {
float a = coeffs[i][0];
float b = coeffs[i][1];
if (a == 0) {
if (b == 0) {
printf("Phưởng trình %d có vố số"nghiệm.\n", i);
}

else {
printf("Phưởng trình %d vố nghiệm.\n", i);
}
}
else {
x = -b / a;
}


}
tend = MPI_Wtime();
time = tend - tstart;
for (int i = 0; i < n; i++) {
printf("Nghiệm cu
$a phưởng trình %d là: %f\n", i, x);
}
printf("time taken: %lf", time);
// Kế"
t thúc MPI
MPI_Finalize();
return 0;
}

3

Kết quả cài đặt chương trình

3.1 Kết quả thuật tốn

3.2 Thời gian chạy thuật toán tuần tự


3.3

Thời gian chạy thuật toán song song


3.4

So sánh hiệu năng
n
10000
100000
1000000

Tseq
0.000079
0.000414
0.003981

Tp
0.000038
0.000137
0.001176

Tseq /Tp
2.0789
3.0219
3.3852

Tseq /Tp(%)

207.89%
302.19%
338.52%

Từ bảng so sánh có thể thấy việc giải quyết bài toán bằng phương pháp song
song cho tốc độ xử lí cao hơn phương pháp tuần tự và với số liệu càng lớn thì sự
khác biệt càng rõ rệt hơn. Từ đó có thể thấy việc ứng dụng thuật toán song song để
giải quyết các bài toán phức tạp là rất quan trọng đặc biệt là trong nghiên cứu khoa
học, thường xuyên phải xử lý các bài toán với độ phức tạp và số liệu rất lớn. Một
thuật tốn tuần tự khơng thể đáp ứng để có thể giải quyết các bài tốn đó chính vì
thế những phương pháp song song là rất cần thiết.
 Cấu hình máy tính

Phần III: KẾT LUẬN VÀ BÀI HỌC KINH NGHIỆM
3.1 Nội dung đã thực hiện



×