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

ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN MERGR SORT 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 (534.22 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 THỰC NGHIỆM

Học phần: Tính tốn hiệu năng cao

ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN
MERGR SORT SỬ DỤNG MPI
Giáo viên hướng dẫn: TS. Hà Mạnh Đào
Nhóm sinh viên thực hiện: Nhóm 6
1. Nguyễn Hồng Vũ

MSV: 2021605818

2. Võ Trung Hiếu

MSV: 2021603327

3. Hoàng Thân Anh Quý

MSV: 2021602169

Mã Lớp: 20231IT6069001

Hà Nội - Năm 2023


MỤC LỤC
MỤC LỤC................................................................................................................2


LỜI MỞ ĐẦU..........................................................................................................4
NỘI DUNG...............................................................................................................5
I. MÔ TẢ GIẢI THUẬT SONG SONG................................................................5
1. Giới thiệu...........................................................................................................5
2. Nguyên lý thiết kế thuật toán song song...........................................................5
II. MƠ HÌNH LẬP TRÌNH TRUYỀN THƠNG ĐIỆP CHUẨN MPI................7
1. Giới thiệu...........................................................................................................7
2. Các khái niệm cơ bản........................................................................................7
3. Cấu trúc chương trình MPI................................................................................8
III. BÀI TỐN SẮP XẾP.......................................................................................8
1. Sắp xếp nổi bọt..................................................................................................8
2. Sắp xếp chèn......................................................................................................9
3. Sắp xếp chọn......................................................................................................9
4. Sắp sếp trộn.......................................................................................................9
5. Sắp xếp vun đống..............................................................................................9
6. Sắp xếp nhanh....................................................................................................9
IV. ỨNG DỤNG LẬP TRÌNH SONG SONG VÀO BÀI TỐN SẮP XẾP
BẰNG PHƯƠNG PHÁP TRỘN(MERGESORT)..............................................10
1. Phát biểu bài toán............................................................................................10
2. Mã nguồn.........................................................................................................11
3. Đánh giá thời gian chạy với số CPU khác nhau..............................................14
2


KẾT LUẬN............................................................................................................19
TÀI LIỆU THAM KHẢO.....................................................................................21

3



LỜI MỞ ĐẦU
Trong những năm gần đây, mặc dù nền Công nghệ thông tin của thế giới
ngày một phát triển. Tốc độ xử lí máy tính ngày càng tăng lên. Tuy nhiên, chúng ta
cũng gặp phải khó khăn trong một số bài tốn có dữ liệu đầu vào lớn (bài toán dự
báo thời tiết, dự báo động đất, ...). Với dữ liệu đầu vào là một con số rất lớn, dù
máy tính có tốc độ lớn, bộ nhớ nhiều vẫn vấp phải yêu cầu phải giải quyết bài toán
thời gian chấp nhận được.
Trong nhiều năm qua, các nhà khoa học đã nghĩ ra biện pháp giải quyết hiệu
quả đó là chia nhỏ bài toán ra thành nhiều bài toán. Việc giải quyết các bài toán
nhỏ được tiến hành đồng thời tất cả các bài tốn với nhiều máy tính. Kết quả của
bài toán lớn sẽ được giải quyết khi tất cả các bài tốn nhỏ được làm.
Các máy tính tiến hành xử lí song song được kết nối với nhau thành các cụm
tính tốn tốc độ cao. Điều này đã mở ra một lĩnh vực mới trong ngành công nghệ
thông tin, đó là lập trình song song và tính tốn phân tán. Lập trình song song cho
phép chúng ta tận dụng tối đa sức mạnh của các hệ thống đa lõi và đa máy tính,
trong khi tính tốn phân tán giúp chúng ta xử lý dữ liệu lớn mà không cần phải tập
trung tất cả dữ liệu đó vào một nơi. Các công nghệ như Hadoop và Spark đã được
phát triển để giải quyết các vấn đề này, cho phép chúng ta xử lý và phân tích dữ
liệu lớn một cách hiệu quả.
Tuy nhiên, việc lập trình song song và tính tốn phân tán khơng phải lúc nào
cũng dễ dàng. Cần có sự hiểu biết sâu sắc về cách thức hoạt động của hệ thống và
cách dữ liệu được phân chia và xử lý. Điều này đòi hỏi một sự đổi mới trong cách
chúng ta đào tạo lập trình viên, với một sự nhấn mạnh mạnh mẽ hơn vào các kỹ
năng liên quan đến lập trình song song và tính toán phân tán. Chúng ta cũng cần
phải phát triển các cơng cụ và ngơn ngữ lập trình mới để giúp đơn giản hóa q
trình này và làm cho nó trở nên dễ tiếp cận hơn với một lượng lớn lập trình viên.
Với những nỗ lực này, chúng ta có thể hy vọng vào một tương lai mà việc xử lý dữ
liệu lớn khơng cịn là một rào cản lớn.
4



NỘI DUNG
I. MÔ TẢ GIẢI THUẬT SONG SONG
1. Giới thiệu
Hiện nay, để giải quyết các bài toán lớn người ta thường nghĩ đến việc sử
dụng các siêu máy tính hoặc việc kết hợp nhiều máy tính với nhau để tính tốn.
Tuy nhiên, với phương pháp lập trình cổ điển thì khơng thể nào phát triển được
chương trình có thể tận dụng được sức mạnh của các hệ thống đó. Đó chính là lý
do lập trình song song ra đời.
Lập trình song song là một công việc rất phức tạp so với lập trình tuần tự
thơng thường, người phát triển phải thực hiện một q trình "song song hóa", biến
đổi các chương trình tuần tự thành chương trình song song có khả năng tận dụng
tối đa sức mạnh của hệ thống.
2. Nguyên lý thiết kế thuật toán song song
2.1. Cách thức xây dựng một chương trình song song và phân bố
Phát triển thuật toán là một phần quan trọng trong việc giải quyết vấn đề khi
sử dụng máy tính. Một thuật toán song song là một phương pháp giải quyết vấn đề
dựa trên việc sử dụng nhiều bộ xử lý. Tuy nhiên đề chỉ ra được một thuật tốn song
song khơng đơn giản chỉ ra từng bước cụ thể, mà là ở một mức độ nào đó thuật
tốn song song phải được thêm vào tính đồng thời và người thiết kế ra thuật toán
cũng phải chỉ ra tập hợp những bước xử lý đồng thời, điều này sẽ tận dụng được
khả năng tính tốn của các máy tính song song. Trên thực tế việc thiết kế ra một
thuật toán song song là khá phức tạp, gồm các công việc:
- Chỉ ra phần của cơng việc có thể thực thi đồng thời
- Ánh xạ các phần của công việc vào nhiều bộ xử lý chạy song song
- Phân tán dữ liệu nhập, xuất và trung gian cùng với chương trình
- Quản lý truy cập vào dữ liệu chung giữa các bộ xử lý
- Đồng bộ hóa các bộ xử lý khi thực thi các chương trình song song
5



2.2. Thiết kế thuật toán song song
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.
Thiết kế giải thuật song song là chia bài toán thành các bài toán nhỏ hơn và
gán bài toán nhỏ cho các bộ vi xử lý khác nhau để thực hiện song song. Quá trình
thiết kế giải thuật song song là q trình song song hóa bài toán tuần tự.
Nguyên lý cơ bản trong thiết kế giải thuật song song bao gồm:
2.2.1. Nguyên lý lập lịch:
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). Nghĩa là, nếu độ phức tạp tính
tốn của thuật tốn là O(f(n)) thì thời gian thực hiện của chương trình có thể tăng
khi số bộ xử lý giảm, và thời gian tính tốn tổng thể tăng lên một hằng số nào đó nhưng vẫn là O(f(n)).
2.2.2. 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.
2.2.3. Nguyên lý chia để trị:
Tức là 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. Tạo ra một mơ hình cây phân cấp để phân
cấp q trình truyền thơng và tính tốn.
- Tăng tính song song so với mơ hình trước
- Thời gian chạy giảm từ O(n) xuống O(logn)
2.2.4. 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 toán song song.
6


