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

ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN TÍNH TÍCH MA TRẬN FOX SỬ DỤNG OPENMP

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 (832.4 KB, 25 trang )

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

BÁO CÁO THỰC NGHIỆM
Mơn học: TÍNH TỐN HIỆU NĂNG CAO

ĐÁNH GIÁ HIỆU NĂNG THUẬT TỐN
TÍNH TÍCH MA TRẬN FOX SỬ DỤNG
OPENMP
GVHD:
Nhóm - Lớp:
Thành viên:

TS. HÀ MẠNH ĐÀO
19 - 20231IT6069001
Đặng Hồng Phương
Nguyễn Thị Hoàng Mai
Nguyễn Thị Linh

Hà Nội, Năm 2023


LỜI MỞ ĐẦU
Ngày nay với sự phát triển từng ngày của công nghệ, truyền thông, các
ngành công nghệ thông tin nói chung và các ngành nghề khác nói riêng đều
cần thiết sử dụng các công nghệ cao, nhanh, dễ dàng sử dụng. Do vậy, sinh
viên trường Đại học Công nghiệp Hà Nội cần phải học hỏi và biết cách áp
dụng những kiến thức đó vào trong cơng việc, đời sống.
Đặc biệt là với mơn Tính tốn hiệu năng cao, có rất nhiều bài tốn, số
liệu có độ phức tạp lớn và khối lượng dữ liệu khổng lồ. Một thuật toán tuần tự


thông thường sẽ mất rất nhiều thời gian để có thể giải quyết được hoặc có thể
khơng thể giải được. Vậy nên việc học tập và áp dụng các phương pháp tính
tốn song song là rất cần thiết. Ở bài báo cáo này chúng em muốn đánh giá
hiệu năng thuật tốn tính tích ma trận Fox sử dụng OpenMP. Trong bài báo
cáo chúng em chia làm 3 chương chính:
• Chương 1: Kiến thức cơ sở
PAGE

• Chương 2: Mơ tả chi tiết bài tốn
• Chương 3: Thực nghiệm
Mặc dù có nhiều cố gắng bằng những kiến thức đã được học để hồn
thành cơng việc, song vẫn cịn nhiều thiếu sót cần được bổ sung. Vì vậy
chúng em rất mong nhận được những ý kiến đóng góp của thầy cơ để bài báo
cáo của nhóm em có thể hồn thiện hơn.
Nhóm em xin chân thành cảm ơn!

1


MỤC LỤC
LỜI MỞ ĐẦU.......................................................................................................1
MỤC LỤC ............................................................................................................2
Chương 1: Kiến thức cơ sở....................................................................................4
1.1 Giới thiệu về tính tốn hiệu năng cao.......................................................4
1.1.1 Tính tốn hiệu năng cao là gì?...........................................................4
1.1.2 Cách hoạt động của tính tốn hiệu năng cao......................................4
1.1.3 Tính tốn song song là gì?..................................................................5
1.1.4 Mơ hình tính tốn song song..............................................................8
1.1.5 Giới thiệu Thư viện OpenMP...........................................................13
1.2 Giới thiệu thuật toán FOX......................................................................15

1.2.1 Định nghĩa........................................................................................15
1.2.2 Nguyên lý hoạt động........................................................................15
1.2.3 Phân tích độ phức tạp của thuật tốn................................................16
Chương 2: Mơ tả chi tiết bài tốn........................................................................17PAGE
2.1 Giới thiệu bài toán..................................................................................17
2.2 Thực hiện thuật toán Fox và so sánh với tính tốn tuần tự....................17
2.3 Đánh giá thuật tốn Fox theo lý thuyết..................................................19
2.4 Hướng dẫn cài đặt và thiết lập môi trường Visual Studio với OpenMP 19
Chương 3: Thực nghiệm......................................................................................23
3.1 Kết quả thực nghiệm thực tế..................................................................23
3.1.1 Bảng so sánh hiệu năng....................................................................23
KẾT LUẬN.........................................................................................................24
TÀI LIỆU THAM KHẢO...................................................................................25

2


