Tải bản đầy đủ (.pdf) (20 trang)

Tìm hiểu về công nghệ multicore và các phương pháp cải thiện hiệu năng của máy tính

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.02 MB, 20 trang )

Mục lục

DANH MỤC HÌNH VẼ .....................................................................................................2
LỜI NÓI ĐẦU .....................................................................................................................3
1. Multicore là gì?................................................................................................................4
2. Tại sao cần Multicore? ...................................................................................................5
2.1. Phương pháp tăng tốc độ đồng hồ .........................................................................5
2.2. Đường ống hóa bộ vi xử lý .....................................................................................7
2.3. Phương pháp siêu phân luồng ................................................................................8
3. Các kỹ thuật trong Multicore ...................................................................................... 10
3.1. Multicore kết hợp với Hyper Threading ............................................................ 10
3.2. Các vấn đề kết hợp Multicore với bộ nhớ Cache ............................................. 12
4. Hệ điều hành và chương trình trong Multicore ........................................................ 17
5. Kết Luận ........................................................................................................................ 20

1


DANH MỤC HÌNH VẼ

Hình 1. Sơ đồ khối của máy tính .......................................................................................4
Hình 2. Cấu tạo của một Core............................................................................................4
Hình 3. Sơ đồ khối hệ thống Multicore ............................................................................5
Hình 4. Biều đồ thời gian kích thước của Transistor từ 2000-2020..............................6
Hình 5. Tỷ lệ hiệu năng so với tốc độ đồng hồ của vi xử lý hãng Intel........................6
Hình 6. Minh họa quá trình thực hiện Pipeline................................................................7
Hình 7. Sự lãng phí ALU....................................................................................................8
Hình 8. Minh họa siêu phân luồng ....................................................................................9
Hình 9. Tranh chấp giữa hai luồng trong STT .............................................................. 10
Hình 10. Multicore kết hợp với Hyper Threading........................................................ 11
Hình 11. Chip i5-4200U 2 nhân, 4 luồng ...................................................................... 11


Hình 12. So sánh tốc độ và giá cả các loại bộ nhớ ....................................................... 12
Hình 13. Các kiểu kết hợp bộ nhớ trong Multicore ..................................................... 13
Hình 14. Xung đột dữ liệu trong Multicore................................................................... 13
Hình 15. Xung đột dữ liệu trong Multicore................................................................... 14
Hình 16. Xung đột dữ liệu trong Multicore................................................................... 14
Hình 17. Xung đột dữ liệu trong Multicore................................................................... 15
Hình 18. Phương pháp vô hiêu hóa dữ liệu ................................................................... 15
Hình 19. Phương pháp vô hiêu hóa dữ liệu ................................................................... 16
Hình 20. Phương pháp vô hiêu hóa dữ liệu ................................................................... 16
Hình 21. Phương pháp cập nhật dữ liệu ........................................................................ 17
Hình 22. Ví dụ về Affinity masks không có Hyper Threading................................... 18
Hình 23. Ví dụ về Affinity masks có Hyper Threading .............................................. 18
Hình 24. Set affinity trong Window............................................................................... 19

2


LỜI NÓI ĐẦU
Ngày này, với tốc độ phát triển nhanh chóng của xã hội, nhu cầu xử lý
thông tin của người dùng là ngày càng tăng, đòi hỏi những chiếc máy tính
phải trang bị cho mình các bộ xử lý mạnh mẽ và đồng thời phải có giá thành
hợp lý. Chính vì vậy, ngày càng có nhiều giải pháp nâng cao hiệu năng của
máy tính được đưa ra. Một trong các phương pháp đã và đang được áp dụng
vào thực tế thành công là phương pháp nâng cao hiệu năng của máy tính theo
công nghệ Multicore. Đây là một công nghệ rất mới và thú vị. Vì vậy, nhóm
chúng em quyết định chọn đề tài “Tìm hiểu về công nghệ Multicore và các
phương pháp cải thiện hiệu năng của máy tính” để cập nhật thêm những kiến
thức mới cho bản thân.
Trong bài tập lớn này, nhóm chúng em tìm hiểu xoay quay các vấn đề
chính như: công nghệ Multicore là gì, ưu nhược điểm của công nghệ