2.2.5. Nguyên 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.

II. MƠ HÌNH LẬP TRÌNH TRUYỀN THƠNG ĐIỆP CHUẨN MPI
1. Giới thiệu
Có rất nhiều ngơn ngữ lập trình và các thư viện được xây dựng nên để dành
cho lập trình song song. Mơ hình lập trình truyền thơng điệp là một trong những
mơ hình cổ nhất và được sử dụng rộng rãi nhất trong các mơ hình dùng cho lập
trình trên các máy tính song song. Mơ hình này có hai tính chất quan trọng đó là:
nó giả sử khơng gian địa chỉ được phân chia và nó chỉ hỗ trợ song song hóa tường
minh. Môi trường truyền thông điệp LAM/MPI là phiên bản nguồn mở, cung cấp
miễn phí với chuẩn MPI. Chuẩn MPI (Message Passing Interface) là kết quả sau
hơn 2 năm thảo luận của MPI Forum, 1 nhóm gồm khoảng 60 người từ 40 tổ chức
khác nhau đại diện cho những nhà phân phối các hệ thống song song, những phịng
thí nghiệm quốc gia và những trường đại học danh tiếng. MPI là một thư viện các
hàm có thể chèn vào mã nguồn để truyền dữ liệu giữa các tiên trình.
2. Các khái niệm cơ bản
- Communicator: Một nhóm các tiến trình có thể truyền thống với nhau.
Một tiến trình có thế thuộc nhiều Communicator.
- Rank: Mỗi tiến trình trong 1 communicator có 1 định danh, gọi là Rank,
đánh số bắt đầu từ 0. Một tiến trình có thể các rank khác nhau khi thuộc về
các communicator khác nhau.
- Group: là các nhóm xử lý
- Process (tiến trình hay xử lý): với kiểu lập trình trên một máy có một bộ
xử lý thì process được coi như là một tiến trình trong một chương trình có
khơng gian địa chỉ riêng do hệ điều hành cung cấp.