Chương 1: Kiến thức cơ sở
1.1 Giới thiệu về tính tốn hiệu năng cao
1.1.1 Tính tốn hiệu năng cao là gì?
- Là việc sử dụng tổng hợp sức mạnh của máy tính để mang lại kết quả
cao hơn so với máy tính truyền thống hoặc các máy chủ trong việc xử lý các
bài tốn khó và phức tạp.
- Mơ hình hệ thống tính tốn hiệu năng cao là một hệ thống các máy
tính có kết nối với nhau qua mạng internet hoặc là 1 siêu máy tính được thiết
kế để giải quyết các bài toán lớn với tốc độ cao.
- Tính tốn hiệu năng cao thường được sử dụng trong một số vấn đề lớn
của thế giới về khoa học, kĩ thuật, tài chính, mơi trường …

PAGE


1.1.2 Cách hoạt động của tính tốn hiệu năng cao
- Một hệ thống tính toán hiệu năng cao hoạt động bằng cách các
nút(nodes) máy tính đơn lẻ hoạt động cùng nhau trong 1 cụm (nhóm) được
kết nối với nhau để thực hiện một lượng lớn tính tốn trong 1 thời gian ngắn.
- Các máy tính (nodes) được kết nối với nhau qua mạng Internet để trao
đổi dữ liệu.
Vì sao HPC quan trọng:
- Tính tốn hiệu năng cao (HPC) là một phần quan trọng trong hoạt
động nghiên cứu và đổi mới công nghiệp nhiều thập kỉ qua. HPC giúp các nhà
3


kỹ sư, khoa học dữ liệu, nhà thiết kế và các nhà nghiên cứu giải quyết các vấn
đề lớn, phức tạp trong thời gian ngắn hơn và chi phí thấp hơn so với điện tốn
truyền thống.
Các lợi ích to lớn của HPC:
● Giảm kiểm tra vật lý: HPC có thể được sử dụng để tạo mô phỏng, loại
bỏ nhu cầu kiểm tra vật lý. Ví dụ, khi thử nghiệm các vụ tai nạn ô tô,
việc tạo mô phỏng sẽ dễ dàng và ít tốn kém hơn nhiều so với thực hiện
thử nghiệm va chạm.
● Tốc độ: Với các CPU, bộ xử lý đồ họa (GPU) mới nhất và kết cấu
mạng có độ trễ thấp như truy cập bộ nhớ trực tiếp từ xa (RDMA), kết
hợp với các thiết bị lưu trữ khối và cục bộ tồn flash, HPC có thể thực
hiện các phép tính lớn trong vài phút thay vì tuần hoặc tháng.
● Chi phí: Câu trả lời nhanh hơn có nghĩa là ít lãng phí thời gian và tiền
bạc hơn. Ngoài ra, với HPC dựa trên đám mây, ngay cả các doanh
nghiệp nhỏ và công ty mới thành lập cũng có thể đủ khả năng để chạy PAGE
khối lượng cơng việc của HPC, chỉ trả tiền cho những gì họ sử dụng và
mở rộng quy mô khi cần.

● Cải tiến: HPC thúc đẩy đổi mới trong hầu hết mọi ngành—đó là động
lực đằng sau những khám phá khoa học đột phá giúp cải thiện chất
lượng cuộc sống cho mọi người trên khắp thế giới.
1.1.3 Tính tốn song song là gì?
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
PAGE

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 PAGE
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.

PAGE

1.1.4 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:
7


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ý.

PAGE

8


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 độ
PAGE

đề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

9



PAGE

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à:
- Nhiều bộ lọc tần số hoạt động trên một luồng tín hiệu
10


- Nhiều thuật tốn mã hóa cố gắng bẻ khóa một tin nhắn được mã
hóa.

PAGE

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
11



● 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.

PAGE

1.1.5 Giới thiệu Thư viện OpenMP
OpenMP viết tắt của Open specifications for Multi Processing
Là Application Programming Interface (API), đem lại mơ hình lập
trình linh động cho những nhà phát triển ứng dụng song song chia sẻ bộ nhớ.
❖ OpenMP được hợp thành bởi:
12


● Chỉ thị chương trình dịch (Compiler Directives)
● Thư viện hàm thời gian chạy (library runtime routines)
● Các biến môi trường (environment variables)
OpenMP không phải là một ngôn ngữ lập trình mới. Thực ra OpenMP
hoạt động trên sự liên kết chặt chẽ với ngơn ngữ lập trình làm cơ sở, Fortran,
C/C++
OpenMP tự động song song hóa chương trình:
VD: Người lập trình phải tự ý thức về tính song song của công việc.
OpenMP cung cấp cơ chế để chỉ định việc thực hiện song song
OpenMP là phương tiện lập trình cho hệ thống có bộ nhớ phân tán.
❖ Ưu điểm của OpenMP:
● Một chuẩn hồn chỉnh và được cơng nhận trên thực tế
● Hiệu suất và khả năng mở rộng tốt nếu chương trình được thiết kế đúng
● Tính khả chun cao: Khi chương trình viết ra có thể dịch bởi nhiều