Multicore, so sánh công nghệ Multicore với các công nghệ cải thiện hiệu năng
khác. Trong bài viết, nhóm chúng em xin trình bày ngắn gọn, tập trung vào
các ý chính của từng vấn đề.
Do thơi gian tìm hiểu còn hiểu hạn chế nên trong bài viết không tránh
khỏi những thiếu sót. Vì vậy, chúng em rất mong nhận được những ý kiến
góp ý từ cô để hoàn thiện hơn kiến thức về vấn đề này.
Cuối cùng, nhóm chúng em xin chân thành cảm ơn cô giáo Ths. Tạ
Kim Huệ đã cho chúng em một đề tài thú vị.
Nhóm sinh viên
S-BkFet

3


1. Multicore là gì?
Như chúng ta đã biết, một chiếc máy tính đơn giản là một hệ thống bao gồm
4 thành phần: đơn vị xử lý trung tâm (CPU), bộ nhớ, thành phần giao tiếp với các
thiết bị ngoại vị và một hệ thống bus. Trong đó, CPU là thành phần quan trọng nhất
của một chiếc máy tính. Cấu tạo cơ bản của CPU bao gồm 3 thành phần:
 ALU: đơn vị tính toán số học và logic
 Register file: tệp thanh ghi
 Bus Interface: đơn vị điều khiển hệ thống bus

Hình 1. Sơ đồ khối của máy tính

Hình 1 thể hiện sơ đồ khối của một chiếc máy tính. Trên đó, trong phần ô
vuông màu đỏ chính là các thành phần của một chiếc CPU đơn giản, chiếc CPU này
chỉ có một core. Vậy Core là gì?
Hình 2, giải thích khái niệm core của CPU. Core ở
đây có thể hiểu là một lõi với hai thành phần là

ALU và tệp thanh ghi kết nối với nhau. Một điều
lưu ý, một core không được coi là một chiếc CPU
đầy đủ, nó chỉ là một thành phần trong CPU.
Từ đây, ta có thể hiểu công nghệ Multicore là công
nghệ thay vì chỉ sử dụng một core cho một chiếc
CPU, ta sẽ tích hợp nhiều core lên trên cùng một
Hình 2. Cấu tạo của một Core

4


khuân CPU và các core này cùng sử dụng chung các thành phần của máy tính. Để
hiểu rõ ta hãy theo dõi Hình 3, trên hình vẽ minh họa sơ đồ khối của một chiếc CPU
sử dụng theo công nghệ Multrcore.

Hình 3. Sơ đồ khối hệ thống Multicore

Đến đây, ta có thể hình dung ra cách nâng cao hiệu năng của máy tính sử
dụng công nghệ này. Trong công nghệ này, người ta tăng số lượng các đơn vị tính
toán của CPU. Có nghĩa là thay vì trong một thời điểm chỉ thực hiện được một tác
vụ, ta có thực hiện tối đa N tác vụ đồng thời, với N là số core của CPU. Tuy nhiên,
phương pháp này cũng có các ưu và nhược điểm của nó. Nhưng trước hết, ta hãy
tìm hiểu vì sao người ta lại sử dụng công nghệ Multicore bằng cách phân tích các
mặt hạn chế và giới hạn của các công nghệ được áp dụng trước đó như: tăng tốc độ
đồng hồ, đường ống hóa bộ vi xử lý (Pipeline), công nghệ siêu phân luồng (Hyper
Threading hay Simultaneous multithreading).

2. Tại sao cần Multicore?
2.1. Phương pháp tăng tốc độ đồng hồ
Như chúng ta đã biệt, tốc độ đồng hồ là một trong những nguyên nhân quyết

định đến hiệu suất của máy tính. Cùng một chiếc máy tính, khi mà tốc độ đồng hồ
tăng thì thời gian thực hiện một lệnh sẽ giảm xuống, nghĩa là trong cùng một
khoảng thời gian ta thực hiện được nhiều lệnh hơn hay hiêu năng của máy tính sẽ
tăng lên. Tuy nhiên tốc độ của đồng hồ phụ thuộc vào kích thước của các transistor,
để tăng tốc độ đồng hồ đỏi hỏi kích thước của các transistor phải ngày càng nhỏ.
Đồng nghĩa với việc chế tạo ra một chiếc CPU hiệu năng cao ngày càng khó khi mà
công nghệ chế tạo Transistor đang dừng lại ở công nghệ 22nm và rất khó khăn để
có thể chế tạo ra một chiếc Transistor nhỏ hơn nữa.