7



- Send/receive: Vì các chương trình sử dụng phương pháp lập trình Message
passing khơng chia sẻ vùng nhớ chung, hay biến cục bộ mà tất cả dữ liệu
đều phải giao tiếp thơng qua truyền thơng. Do đó MPI định nghĩa
Send/receive là 2 cơ chế gửi nhận thông điệp giữa các xử lý trên máy khác
nhau.
3. Cấu trúc chương trình MPI
Các tập tin thư viện: liên quan đến các hàm và thủ tục, các kiểu dữ liệu. Bao
gồm tập tin.h như mpi.h, mpio.h, ... Cấu trúc chương trình MPI:
Các tập tin thư viện

Khởi tạo môi trường
MPI
Thực hiện các thủ tục hàm MPI

Thốt khỏi mơi trường

III. BÀI TỐN SẮP XẾP
Trong tốn học, cũng như khoa học máy tính thì bài tốn sắp xếp một dãy số
cho trước thành 1 dãy số tăng hoặc giảm được gọi là các bài toán sắp xếp. Việc sắp
xếp giúp ích rất nhiêu trong cơng việc tìm kiếm thơng tin cũng như trong cuộc
sống.
Một số thuật tốn sắp xếp tương đối đơn giản như:
1. Sắp xếp nổi bọt
Sắp xếp nồi bọt (bubble sort) là phương pháp sắp xếp đơn giản, dễ hiểu
thường được dạy trong khoa học máy tính. Giải thuật bắt đầu từ đầu của tập dữ
liệu. Nó so sánh hai phần tử đầu, nếu phần tử đứng trước lớn hơn phần tử đứng sau
8


thì đồi chỗ chúng cho nhau. Tiếp tục làm như vậy với cặp phần tử tiếp theo cho