chương trình dịch khác nhau.

PAGE

● Dễ sử dụng nhờ sự đơn giản và số lượng ít các chỉ thị.
● Cho phép song song hóa tăng dần chương trình tuần tự.
❖ Mơ hình song song OpenMP:
● OpenMP cung cấp mơ hình lập trình đa luồng cấp cao, xây dựng trên
thư viện lập trình đa luồng của hệ thống, vd, POSIX Threads
● Thực hiện theo mơ hình Fork-Join:
● Chương trình OpenMP bắt đầu việc thực hiện như một luồng chủ duy
nhất, master thread
● Luồng chủ thực hiện tuần tự cho đến vùng song song đầu tiên
● Luồng chủ tạo nhóm các luồng để chia sẻ thực hiện các công việc
song song: Song song đa luồng, song song khai báo, song song động.
❖ Mơ hình bộ nhớ OpenMP:
● Mọi luồng có quyền truy cập đến vùng nhớ chung toàn cục
● Dữ liệu hoặc là chia sẻ hoặc là riêng tư
13


● Việc truyền dữ liệu là trong suốt với người lập trình
● Cần thiết phải đồng bộ hóa nhưng hầu như được thực hiện ngầm
❖ Tính năng chính của OpenMP:
● Tạo nhóm các luồng cho thực hiện song song
● Chỉ rõ các cách chia sẻ công việc giữa các luồng thành viên nhóm
● Khai báo dữ liệu chia sẻ và riêng tư
● Đồng bộ các luồng và cho phép các luồng thực hiện công việc một
cách độc quyền
● Cung cấp hàm thời gian chạy

● Quản lý số lượng luồng
1.2 Giới thiệu thuật toán FOX
1.2.1 Định nghĩa
Thuật toán Fox là một thuật tốn phổ biến hiện nay để thực hiện tính
tốn nhân 2 ma trận và nhiều hơn nữa. Thuật toán hiệu quả khi sử dụng để
tính tốn song song nhân 2 ma trận.

PAGE

1.2.2 Nguyên lý hoạt động
● Các phần tử n của 2 ma trận A và B được phân vùng giữa các bộ xử lý
với tổng số bộ xử lý là p để mỗi bộ xử lý ban đầu lưu trữ

( √np ) * ( √np )

● Lúc này, thuật toán sẽ sử dụng 1 phần tử của ma trận A nhân với tất cả
các phần tử cùng hàng tại ma trận B. Sau đó dịch chuyển vịng trịn một
bước lên trên của các khối lệnh ma trận B dọc theo các cột của bộ xử
lý.
● Ban đầu chọn khối chéo Ai,i để phân vùng các bộ xử lý
1. Sau khi hoàn thành phần trên, ta lập lại thêm p lần:
2. Nhân Ai,i với tất cả các phần tử trong hàng của ma trận B
3. Nhân ma trận A vừa nhận được với ma trận B
4. Dịch khối B lên trên một bước

14


5. Sau đó chọn khối Ai,(j+1)mod√ p và nhân với các phần tử trong cùng 1
hàng

6. Quay lại bước 2
1.2.3 Phân tích độ phức tạp của thuật tốn
Độ phức tạp tính tốn của phép nhân ma trận cho biết thao tác nhân ma
trận có thể được thực hiện nhanh như thế nào. Các thuật toán nhân ma trận là
một chương trình con trung tâm trong các thuật tốn lý thuyết và số cho đại số
tuyến tính số và tối ưu hóa, do đó việc tìm ra khoảng thời gian phù hợp cần
thiết có ý nghĩa thực tế lớn.
Áp dụng trực tiếp định nghĩa toán học của phép nhân ma trận đưa ra một
thuật toán yêu cầu n 3 thao tác trường để nhân hai ma trận n × n trên trường
đó ( O(n3) trong ký hiệu O lớn ). Đây là với thuật toán tuần tự. Khi sử dụng
thuật toán song song cụ thể là sử dụng thuật toán song song Fox ta có độ phức
tạp: O(n2s) trong đó s là số bước thực hiện thuật tốn. Ví dụ với phép tính 2
ma trận 4x4 ta có: n = 4 và s =4. Từ đó ta có độ phức tạp O(424) = O(64)