5


Hình 4. Biều đồ thời gian kích thước của Transistor từ 2000-2020

Hình 5. Tỷ lệ hiệu năng so với tốc độ đồng hồ vi xử lý của hãng Intel

Một nguyên nhân khác khiến việc tăng tốc độ đồng hồ nhanh đạt đến giới
hạn của nó là khi ta tăng tốc độ đồng hồ, điện năng tiêu thụ của một chiếc CPU
cũng tăng lên một cách nhanh chóng theo hàm bình phương của tốc độ đồng hồ.
6


Điều này, khiến chiếc máy tính trở nên nóng hơn và cần phải có các hệ thống tản
nhiệt đắt tiền. Qua thực tế, người ta nhận thấy rằng tỉ lệ hiệu năng so với giá thành
sản phẩm theo cách tăng xung nhịp nhanh đạt đến một ngưỡng tới hạn.
Vì các lý do trên, chúng ta cần phải có các phương pháp khác tốt hơn để giải
quyết tăng hiệu năng của máy tính.
2.2. Đường ống hóa bộ vi xử lý
Một trong các phương pháp rất hay và vẫn còn được sử dụng trong các chiếc
CPU ngày này là phương pháp đường ống hóa bộ vi xử lý (Pipeline). Cơ chế ngắn

gọn của pháp pháp này là chia quá trình thực hiện lệnh thành các giai đoạn nhỏ hơn
và mỗi giai đoạn có một đơn vị thực hiện riêng. Điều đó có nghĩa là ta có thể thực
hiện đồng thời các giai đoạn khác nhau của các lệnh khác nhau trong cùng một thời
điểm. Điều này, cho phép ta tận dùng các tài nguyên sẵn có trên chiếc vi xử lý và có
thể giúp tăng tốc độ đồng hồ mà không cần phải giảm kích thước Transistor.
Tuy nhiên, phương pháp này cũng có mặt hạn chế. Đó là để khai thác được
hết năng lưc của các tài nguyên ta cần phải chia quá trình thực hiện lệnh thành càng
nhiều giai đoạn càng tốt. Nhưng khi chia quá trình thực hiện lệnh thành càng nhiều
giai đoạn, xung đột giữa các quá trình bắt đầu xuất hiện và số lượng xung đột cũng
tăng theo số giai đoạn. Việc này đòi hỏi phải có các phương pháp giải quyết và rất
khó để giải quyết vấn đề khi số giai đoạn tăng quá cao.

Hình 6. Minh họa quá trình thực hiện Pipeline

Nhìn chung, phương pháp này là rất tốt để giải quyết bài toán khai thác hiệu
quả tài nguyên sẵn có. Nhưng nếu xét kỹ hơn, ta sẽ thấy phương pháp này chưa khai
thác được hết tài nguyên trên bộ ALU. Lấy một ví dụ, bộ ALU của chúng ta có hai
đơn vị tính toán riêng biệt cho số phức và số thực dấu phẩy động như trên hình 6.
Dù cho đã sử dụng phương pháp Pipeline thì tại một thời điểm ta cũng chỉ có thể sử

7


dụng một trong hai đơn vị này, nghĩa là đơn vị còn lại không được sử dụng. Điều
này dẫn tới sự ra đời của một phương pháp mới, phương pháp siêu phân luồng.

Hình 7. Sự lãng phí ALU

2.3. Phương pháp siêu phân luồng
Siêu phân luồng hay đa luồng chạy đồng thời là cùng các tên để chỉ cùng một

phương pháp, trong bài viết này sẽ sử dụng cách gọi thứ nhất. Nói một cách đơn
giản để hiểu siêu phân luồng là nếu máy tính có một chiếc CPU thì hệ điều hành và
phần mềm sẽ tưởng tượng nó đang sở hữu hai chiếc CPU ảo và chúng có thể tạo ra
hai luồng khác nhau để chạy đồng thời trên hai chiếc CPU ảo này với yêu cầu tại
một thời điểm hai luồng này sử dụng hai đơn vị khác nhau của chiếc CPU vật lý. Để
hiểu rõ hơn phương pháp này hãy theo dõi hình 8.