đến cuối tập hợp dữ liệu. Sau đó nó quay lại với hai phần tử đầu cho đến khi khơng
cịn cần phải đồi chỗ nữa.
2. Sắp xếp chèn
Sắp xếp chèn (insertion sort) là một thuật toán sắp xếp rất hiệu quả với các
danh sách nhỏ. Nó lần lượt lấy các phần tử của danh sách chèn vào vị trí thích hợp
trong một danh sách mới đã được sắp.
3. Sắp xếp chọn
Sắp xếp chọn (select sort) là phương pháp sắp xếp bằng cách chọn phần tử
bé nhất xếp vào vị trí thứ nhất, tương tự với các phần tử nhỏ thứ hai, thứ ba, ...
4. Sắp sếp trộn
Sắp xếp trộn (merge sort) cùng với sắp xếp nhanh là hai thuật toán sắp xếp
dựa vào tư tưởng "chia để trị" (divide and conquer). Thủ tục cơ bàn là việc trộn hai
danh sách đã được sắp xếp vào một danh sách mới theo thứ tự. Nó có thể bắt đầu
trộn bằng cách so sánh hai phần tử một (chẳng hạn phần tử thứ nhất với phần từ
thứ hai, sau đó thứ ba với thứ tư...) và sau khi kết thúc bước 1 nó chuyển sang bước
2. Ở bước 2 nó trộn các danh sách hai phần tử thành các danh sách bốn phần tử. Cứ
như vậy cho đến khi hai danh sách cuối cùng được trộn thành một.
5. Sắp xếp vun đống
Sắp xếp vun đống (heapsort) là một trong các phương pháp sắp xếp chọn. Ở
mỗi bước của sắp xếp chọn ta chọn phần từ lớn nhất (hoặc nhỏ nhất) đặt vào cuối
(hoặc đầu) danh sách, sau đó tiếp tục với phần cịn lại của danh sách. Thông
thường sắp xếp chọn chạy trong thời gian O(n2). Nhưng heapsort đã giảm độ phức
tạp này bằng cách sử dụng một cầu trúc dữ liệu đặc biệt được gọi là đồng (heap).
Đồng là cây nhị phân mà trọng số ở mỗi đỉnh cha lớn hơn hoặc bằng trọng số các
đỉnh con của nó. Một khi danh sách dữ liệu đã được vun thành đống, gốc của nó là
phần từ lớn nhất, thuật tốn sẽ giài phóng nó khỏi đống đề đặt vào cuối danh sách.
Sắp xếp vun đồng chạy trong thời gian O(nlogn).
6. Sắp xếp nhanh
Sắp xếp nhanh (quicksort) là một thuật toán theo tư tưởng chia để trị, nó dựa
trên thủ tục phân chia như sau: đề chia một dãy ta chọn một phần tử được gọi là

9


"chốt" (pivot), chuyển tất cả các phần tử nhỏ hơn chốt về trước chốt, chuyển tất cả
các phần tử lớn hơn chốt về sau nó. Thủ tục này có thể thực hiện trong thời gian
tuyến tính. Tiếp tục phân chia các dãy con đó như trên cho đền khi các dãy con chỉ
còn một phân tử.
Điểm khác biệt giữa sắp xếp nhanh và sắp xếp trộn là trong sắp xếp trộn việc
xác định thứ tự được xác định khi "trộn", tức là trong khâu tổng hợp lời giải sau
khi các bài tốn con đã được giải, cịn sắp xếp nhanh đã quan tâm đến thứ tự các
phần tử khi phân chia một danh sách thành hai danh sách con.
Ngoài ra cịn nhiều giải thuật sắp xếp khác, trong đó nhiều giải thuật sắp xếp
được cải tiến từ các giải thuật trên. Trong sau giải thuật liệt kê trên, ta thường coi
các giải thuật chèn, chọn, nồi bọt là các giải thuật cơ bản, độ phức tạp trong trường
hợp trung bình của chúng là O(n2). Ba giải thuật còn lại thường được coi là giải
thuật cao cấp, độ phức tạp tính tốn trung bình của chúng là nIn(n).

IV. ỨNG DỤNG LẬP TRÌNH SONG SONG VÀO BÀI TỐN SẮP XẾP
BẰNG PHƯƠNG PHÁP TRỘN(MERGESORT)
1. Phát biểu bài tốn
Giả sử có hai danh sách đã được sắp xếp a[1.m] và b[1. n.] (trong đó m và n
là các số rất lớn) Ta có thể trộn chúng lại thành một danh sách mới c[1..m + n]
được sắp xếp theo cách sau:
So sánh hai phần tử đứng đầu của hai danh sách, lấy phần từ nhỏ hơn cho
vào danh sách mới. Tiếp tục như vậy cho tới khi một trong hai danh sách là rỗng.
Khi một trong hai danh sách là rỗng ta lấy phần còn lại của danh sách kia cho vào
cuối danh sách mới.
Ví dụ: Cho hai danh sách a = (1,3,7,9), b = (2,6), q trình hịa nhập diễn ra như
sau:
Danh sách a


Danh sách b

So sánh

Danh sách c

1,3,7,9

2,6

1<2

1

3,7,9

2,6

2<3

1,2

3,7,9

6

3<6

1,2,3


7,9

6

6<7

1,2,3,6

10


7,9

1,2,3,6,7,9

Như vậy, việc áp dụng tính tốn song song ở bài tốn sắp xếp chính là ta
chia màng c thành 2 màng a và b. Ta tiến hành sắp xếp 2 mảng a, b sau đó trộn
mảng a và màng b vào với nhau, ta có mảng c là kết quả của bài toán.
Bài toán được tiến hành theo các bước sau:
 Bước 1: Tiến trình chính có nhiện vụ khởi tạo (đọc) dữ liệu, chia các thành