PAGE

15


Chương 2: Mơ tả chi tiết bài tốn
2.1Giới thiệu bài tốn
Cho ma trận A = (aij)mxn

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 * B có kích thước m x p có phần tử đứng ở hàng thứ i, cột
thứ j xác định bởi:
Cij = ai1b1j + ai2b2j + … + ainbnj
Với i = 1 … m, j = 1 … p
Từ kiến thức trên ta áp dụng để tính ma trận theo tuần tự và theo thuật
toán Fox song song.


2.2

PAGE

Thực hiện thuật tốn Fox và so sánh với tính tốn tuần tự

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <omp.h>

16


void

matrix_multiply_fox_interative(const

std::vector<double>&

A,

const

A,

const


std::vector<double>& B, std::vector<double>& C, int n, int block_size) {
for (int bi = 0; bi < n; bi += block_size) {
for (int bj = 0; bj < n; bj += block_size) {
for (int bk = 0; bk < n; bk += block_size) {
for (int i = bi; i < std::min(bi + block_size, n); ++i) {
for (int j = bj; j < std::min(bj + block_size, n); ++j) {
for (int k = bk; k < std::min(bk + block_size, n); ++k) {
C[i * n + j] += A[i * n + k] * B[k * n + j];
}
}
}
}
}
}
}
void

matrix_multiply_fox_parallel(const

std::vector<double>&

std::vector<double>& B, std::vector<double>& C, int n, int block_size) {
#pragma omp parallel for collapse(2) shared(A, B, C)
for (int bi = 0; bi < n; bi += block_size) {

PAGE

for (int bj = 0; bj < n; bj += block_size) {
for (int bk = 0; bk < n; bk += block_size) {
for (int i = bi; i < std::min(bi + block_size, n); ++i) {

for (int j = bj; j < std::min(bj + block_size, n); ++j) {
for (int k = bk; k < std::min(bk + block_size, n); ++k) {
C[i * n + j] += A[i * n + k] * B[k * n + j];
}
}
}
}
}
}
}
int main() {
const int n = 1000; // Kích thước ma trận
const int block_size = 50; // Kích thước khối
std::vector<double> A(n * n), B(n * n), C_serial(n * n, 0.0), C_parallel(n * n, 0.0);
// Khởi tạo ma trận A, B với các giá trị ngẫu nhiên
srand(time(nullptr));
for (int i = 0; i < n * n; ++i) {
A[i] = rand() % 100;
B[i] = rand() % 100;

17


}
// Tính thời gian thực thi cho phép tính tuần tự
double start_time = omp_get_wtime();
matrix_multiply_fox_interative(A, B, C_serial, n, block_size);
double interative_time = omp_get_wtime() - start_time;
// Tính thời gian thực thi cho phép tính song song
start_time = omp_get_wtime();

matrix_multiply_fox_parallel(A, B, C_parallel, n, block_size);
double parallel_time = omp_get_wtime() - start_time;
// In kết quả và thời gian thực thi
std::cout << "Matrix size: " << n << " x " << n << std::endl;
std::cout << "Interative algorithm time: " << interative_time << " seconds" <<
std::endl;
std::cout << "Parallel algorithm time: " << parallel_time << " seconds" << std::endl;
std::cout << "Fox algorithm faster " << interative_time / parallel_time << " times than
interative algorithm";
return 0;
}

2.3 Đánh giá thuật toán Fox theo lý thuyết
Áp dụng trực tiếp định nghĩa toán học của phép nhân ma trận đưa ra
một thuật toán yêu cầu n 3 thao tác trường để nhân hai ma trận n × n trên PAGE
trường đó ( O(n3) trong ký hiệu O lớn ). Đây là với thuật toán tuần tự. Khi sử
dụng thuật toán song song cụ thể là sử dụng thuật tốn song song Fox ta có độ
phức tạp: O(n2s) trong đó s là số bước thực hiện thuật tốn. Ví dụ với phép
tính 2 ma trận 4x4 ta có: n = 4 và s =4. Từ đó ta có độ phức tạp O(4 24) =
O(64).
2.4Hướng dẫn cài đặt và thiết lập môi trường Visual Studio với OpenMP
1. Cài đặt VS (bản Community) – Nếu máy chưa cài.
2. Tạo dự án VC++. NET

18


PAGE

3. Mở hộp thoại trang thuộc tính của dự án (Kích chuột phải vào tên dự

án/chọn Properties).

19



×