8


Hình 8. Minh họa siêu phân luồng

Trên hình 8, ta thấy có hai luồng 1 và luồng 2 chạy song song với nhau và
chúng sử dụng hai đơn vị tài nguyên khác nhau của ALU. Trong khi luồng 1 sử
dụng đơn vị tính toán cho số nguyên thì luồng 2 sử dụng đơn vị tính toán số thực
dấu phảy động. Rõ ràng, nhìn vào đây ta có thể thấy phương pháp này cho phép
khai thác tốt hơn tài nguyên trên ALU.
Tuy nhiên, một nhược điểm của phương pháp này là nếu có sự tranh chấp sử
dụng cùng một tài nguyên giữa hai luồng thì cần phải giải quyết như thế nào. Điều
này nếu không được giải quyết có thể dẫn tới các hậu quả nghiêm trọng và không
thể giải quyết được.
Phương pháp này, tuy có mặt hạn chế rất lớn. Nhưng nó vẫn rất tốt cho các
phần mềm và hệ điều hành hỗ trợ siêu phân luồng, hệ thống máy chủ. Ngày này,
hầu hết các hệ điều hành phổ biến như Window, MacOS, Linux,… đã hỗ trợ siêu
phân luồng. Nhưng một điều khiến phương pháp này vẫn chưa thật sự hấp dẫn đó là
việc viết các chương trình hỗ trợ siêu phân luồng thường khó hơn cho các lập trình
viên.
Một phương pháp gần giống và hiệu quả hơn, đó chính là phương pháp
Multicore. Phương pháp Multicore ngoài việc giải quyết vấn đề tranh chấp tốt hơn
nó còn là giải pháp tốt để giải quyết bài toán đa nhiệm. Tức là, bây giờ với

Multicore chúng ta có thể thực hiện nhiều tác vụ đồng thời, lấy một ví dụ đơn giản
khi bạn sử dụng trình duyệt web để đọc báo, bạn vẫn có thể bật window player để
9


nghe nhạc, bật từ điển để tìm nghĩa của một từ mới,… Nói tóm lại, với Multicore ta
có thể thoải mái sử dụng nhiều ứng dụng cùng một lúc.

Hình 9. Tranh chấp giữa hai luồng trong STT

Trong phần sau, chúng ta sẽ xem xét cách kết hợp Multicore với siêu phân
luồng, so sánh hai công nghệ này với nhau, ngoài ra chúng ta cũng sẽ phân tích và
giải quyết vấn đề đồng bộ dữ liệu.

3. Các kỹ thuật trong Multicore
3.1. Multicore kết hợp với Hyper Threading
Ngày nay, người ta thường kết hợp nhiều phương pháp với nhau để khai thác
tối đa hiệu năng của máy tính. Trong đó có sự kết hợp giữa Multicore và Hyper
Threading. Các chip vi xử lý của Intel trên thị trường hiện cung cấp cho người dùng
các tùy chọn sau:





Single-core, non-SMT
Single-core, with SMT
Multi-core, non-SMT
Multi-core, with SMT


10


Với một chiếc CPU hai core và sử dụng Hyper Threading thì máy tính có thể
có tối đa 4 luồng chạy đồng thời. Trên hệ điều hành window để thấy điều này ta có
thể vào Task Manager để kiểm tra.

Hình 10. Multicore kết hợp với Hyper Threading

Hình 11. CPU i5-4200U 2 nhân, 4 luồng

11


Cách kết hợp này cho phép các chiếc CPU có thể chạy với tốc độ đồng hồ
thấp hơn nhưng vẫn đạt được hiệu năng cao và giúp giảm điện năng tiêu thụ của
máy tính.
So sánh Multicore và Hyper Threading:
Multicore

Hyper Threading

 Có nhiều lõi và mỗi lõi thường nhỏ và  Có thể sử dụng với lõi có kích thước