các block dữ liệu liên tục cho các task làm việc.
 Bước 2: Các task làm việc nhận dữ liệu sửa dụng thuật toán sắp xếp trộn để
tiến hành sắp xếp trên phân đoạn của mình, trả kết quả về cho MASTER để
tiến hành trộn lần cuối.

11


2. Mã nguồn


12


13


14


3. Đánh giá thời gian chạy với số CPU khác nhau
 Sắp xếp 1 màng có 400.000 thực hiện trên 4 processors:
[guest@bkluster ~]$ mpirun -np 4 MergeSort
100000; 4 processors; 0.081254 secs
100000; 4 processors; 0.083078 sесss
15


200000; 4 processors; 0.096949 sесss
400000; 4 processors; 0.105866 secs
 Sắp xếp 1 màng có 400.000 thực hiện trên 40 processors:
[guest@bkluster ~]$ mpirun -np 40 MergeSort
10000; 40 processors; 0.013951 sесss
10000; 40 processors; 0.019274 secs
10000; 40 processors; 0.022400 secs
10000; 40 processors; 0.022348 sесss
20000; 40 processors; 0.026182 secs
20000; 40 processors; 0.026826 secs
20000; 40 processors; 0.031455 secs
10000; 40 processors; 0.019963 secs

10000; 40 processors; 0.019862 secs
10000; 40 processors; 0.020511 secs
10000; 40 processors; 0.024505 secs
10000; 40 processors; 0.022193 secs
20000; 40 processors; 0.032605 secs
10000; 40 processors; 0.024016 secs
20000; 40 processors; 0. 034100 secs
10000; 40 processors; 0.029445 secs
20000; 40 processors; 0. 034308 secs
10000; 40 processors; 0.030610 secs
10000; 40 processors; 0.030799 secs
10000; 40 processors; 0.031756 gecs
10000; 40 processors; 0.033447 secs
16


10000; 40 processors; 0.027346 secs
10000; 40 processors; 0.028244 secs
20000; 40 processors; 0.035594 secs
20000; 40 processors; 0.035773 secs
10000; 40 processors; 0.030917 secs
10000; 40 processors; 0.037861 secs
20000; 40 processors; 0.039877 secs
10000; 40 processors; 0.033726 secs
40000; 40 processors; 0.042259 secs
20000; 40 processors; 0.044526 secs
40000; 40 processors; 0.044677 secs
40000; 40 processors; 0.044937 secs
40000; 40 processors; 0.040305 secs
80000; 40 processors; 0.051000 secs

40000; 40 processors; 0.054588 secs
80000; 40 processors; 0.056556 secs
160000; 40 processors; 0. 060220 secs
80000; 40 processors; 0.066859 secs
400000; 40 processors; 0.074034 secs
 Sắp xếp 1 mảng có 1.000.000 thực hiện trên 20 processors:
[guest@bkluster ~]$ mpirun -ng 20 MergeSort
50000; 20 processors; 0.057896 secs
50000; 20 processors; 0.063329 secs
50000; 20 processors; 0.062425 secs
50000; 20 processors; 0.075495 secs
17


100000; 20 processors; 0.084388 secs
50000; 20 processors; 0.096323 secs
50000; 20 processors; 0.099152 secs
100000; 20 processors; 0.106208 secs
50000; 20 processors; 0.106753 secs
50000; 20 processors; 0.112207 secs
50000; 20 processors; 0.114848 secs
100000; 20 processors; 0.117695 secs
50000; 20 processors; 0.119958 secs
200000; 20 processors; 0.101777 secs
100000; 20 processors; 0.126893 secs
100000; 20 processors; 0.324322 secs
200000; 20 processors; 0.329881 secs
400000; 20 processors; 0.341076 secs
200000; 20 processors; 0.358863 secs
1000000; 20 processors; 0.378503 secs

 Sắp xếp 1 mảng có 10.000.000 thực hiện trên 20 processors:
[guest@bkluster ~]$ mpirun -np 20 MergeSort
500000; 20 processors; 0.651765 ses
500000; 20 processors; 0. 652185 secs
500000; 20 processors; 0.659507 secs
500000; 20 processors; 0.767964 secs
1000000; 20 processors; 0.793689 secs
500000; 20 processors; 0.899705 secs
500000; 20 processors; 0.937705 ses
18


