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

ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN FFT (FAST FOURIER TRANSFORM) 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 (1 MB, 33 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

Học Phần: TÍNH TỐN HIỆU NĂNG CAO (HPC)
ĐỀ TÀI: ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN FFT (FAST

FOURIER TRANSFORM) SỬ DỤNG OPENMP
Giảng viên hướng dẫn
Lớp
Nhóm thực hiện

: TS Hà Mạnh Đào
:
: Nhóm 2

1.

Đỗ Xuân Hải - 2021602604

2.

Đặng Quốc Diệu - 2020600571

3.

Phan Anh Thắng - 2020601204




DANH MỤC
DANH MỤC.............................................................................................................3
DANH MỤC HÌNH ẢNH.......................................................................................5
LỜI MỞ ĐẦU..........................................................................................................6
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI..............................................................7
1.1 Tổng quan về tính tốn hiệu năng cao..........................................................7
1.1.1 Khái niệm.................................................................................................7
1.1.2 HPC hoạt động như thế nào......................................................................7
1.2 Tổng quan về OpenMP.................................................................................8
1.2.1 Khái niệm.................................................................................................8
1.2.2 Lịch sử của OpenMP................................................................................9
1.2.3 Mục đích và ứng dụng của OpenMP.....................................................9
1.3 Tổng quan về tính tốn song song..............................................................10
1.3.1 Khái niệm...............................................................................................10
1.3.2 Các nguồn tài ngun tính tốn có thể bao gồm:...................................10
1.3.3 Các vấn đề tính tốn...............................................................................11
1.3.4 Các mơ hình lập trình song song............................................................11
1.4 Tổng quan về thuật toán Fast Fourier Transform.......................................11
CHƯƠNG 2: GIẢI PHÁP GIẢI QUYẾT BÀI TỐN......................................13
2.1 Phát biểu đầy đủ bài tốn (DIỆU).................................................................13
2.1.1 Biến đổi Fourier rời rạc..........................................................................13
2.1.2 Ứng dụng của DFT: nhân nhanh đa thức...............................................14
2.1.3 Biến đổi Fourier nhanh...........................................................................15
2.1.4 FFT nghịch đảo.......................................................................................16
2.2 Gỉai pháp đối với bài toán (THẮNG)............................................................18
2.2.1 Thiết kế thuật toán tuần tự......................................................................18
2.2.2 Thiết kế thuật toán song song.................................................................22



2.4 Tính tốn theo lý thuyết về hiệu năng, hiệu suất.......................................25
2.4.1 Hiệu năng................................................................................................25
2.4.2 Hiệu suất.................................................................................................25
CHƯƠNG 3: THỰC NGHIỆM...........................................................................27
3.1 Tiến hành các thực nghiệm(THẮNG)...........................................................27
3.2 So sánh Kết quả thực tế với tính tốn lý thuyết(THẮNG)............................27
KẾT LUẬN............................................................................................................28
TÀI LIỆU THAM KHẢO.....................................................................................29


DANH MỤC HÌNH ẢNH


LỜI MỞ ĐẦU


CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Tổng quan về tính tốn hiệu năng cao
1.1.1 Khái niệm
HPC là cơng nghệ sử dụng các cụm bộ xử lý mạnh mẽ, hoạt động song song
để xử lý các bộ dữ liệu đa chiều khổng lồ (dữ liệu lớn) và giải quyết các vấn đề
phức tạp ở tốc độ cực cao. Các hệ thống HPC thường hoạt động ở tốc độ nhanh
hơn một triệu lần so với các hệ thống máy tính để bàn, máy tính xách tay hoặc máy
chủ nhanh nhất.
Trong nhiều thập kỷ, mô hình hệ thống HPC là siêu máy tính, một máy tính
được thiết kế có mục đích chứa hàng triệu bộ xử lý hoặc lõi bộ xử lý. Siêu máy
tính vẫn ở bên chúng ta; tại thời điểm viết bài này, siêu máy tính nhanh nhất là
Frontier có trụ sở tại Hoa Kỳ (liên kết nằm bên ngoài ibm.com), với tốc độ xử lý
là 1.102 exaflop , hay triệu tỷ phép tính dấu phẩy động mỗi giây (flops). Nhưng

ngày nay, ngày càng có nhiều tổ chức chạy các giải pháp HPC trên các cụm máy
chủ tốc độ cao, được lưu trữ tại cơ sở hoặc trên đám mây.
1.1.2 HPC hoạt động như thế nào
Một hệ thống máy tính tiêu chuẩn giải quyết các vấn đề chủ yếu bằng cách
sử dụng tính tốn nối tiếp—nó chia khối lượng cơng việc thành một chuỗi các tác
vụ, sau đó thực hiện lần lượt các tác vụ đó trên cùng một bộ xử lý.
Ngược lại, HPC tận dụng
 Tính tốn song song lớn: Tính tốn song song chạy nhiều tác vụ đồng thời
trên nhiều máy chủ hoặc bộ xử lý. Tính tốn song song quy mơ lớn là tính
tốn song song sử dụng hàng chục nghìn đến hàng triệu bộ xử lý hoặc lõi bộ
xử lý.


 Cụm máy tính (cịn gọi là cụm HPC): Một cụm HPC bao gồm nhiều máy
chủ tốc độ cao được nối mạng với nhau, với bộ lập lịch tập trung quản lý
khối lượng cơng việc tính tốn song song. Các máy tính, được gọi là nút, sử
dụng CPU đa lõi hiệu suất cao hoặc ngày nay nhiều khả năng là GPU (đơn
vị xử lý đồ họa), rất phù hợp cho các phép tính tốn học nghiêm ngặt, mơ
hình học máy và các tác vụ chuyên sâu về đồ họa. Một cụm HPC có thể bao
gồm 100.000 nút trở lên.
 Các thành phần hiệu suất cao: Tất cả các tài nguyên điện toán khác trong
cụm HPC—hệ thống mạng, bộ nhớ, lưu trữ và tệp—là các thành phần tốc độ
cao, thông lượng cao và độ trễ thấp có thể theo kịp các nút và tối ưu hóa sức
mạnh tính tốn và hiệu suất của cụm.
1.2 Tổng quan về OpenMP
1.2.1 Khái niệm
OpenMP là một giao diện lập trình ứng dụng (API) được sử d ụng để
điều khiển các luồng trên cấu trúc chia sẻ b ộ nhớ chung. Thành phần của
OpenMP bao gồm :
1. Các chỉ thị biên dịch (Compiler Directives).

2. Các thư viện runtime (Runtime Library Routines).
3. Các biến môi trường (Emviroment Variables).
Các chỉ thị biên dịch, các thư viện runtime và các biến môi trường này được sử
dụng để lập trình song song với hai ngôn ngữ Fortran và C/C++. OpenMP là một
chuẩn bộ nhớ chia sẻ hỗ trợ bởi nhiều nền phần cứng và phần mềm như là DEC,
Intel, IBM, SGI, Numerical Algorithms Group. Hơn thế nữa OpenMP còn rất khả
chuyển và có thể thực thi trên cả mơi trường UNIX và Windows NT.


1.2.2 Lịch sử của OpenMP
Ngay từ trước thập kỷ 90. Các nhà cung cấp các máy tính chia sẻ bộ nhớ đã
đưa ra các sản phẩm hỗ trợ sự đồng bộ và các chỉ thị cơ bản. Để lập trình các
chương trình song song trên kiến trúc dạng này thì ngôn ngữ Fortran được sử ụng
với rất nhiều tiện dụng. Người sử dụng có thể làm giảm thời gian thực hiện các
chương trình Fortran bằng cách thực hiện các vòng lặp theo cách song song.
Trong trường hợp này trình biên dịch phải chịu trách nhiệm song song hóa một
cách tự động các vịng lặp thơng qua các BXL SMP. Tuy nhiên mỗi một nhà cung
cấp lại sử dụng những phương thức và sự thực thi khác nhau phụ thuộc vào các
nền tảng phần cứng và kiến trúc riêng của họ.
Để đưa ra một chuẩn hỗ trợ việc lập trình song song trên kiến trúc chia sẻ
bộ nhớ thì năm 1994 chuẩn ANSI X3H5 ra đời. Nhưng nó khơng tồn tại được lâu
vì trong thời gian này các máy tính bộ nhớ phân tán trở nên rất phổ biến. Chuẩn
OpenMP được bắt đưa ra vào mùa xuân năm 1997 để thay thế chuẩn ANSI X3H5.
Trong thời gian này thì các máy tính chia sẻ bộ nhớ rất thịnh hành.
Bên cạnh đó Pthread cũng được đưa ra nhưng Pthread khơng có tính mở
rộng, khơng có các chỉ thị biên dịch. Pthread khơng hỗ trợ song song tốt, người
lập trình rất khó thực thiện việc song song hóa nhờ vào Pthread. Với Pthread
người lập trình phải quan tâm nhiều đến các chi tiết ở ức thấp. Và OpenMP được
thiết kế để giảm bớt những nhược điểm của Pthread.
1.2.3 Mục đích và ứng dụng của OpenMP

OpenMP ra đời với mục tiêu cung cấp một chuẩn chung cho rất nhiều kiến
trúc và nền tảng phần cứng. Nó thiết lập một tập các chỉ thị biên dịch hỗ trợ việc
lập trình song song trên máy tính chia sẻ bộ nhớ chung. Một mức song song chính
thường được thực thi với ba đến bốn chỉ thị. OpenMP ra đời giúp cho việc lập
trình song song một cách dễ dàng nó cung cấp khả năng song song hóa chương
trình tuần tự mà không dùng đến thư viện thông điệp v.v...


Có thể sử dụng OpenMP để giải quết các vấn đề giới hạn về thời gian như
bài toán dự báo thời tiết, và để mô phỏng các vấn đề thực tế như bài tốn mơ
phỏng tai nạn xe hơi, giải quyết các bài toán khoa học yêu cầu khối lượng tính
tốn lớn như bài tốn mơ phỏng N-Body, dự báo thời tiết …
1.3 Tổng quan về tính tốn song song
1.3.1 Khái niệm
➢ Thơng thường, phần mềm được viết cho 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ột 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.
➢ Ý nghĩa đơn giản nhất của tính toán song song là việc sử dụng đồng thời
nhiều tài ngun máy tính để giải quyết bài tốn về tính toán.
● Để chạy trên nhiều CPU
● Một bài toá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
➔ Tính tốn song song là một hình thức tính tốn trong đó nhiều phép tính
được thực hiện đồng thời, hoạt động trên nguyên tắc là những vấn đề lớn

đều có thể chia thành nhiều phần nhỏ hơn, sau đó được giải quyết tương
tranh ("trong lĩnh vực tính tốn").
1.3.2 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 tùy ý 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.3 Các 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.3.4 Các mơ hình lập trình song song
 Mô hình chia sẻ bộ nhớ
 Mô hình luồng (Thread)
 Mô hình gửi thông điệp (MPI)
 Mô hình song song dữ liệu
1.4 Tổng quan về thuật toán Fast Fourier Transform
Fast Fourier Transform," một phương pháp tốn học quan trọng trong xử lý tín
hiệu và tính tốn số học. Được phát triển để hiệu quả hóa việc tính tốn biến đổi
Fourier, FFT giúp giảm độ phức tạp thời gian tính tốn từ O(n^2) xuống O(n log
n), nơi n là kích thước của dãy số.

Trong ngữ cảnh xử lý tín hiệu, FFT thường được sử dụng để chuyển đổi một
tín hiệu từ miền thời gian sang miền tần số, giúp phân tích và xử lý tín hiệu một

cách hiệu quả. Nó cũng được ứng dụng rộng rãi trong các lĩnh vực như xử lý hình
ảnh, truyền thông, và nhiều lĩnh vực khác địi hỏi phân tích tần số.


Tính năng quan trọng của FFT là khả năng giảm độ phức tạp tính tốn so với
phương pháp truyền thống, làm cho nó trở thành một cơng cụ quan trọng trong
nhiều ứng dụng khoa học và kỹ thuật.


CHƯƠNG 2: GIẢI PHÁP GIẢI QUYẾT BÀI TOÁN
2.1 Phát biểu đầy đủ bài toán (DIỆU)
2.1.1 Biến đổi Fourier rời rạc
Cho đa thức có bậc  n - 1 :

Khơng mất tính tổng quát, chúng ta giả sử rằng  n - số hệ số - là lũy thừa của  
2 . Nếu n  không phải là lũy thừa của  2 , thì chúng ta chỉ cần cộng các số hạng còn

thiếu a i x i  và đặt các hệ số  a i  thành  0 .
Lý thuyết về số phức cho chúng ta biết rằng phương trình  
n

phức (gọi là căn bậc   ), và nghiệm có dạng

  có  n  nghiệm

  với

 . Ngồi ra,

những số phức này có một số tính chất rất thú vị: ví dụ: gốc n - gốc thứ

  có thể được sử dụng để mô tả tất cả các gốc thứ

n

  khác:  

 .
Biến đổi Fourier rời rạc (DFT) của đa thức  
vectơ của các hệ số
điểm  

  (hoặc tương đương là

  được định nghĩa là các giá trị của đa thức tại

 , tức là nó là vectơ:

Tương tự, phép biến đổi Fourier rời rạc ngược được định nghĩa: DFT nghịch
đảo của các giá trị của đa thức
 .

  là các hệ số của đa thức  


Do đó, nếu một DFT trực tiếp tính tốn các giá trị của đa thức tại các điểm ở
nghiệm thứ  n , thì DFT nghịch đảo có thể khơi phục các hệ số của đa thức bằng
cách sử dụng các giá trị đó.
2.1.2 Ứng dụng của DFT: nhân nhanh đa thức
Cho hai đa thức A   và B . Ta tính tốn DFT cho mỗi trong số chúng:   DFT ( A) 
và   DFT ( B) .


Điều này có nghĩa là nếu chúng ta nhân các vectơ DFT ( A) và   DFT ( B)  - bằng
cách nhân mỗi phần tử của một vectơ với phần tử tương ứng của vectơ kia - thì
chúng ta không nhận được gì khác với DFT của đa thức DFT ( A . B):

Cuối cùng, áp dụng DFT nghịch đảo, chúng ta thu được:

Cần lưu ý rằng hai đa thức phải có cùng bậc. Mặt khác, hai vectơ kết quả của
DFT có độ dài khác nhau. Chúng ta có thể thực hiện điều này bằng cách thêm các
hệ số có giá trị  0 .
Ngồi ra, vì kết quả của tích hai đa thức là một đa thức bậc   2(n−1) , nên
chúng ta phải nhân đôi bậc của mỗi đa thức (một lần nữa bằng cách đệm   0 s). Từ
một vectơ có các giá trị  n , chúng ta khơng thể xây dựng lại đa thức mong muốn
với các hệ số 2 n−1 .


2.1.3 Biến đổi Fourier nhanh
Biến đổi Fourier nhanh là một phương pháp cho phép tính tốn DFT trong  
  thời gian. Ý tưởng cơ bản của FFT là áp dụng chia để trị. Chúng ta chia
vectơ hệ số của đa thức thành hai vectơ, tính tốn đệ quy DFT cho từng vectơ và
kết hợp các kết quả để tính tốn DFT của đa thức đầy đủ.
Vì vậy, giả sử có một đa thức  A(x)  với bậc  n - 1 , trong đó  n  là lũy thừa của  
2 , và  n > 1 :

Ta chia nó thành hai đa thức nhỏ hơn, một đa thức chỉ chứa các hệ số của
các vị trí chẵn và một đa thức chứa các hệ số của các vị trí lẻ:

Dễ thấy rằng

Các đa thức   A0  và   A1 chỉ bằng một nửa hệ số của đa thức   A  . Nếu chúng ta

có thể tính DFT ( A)  trong thời gian tuyến tính bằng cách sử dụng DFT ( A0 )  và
DFT ( A1 )

 , thì chúng ta sẽ nhận được phép lặp

phức tạp về thời gian, kết quả là  

  cho độ
theo master theorem.

Giả sử chúng ta đã tính các vectơ
Chúng ta hãy tìm một biểu thức cho $

  và
.

 .


n

Đối với 2 giá trị  đầu tiên, chúng ta chỉ có thể sử dụng phương trình đã lưu ý trước
đó  

:

n

Tuy nhiên, đối với 2 giá trị thứ hai, chúng ta cần tìm một biểu thức khác một chút:


Ở đây chúng ta sử dụng lại

  và hai định danh

  và

 .
Do đó, ý nhận được các cơng thức mong muốn để tính tốn tồn bộ vectơ  ( y k ) :

(Mẫu  a + b  và a−b   đôi khi được gọi là con bướm (butterfly).)

2.1.4 FFT nghịch đảo
Cho vectơ

- các giá trị của đa thức   A   bậc  n −1  tại các điểm

  - được cho trước. Chúng ta muốn khôi phục các hệ số  

  của

đa thức. Vấn đề đã biết này được gọi là phép nội suy và có các thuật toán chung để
giải quyết vấn đề này. Nhưng trong trường hợp đặc biệt này (vì chúng ta biết giá trị


của các điểm tại gốc của sự thống nhất), chúng ta có thể thu được một tḥt tốn
đơn giản hơn nhiều (thực tế giống như thuật toán FFT trực tiếp).
Chúng ta có thể viết DFT, theo định nghĩa của nó, ở dạng ma trận:

Ma trận này được gọi là ma trận Vandermonde.
Do đó, chúng ta có thể tính vectơ  


  bằng cách nhân vectơ  

  từ bên trái với nghịch đảo của ma trận:

Kiểm tra nhanh có thể xác minh rằng ma trận nghịch đảo có dạng sau:


Do đó, ta có được cơng thức:

So sánh điều này với công thức cho   y k :

Ta nhận thấy rằng những vấn đề này gần như giống nhau, vì vậy các hệ số a k 
có thể được tìm thấy bằng cùng một thuật toán chia để trị, cũng như FFT trực tiếp,
chỉ thay vì w kn  chúng ta phải sử dụng w−k
n , và cuối cùng, chúng ta cần chia các hệ số
kết quả cho  n.
2.2 Gỉai pháp đối với bài toán (THẮNG)
2.2.1 Thiết kế thuật toán tuần tự
Một thiết kế thuật toán tuần tự cho thuật toán FFT (Fast Fourier Transform)
theo phương pháp Cooley-Tukey.
Thuật toán Cooley_Tukey FFT:


Thuật toán Cooley-Tukey FFT là một phương pháp chia để trị, phân rã đệ
quy DFT (Discrete Fourier Transform) của một số nguyên dương N thành nhiều
DFT nhỏ hơn của các số nguyên N1 và N2.
1 Đầu vào: x=( x 0 , x1 , … , x N−1 ), dãy số phức đầu vào có độ dài N, với N là
một lũy thừa của 2.
2 Trường hợp cơ bản: Nếu N=1, kết quả trả về x .

3 Chia: Chia dãy x thành hai nửa, x even và x odd, mỗi nữa có độ dài N /2.
4 Chinh phục: Áp dụng đệ quy FFT cho x even và x odd để thu được X even và
X odd.
N

5 Kết hợp: Với k =0, 1, … , 2 −1, tính hệ số twiddle W kN và sử dụng nó để kếp
hợp kết quả:
- X k =X even [ k ] + W kN . X odd [k ]
k
- X k+ N2 =X even [ k ] −W N . X odd [ k ]

6 Đầu ra: Trả về X =( X 0 , X 1 , … , X N −1) là kết quả.
Dưới đây là ví dụ:
#include <iostream>
#include <complex>
#include <vector>
using namespace std;
typedef complex<double> Complex;

vector<Complex> fft(const vector<Complex> &x) {


int N = x.size();
// Base case
if (N == 1) {
return x;
}
// Divide
vector<Complex> x_even, x_odd;
for (int i = 0; i < N; i++) {

if (i % 2 == 0) {
x_even.push_back(x[i]);
}else {
x_odd.push_back(x[i]);
}
}
// Conquer
vector<Complex> X_even = fft(x_even);
vector<Complex> X_odd = fft(x_odd);
// Combine
vector<Complex> X(N);
for (int k = 0; k < N/2; k++) {



×