chậm hơn, bù lại việc thiết kế và sản
lớn và nhanh hơn.
xuất đơn giản hơn.
 Hiệu năng tốt với luồng đơn.
 Điều này thích hợp với sử lý song  Hầu hết vẫn áp dụng song song ở
song ở mức luồng.
mức lệnh.

3.2. Các vấn đề kết hợp Multicore với bộ nhớ Cache
Trong kiến trúc máy tính, thành phần có tốc độ chậm nhất chính là bộ nhớ,
đây thường là nguyên nhân chính làm hiệu năng của máy tính giảm. Thực ra, tốc độ
của bộ nhớ SRAM không phải là quá chậm tuy nhiên giá thành để sản xuất các bộ
nhớ nhanh là rất tốn kém vì thế người ta sử dụng phương pháp phân cấp bộ nhớ để
giải quyết một phần vấn đề.

Hình 12. So sánh tốc độ và giá cả các loại bộ nhớ

Cơ sở của phương pháp này là các bộ nhớ gần máy tính có tốc cao và dung
lượng nhỏ, các bộ nhớ ở xa hơn có tốc độ chậm hơn và dung lượng lớn hơn. Trong
đó Cache là thành phần gần với CPU nhất và thường nằm trong CPU. Các dữ liệu
sẽ được tải vào trong cache trước khi được đưa vào CPU để tính toán.

12


Hình 13. Các kiểu kết hợp bộ nhớ trong Multicore

Trong Multicore, các core có thể có các bộ nhớ Cache riêng hay chia sẻ bộ
nhớ Cache với nhau. Hình 13, minh họa các cách kết hợp bộ nhớ Cache trong
Multicore.
Khi kết hợp với bộ nhớ cache, trong hệ thống nảy sinh ra vấn đề cần phải
đồng bộ dữ liệu nếu có nhiều luồng cùng tác động đến một biến. Để hiểu rõ vấn đề
này chúng ta hãy theo dõi một ví dụ.
Ta có một chiếc máy tính 4 core và sử dụng kiến trúc phân cấp bộ nhớ, trong
bộ nhớ chính đang lưu một biến x = 15213.

Hình 14. Xung đột dữ liệu trong Multicore


13


Core 1 và Core 2 cùng sử dụng x và chúng đọc x vào bộ nhớ cache riêng của
chúng.

Hình 15. Xung đột dữ liệu trong Multicore

Core 1 đọc x từ Cache và tính toán, lưu tra lại kết quả x = 21660 vào bộ nhớ
Cache của nó và bộ nhớ chính.

Hình 16. Xung đột dữ liệu trong Multicore

Một lúc sau, Core 2 muốn sử dụng đến x, nó đọc x từ Cache của nó nhưng
chỉ đọc được kết quả cũ x = 15213. Đến đây, rõ ràng cần phải có giải pháp để đồng
bộ hóa dữ liệu.

14


Hình 17. Xung đột dữ liệu trong Multicore

Có hai phương pháp đơn giản để giải quyết vấn đề này là phương pháp vô
hiêu hiệu hóa và phướng pháp cập nhật. Chúng ta sẽ lần lượt tìm hiểu hai phương
pháp này.
Phương pháp vô hiệu hóa:
Cách xử lý của phương pháp này có thể mô tả như sau. Sau khi một core thực
hiện tính toán một biến nào đó nó sẽ lưu trả lại kết quả vào bộ nhớ cache của nó và
bộ nhớ chính đồng thời gửi thông báo đến cache của các core khác thông báo dữ
liệu đã được cập nhật. Dữ liệu cũ trong các cache được xóa đi và sẽ được cập nhật

lại.

Hình 18. Phương pháp vô hiêu hóa dữ liệu

15


Hình 19. Phương pháp vô hiêu hóa dữ liệu

Hình 20. Phương pháp vô hiêu hóa dữ liệu

Phương pháp cập nhật:
Cách xử lý của phương pháp này có thể mô tả như sau. Sau khi một core thực
hiện tính toán một biến nào đó nó sẽ lưu trả lại kết quả vào bộ nhớ cache của nó và
bộ nhớ chính đồng thời gửi dữ liệu đó đến cache của các core khác và chúng sẽ cập
nhật giá trị mới này.
16