1000000; 20 processors; 1.002965 secs
500000; 20 processors; 1.039666 secs
500000; 20 processors; 1.092781 ses
1000000; 20 processors; 1.110230 secs
1000000; 20 processors; 1.206062 secs
2000000; 20 processors; 1.170763 secs
1000000; 20 processors; 1.635967 secs
2000000; 20 processors; 1.686629 secs
4000000; 20 processors; 1.735968 secs
2000000; 20 processors; 1.968635 secs
500000; 20 processors; 1.050071 secs
500000; 20 processors; 1.143645 secs
10000000; 20 processors; 2.155330 secs
Dựa vào kết quả trên, ta có thể thấy sự tối ưu của giải thuật song song để
giải quyết các bài toán lớn. Với sự tham gia của nhiều bộ vi xử lí, kết hợp với giải
thuật tính toán xong xong tối ưu sẽ mang lại hiệu quả tính tốn cao nhất.

19



KẾT LUẬN
Bộ mơn giải thuật và tính tốn hiệu năng cao thuộc ngành CNTT là một
chuyên ngành đang phát triển mạnh mẽ trong nhiều năm gần đây. Bằng sự hiệu quả
của tính tốn song song đã giúp cho chúng ta giải quyết một cách thành cơng các
bài tốn khó (với số lượng tính tốn rất lớn) trong nhiều ngành khoa học.
Trong những năm gần đây, bằng việc các nhà sản xuất bộ vi xử lí cố gắng
tăng tốc độ tính tốn cho bộ vi xử lí của mình. Trong vịng 30 năm qua, các nhà
thiết kế CPU đã thực hiện gia tăng tốc độ trong 3 lĩnh vực chính, hai trong số đó
tập trung vào tiến trình thực thi lệnh: Tốc độ xung nhịp, Tối ưu việc thực thi, Bộ
nhớ đệm (cache)
Việc gia tăng tốc độ xung nhịp cho nhiều chu kỳ xung hơn. Chạy CPU
nhanh hơn gần như đồng nghĩa với việc thực hiện công việc nhanh hơn. Việc tối
ưu khả năng thực thi cho phép làm được nhiều việc hơn trong mỗi chu kỳ. Các
CPU hiện nay có tập lệnh mạnh hơn và thực hiện đủ loại tối ưu từ cơ bản đến phức
tạp như tạo tuyến ưu tiên, tiên đoán rẽ nhánh, thực thi nhiều lệnh trong cùng xung
nhịp; thậm chí cịn sắp xếp lại chuỗi lệnh đề cho phép thực thi khơng theo trình tự.
Các kỹ thuật này đều được thiết kế nhằm làm cho tiến trình thực thi tơt hơn và
nhanh hơn, tận dụng tơi đa từng chu kỳ xung nhịp. Và câu hỏi đặt ra khi nào thì
việc gia tăng tơc độ sẽ dừng lại? Định luật Moore tiên đoán sự gia tăng theo số mũ
rõ ràng không thể tiếp tục mãi khi chúng ta đạt đến giới hạn vật lý. Việc tăng tốc
độ rồi sẽ chậm lại và có thể dừng lại. (Chú thích: định luật Moore chủ yếu áp dụng
cho mật độ transistor, tuy nhiên việc tăng theo cấp số mũ tương tự cũng xảy ra
trong các lĩnh vực liên quan như tốc độ xung nhịp.
Khi việc tăng tốc độ cho CPU càng ngày càng khó khăn, thì việc xử lý song
song có nhiều lợi thế: Tận dụng được tốc độ của CPU, tận dụng thời gian để thực
hiện bài toán (giải quyết cùng một lúc các bài tốn). Từ đó làm ra tăng tốc độ tính
tốn thực tế (bằng cách rút ngắn thời gian thực hiện bài tốn). Xử lí song song có
các lợi thế: Thứ nhất, bản chất các luồng điều khiển độc lập tách biệt nhau về mặt

lí luận. Thứ hai, song hành đem đến sự cải thiện hiệu suất, hoặc nhờ tận dụng
nhiều CPU hoặc thời gian "chết" của các tiến trình trong ứng dụng.
Bên cạnh những thuận lợi trên, thì xử lí song song cịn có những nhược điểm
sau: Trước hết, không phải tất cả ứng dụng đều có thể thực hiện song song. Và trở
ngại lớn nhất là việc lập trình song song khó hơn nhiều so với lập trình theo trình
20



×