PDA

View Full Version : T́m hiểu cách làm việc của bộ nhớ Cache (Phần cuối)


bossnabito
08-03-2008, 01:54 AM
http://3c.com.vn/Uploaded/minhpb/2008-03/Kienthucmaytinh/07.03/TimhieubonhoCache%28phancuoi%29/images.jpgTập Cache liên kết n ḍng
Trong cấu h́nh này, Cache nhớ được chia thành một vài khối (các tập), mỗi khối gồm có “n” ḍng.

Một tập 4 ḍng Cache liên kết th́ Cache nhớ sẽ có 2.048 khối, mỗi khối gồm có 4 ḍng (8.192 ḍng / 4), với tập 2 ḍng Cache liên kết th́ Cache nhớ sẽ có 4.096 khối, mỗi khối gồm 2 ḍng. Chúng ta sẽ tiếp tục ví dụ với Cache nhớ L2 512 KB, Cache nhớ này sẽ chia thành 8.192 ḍng, mỗi ḍng 64-byte. Phụ thuộc vào CPU mà số khối có thể khác nhau.
http://3c.com.vn/Uploaded/minhpb/2008-03/Kienthucmaytinh/07.03/TimhieubonhoCache%28phancuoi%29/map-1.jpg
H́nh 7: Cache nhớ L2 512 KB khi được cấu h́nh thành một tập 4 ḍng liên kết
Khi bộ nhớ RAM được chia thành các khối bằng nhau trong Cache nhớ. Vẫn ví dụ tập 4 ḍng 512 KB liên kết, RAM chính sẽ được chia thành 2.048 khối nằm trong Cache nhớ. Mỗi khối nhớ lại được liên kết đến một tập các ḍng bên trong Cache, giống như trong Cache đă được bản đồ hóa trực tiếp. Với 1GB, bộ nhớ sẽ được chia thành 2.048 khối, mỗi khối 512KB, bạn có thể xem trong h́nh 8.
http://3c.com.vn/Uploaded/minhpb/2008-03/Kienthucmaytinh/07.03/TimhieubonhoCache%28phancuoi%29/map-2.jpg
H́nh 8: Cache nhớ L2 512 KB được cấu h́nh thành một tập 4 ḍng liên kết
Như những ǵ bạn có thể thấy được, việc bản đồ hóa là hoàn toàn giống với những ǵ xảy ra với Cache được bản đồ hóa trực tiếp, sự khác biệt ở đây là mỗi một khối nhớ hiện có nhiều ḍng trên cùng một Cache. Mỗi một ḍng lại giữ nhiều nội dung từ các địa chỉ bên trong các khối đă được bản đồ hóa. Trên tập 4 ḍng liên kết, mỗi tập trên Cache nhớ có thể giữ đến 4 ḍng từ cùng một khối nhớ.

Với phương pháp này, các vấn đề gặp phải đối với phương pháp bản đồ hóa trực tiếp không c̣n nữa (cả các vấn đề xung đột do ṿng lặp mà chúng ta đă mô tả trên). Ở đây, tập Cache liên kết dễ dàng thực thi hơn so với Cache liên kết toàn bộ, v́ logic điều khiển của nó đơn giản hơn. V́ điều đó mà phương pháp này được sử dụng nhiều ngày nay, mặc dù nó cung cấp hiệu suất thấp hơn so với cách liên kết toàn bộ.

Rơ ràng chúng ta vẫn có một số lượng hạn chế các khe bên trong mỗi một tập Cache nhớ đối với mỗi một khối nhớ - 4 trên cấu h́nh 4 ḍng. Sau khi 4 khe này được sử dụng, bộ điều khiển Cache sẽ phải giải phóng một trong số chúng để lưu chỉ lệnh kế tiếp đă được nạp từ cùng khối nhớ.

Khi chúng ta tăng số ḍng th́ Cache nhớ tập liên kết (ví dụ với cấu h́nh 4 hoặc 8) sẽ có nhiều khe có sẵn hơn trên mỗi tập, tuy nhiên nếu giữ nguyên số lượng của Cache nhớ th́ kích thước của mỗi khối nhớ cũng sẽ tăng. Tiếp tục ví dụ của chúng ta, việc chuyển từ 4 ḍng sang 8 ḍng sẽ làm cho bộ nhớ 1GB RAM có thể được chia thành 1.024 khối 1MB. V́ vậy cách làm này sẽ tăng số khe có sẵn trên mỗi một tập nhưng mỗi tập lúc này phải chịu trách nhiệm với một khối nhớ lớn hơn.

Có rất nhiều thảo luận trừu tượng liên quan đến việc cân bằng hoàn hảo giữa số các tập và kích thước khối nhớ và tất cả đều chưa có câu trả lời thích đáng - Intel và AMD cũng sử dụng các cấu h́nh khác nhau, bạn có thể xem trong bảng bên dưới.

Vậy điều ǵ sẽ xảy ra nếu chúng ta có một Cache nhớ lớn? Vẫn giữ ví dụ ở trên, nếu chúng ta tăng Cache nhớ L2 từ 512 KB thành 1MB (chỉ có một cách thực hiện là thay thế một CPU mới), th́ điều xảy ra là chúng ta sẽ có 16.384 ḍng 64 byte trong Cache nhớ, điều đó cho chúng ta có đến 4.096 tập và mỗi tập có 4 ḍng. Bộ nhớ 1MB RAM của chúng ta sẽ được chia thành 4.096 khối 256MB. V́ vậy về cơ bản những ǵ xảy ra là kích thước của mỗi khối nhớ giảm hơn và tăng số lần dữ liệu được yêu cầu nằm bên trong Cache nhớ - hay nói cách khác, tăng kích thước Cache sẽ làm giảm được tốc độ miss đối với Cache.

Tuy vậy, việc tăng Cache nhớ không phải là điều bảo đảm cho việc tăng hiệu suất. Tăng kích thước của bộ nhớ Cache chỉ cho phép có nhiều hơn dữ liệu được lưu trữ nhưng một câu hỏi đặt ra là liệu CPU sẽ sử dụng dữ liệu mở rộng đó hay không. Ví dụ, cho một CPU một lơi có Cache L2 4MB. Nếu CPU sử dụng nghiêng về 1MB là chủ yếu c̣n không quá nặng về phía 3MB kia (nghĩa là hầu hết các chỉ lệnh đă truy cập sẽ chiếm 1MB và trên 3 MB kia CPU đă chứa các chỉ lệnh không được gọi đến nhiều), lúc này CPU sẽ có hiệu suất giống với một CPU chỉ có 2 MB hoặc thậm chí Cache nhớ L2 1MB.