Hình 21. Phương pháp cập nhật dữ liệu

So sánh phương pháp vô hiệu hóa và phương pháp cập nhật
 Phương pháp cập nhật sử dụng nhiều đường bus dữ liệu, mỗi lần cập nhật
nó sẽ đưa dữ liệu đến tất cả các core, như vậy sẽ dễ gây tắc nghẽn bus.
 Phương pháp vô hiệu hóa nói chung sẽ tốt hơn phương pháp cập nhật, nó
chỉ gửi thông báo vô hiệu hóa dữ liệu và core nào cần sử dụng đến dữ liệu
sẽ tự truy cập lại bộ nhớ để đọc dữ liệu mới về cache của nó.
Ngoài các phương pháp trên còn có các phương pháp khác như: MSI, MESI
(Modified, Exclusive, Shared, Invalid).


4. Hệ điều hành và chương trình trong Multicore
Các chương trình muốn khai thác tốt kiến trúc Multicore phải được chia
thành nhiều luồng và phải được hệ điều hành hỗ trợ. Ngày nay, hầu hết các hệ điều
hành phổ biến đã hỗ trợ Multicore. Trong các hệ điều hành, các chương trình sẽ
được hệ điều hành cấp phép để được sử dụng các core. Các hệ điều hành dùng một
khái niệm gọi là “Affinity masks” để thực hiện viêc cấp phép cho các chương trình.
Mỗi một chương trình sẽ có một chuỗi các bit “Affinity masks” tương ứng với số
core của CPU. Nếu bit “Affinity masks” của một core nào đó bằng 1 thì có nghĩa là
chương trình được phép sử dụng core đó, còn ngược lại nó không được cấp phép.
Ví dụ: một máy tính có 4 core và không có Hyper Threading. Hệ điều hành
sẽ sử dụng một chuỗi 4 bit để cấp phép cho từng ứng dụng. Trong ví dụ trên hình

17


22, ứng dụng sẽ được cấp phép sử dụng core 0, core 2, core 3, còn core 1 nó không
được sử dụng.

Hình 22. Ví dụ về Affinity masks không có Hyper Threading

Nếu máy tính có Hyper Threading thì hệ điều hành cũng sẽ có các bit
“Affinity masks” để cấp phép sử dụng cho mỗi core ảo. Trong ví dụ trên hình 23,
ứng dụng được cấp phép sử dụng cả hai core ảo thuộc core 0, core 3 và sử dụng
core ảo thứ 2 của core 1.

Hình 23. Ví dụ về Affinity masks có Hyper Threading

Trên hệ điều hành window, các ứng dụng mặc định sẽ được hệ điều hành cấp
phép sử dụng tất cả các core. Để thay đổi điều này, ta có thể vào Task Manager,
chọn Process và set Affinity cho các process.


18


Hình 24. Set affinity trong Window

Hình 24, minh họa cách set affinity trong Window. Nhưng chúng ta không
nên thay đổi các thiết lập của hệ điều hành nếu không có một lý do cụ thể.
Trong các chiếc máy tính sử dụng công nghệ Multicore thì hệ điều hành
đóng một vài trò rất quan trọng, nó giống như một người quạn trị hệ thống lên lịch
sử dụng các nguồn tài nguyên cho các nhân viên của mình là các chương trình ứng
dụng.
Nói tóm lại, để khai thác được hết hiệu quả Multicore ta cần phải có một hệ
điều hành hỗ trợ tốt công nghệ này và các chương trình được viết riêng.

19


5. Kết Luận
Qua quá trính tìm hiểu về Multicore, có thể nó rằng đây là một giải pháp tốt
để giải quyết bài toán đa nhiệm. Khi mà nhu cầu thực hiện các tác vụ song song của
người dùng ngày càng tăng nhanh thì hiệu quả của công nghệ này đem lại càng
được khẳng định. Cho dù các chương trình ứng dụng hỗ trợ tốt cho Multicore là khó
viết hơn so với thông thường. Nhưng với nhưng ưu điểm vượt trội kể trên thì
Multicore hứa hẹn sẽ là một xu hướng cộng nghệ phát triển mạnh mẽ trong tương
lai.

20




×