2012-07-05 22 views
9

Tôi có một chút khó khăn bởi vì tôi không thể tìm thấy bất cứ điều gì mà bao gồm phần "dữ liệu" của bộ nhớ cache, tất cả mọi thứ mà tôi đã googled giao dịch 99,9% với địa chỉ của bộ nhớ cache. Câu hỏi mà tôi được hỏi được diễn đạt như vậyDung lượng "bit dữ liệu" so với kích thước "overhead bit"?

 
Contrast the difference between "data bit" capacity and "overhead bit" size 
for the two caches. 

Tôi không muốn câu trả lời nên tôi sẽ không đăng kích thước thực tế và không, tôi chỉ đang tìm hướng đến một trang web hoặc một lời giải thích làm thế nào để "tương phản" hai. Bất kỳ sự giúp đỡ nào có thể được đánh giá cao!

+4

Cách tốt nhất để tìm hiểu là yêu cầu hướng và không phải là câu trả lời –

Trả lời

2

Tôi không chắc chắn bạn đã cung cấp cho chúng tôi đủ ngữ cảnh cho câu hỏi này, nhưng ở đây đi.

Bộ nhớ lưu trữ không chỉ lưu trữ dữ liệu được lưu trong bộ nhớ cache thực tế mà còn cho mọi phần dữ liệu - "chỉ mục" mà nó đề cập đến. Vì vậy, khi bạn tra cứu bản ghi N, bộ nhớ cache phải giữ không chỉ giá trị của bản ghi N, mà còn N - để bạn thực sự có thể tìm kiếm dữ liệu. Và đó là một cách khá đơn giản khi nhìn vào nó. Caches có thể có siêu dữ liệu khác để chỉ hiệu lực và thời gian truy cập cuối cùng vv

Ví dụ 1: một bộ nhớ cache của byte trong một không gian địa chỉ 32-bit

Mỗi mục bộ nhớ cache có để lưu trữ các giá trị dữ liệu (8 bit) cộng với địa chỉ (32bits) = 40 bit,

Ví dụ # 2: một bộ nhớ cache của các từ 32 bit trong một không gian địa chỉ 32-bit nhập

Mỗi bộ nhớ cache có để lưu trữ các giá trị dữ liệu (32 bit) cộng với địa chỉ (32 bit) = 64 bit,

Bạn có thể thấy ví dụ số 1 này có chi phí cao hơn đáng kể.

Như mọi khi, Wikipedia có thể trợ giúp. http://en.wikipedia.org/wiki/Cache_(computing)

+0

Khi chúng tôi xác định không gian địa chỉ bộ nhớ 32 bit, nó sẽ luôn là 32 byte + datasize? –

+0

@ user1260028 - tốt, không. Không gian địa chỉ 32 bit sẽ giữ 2^32 byte == 2^30 ints - vì vậy bạn có thể chỉ cần 30 bit trong trường hợp đó. tùy thuộc vào cách bộ nhớ cache của bạn hoạt động. Cộng thêm các bit cờ ... – Roddy

1

Vì bạn đã gắn thẻ kiến ​​trúc máy tính và tôi giả sử đây là tác vụ mà bạn được yêu cầu tạo bộ nhớ cache "trình mô phỏng" trong C hoặc thứ gì đó sắp xếp. Và rằng "hai cache" trong câu hỏi đề cập đến hai loại khác nhau của bộ nhớ đệm (đầy đủ liên kết, n-way, ánh xạ trực tiếp ..). Trong phạm vi đó, câu hỏi yêu cầu bạn thảo luận về sự khác biệt giữa hai loại cache và chủ yếu là tỷ lệ giữa kích thước 'overhead bit', đây là thông tin mà cache cần cho các mục cache (bit hợp lệ, offset, tag) và " bit dữ liệu "là dữ liệu thực được lưu trữ trong dòng bộ nhớ cache. Tôi hy vọng điều này sẽ hữu ích.

2

Lưu trữ dữ liệu lưu trữ, thường trong SRAM như mảng dữ liệu, nhưng cũng có phí. Tôi không đặc biệt thích các thuật ngữ "kích thước bit dữ liệu" và "kích thước bit trên cao", bởi vì (a) có chi phí không phải là ô lưu trữ bit, và (b) không phải tất cả các ô bit đều tốn kém như nhau. Nhưng chúng ta hãy đi cùng với các điều khoản cho bây giờ.

Việc chụp của tôi là "kích thước bit trên cao" có thể đề cập đến số bit thẻ cần được lưu trữ để truy cập bộ nhớ cache. Thông thường chúng được lưu trữ trong một mảng khác nhau, một mảng thẻ tách biệt với mảng dữ liệu. So sánh với số bit dữ liệu.

Dưới đây là ba ví dụ đơn giản:

Xem xét bộ nhớ cache 32 KiB (kilobyte), với 64 dòng bộ nhớ cache (B). Thông thường, chúng tôi sẽ để bit 0-5 của địa chỉ được bù đắp dòng bộ nhớ cache.

32 KiB/(64 B/dòng) => 2^(5 + 10)/2^6 => 2^9 => 512 dòng bộ nhớ cache.

--- ++ Ví dụ 1: Direct Mapped

Chúng ta hãy tưởng tượng rằng đó là một bộ nhớ cache ánh xạ trực tiếp. Sau đó, chúng tôi có thể mất 9 bit tiếp theo, bit 6-14 của địa chỉ, như là một "chỉ mục" vào mảng của dòng bộ nhớ cache.

Cho đến nay rất tốt. Bây giờ, để tìm ra thẻ, chúng ta cần biết chiều rộng địa chỉ đầy đủ. Chúng ta hãy nói rằng nó là 64 bit (mặc dù hầu hết các máy "64-bit" chỉ thực hiện 40 hoặc 48 bit vào năm 2012). Để phân biệt một dòng bộ nhớ cache từ bất kỳ dòng bộ nhớ cache nào khác ánh xạ tới cùng một mục trong bộ đệm, chúng ta cần lưu trữ các bit còn lại của địa chỉ, bit 15-63, 49 bit, làm thẻ.

Quyền truy cập vào bộ nhớ cache được ánh xạ trực tiếp sau đó tiến hành bằng cách trích xuất chỉ mục, đọc thẻ và dữ liệu với chỉ mục đó, so sánh thẻ đọc với thẻ của địa chỉ mà chúng tôi đang tra cứu. phù hợp và bỏ lỡ nếu không, và như vậy.

Chi phí: 49 bit thẻ cho mỗi 64B (512 bit) dữ liệu.

Tổng số: * thẻ hoặc "trên cao": 512 * 49 bit * bit dữ liệu: 512 * 512 = 32KiB = 256 Kib (kibi-bit).

--- ++ Ví dụ 2: Liên kết thiết lập 8 chiều

Bây giờ, hãy tưởng tượng rằng bộ nhớ cache là 8 cách kết hợp. Điều này có nghĩa là các dòng 512 sẽ được chia thành 512/8 = 64 bộ, mỗi dòng chứa 8 dòng.

Khoảng trống bên trong một dòng bộ nhớ cache vẫn là bit 0-5.

Tuy nhiên, hiện tại chúng tôi chỉ cần 6 bit làm chỉ mục, để xác định số tập hợp. Các bit 6-11.

Thẻ cần phải là tất cả các bit còn lại, bit 12-63, 52 bit tổng.

Vì vậy, chi phí của thẻ cho bộ nhớ cache kết hợp 8 chiều là 52 bit thẻ cho 512 bit dữ liệu.

Tổng số: * tag: 512 * 52 bit * dữ liệu: 512 KiB

So với 49 bit của thẻ cho trực tiếp ánh xạ. 8-cách thiết lập liên kết về cơ bản di chuyển log2 (8) bit hơn vào thẻ; nói chung, N-way set associative chuyển các bit ceil (log2 (N)) vào thẻ.

--- ++ Ví dụ 3: Liên kết đầy đủ

Đây là đầu xa của phổ từ ánh xạ trực tiếp. Chúng tôi vẫn có 512 bit dữ liệu trên mỗi dòng bộ nhớ cache, nhưng bây giờ toàn bộ địa chỉ 64 bit, ngoại trừ bù đắp 6 bit, là thẻ. 58 bit của thẻ cho kết hợp đầy đủ, so với 52 bit cho 8 chiều, so với 49 bit cho ánh xạ trực tiếp.

Nhưng hãy nhớ tôi đã nói rằng tôi không thích cụm từ "bit trên cao"? Các bit thẻ trong bộ nhớ cache kết hợp hoàn toàn thường không chỉ là các bit lưu trữ thông thường mà còn phải có các bộ so sánh - về cơ bản là các cổng XOR. Các bit "CAM (Bộ nhớ địa chỉ nội dung)" thường đắt hơn các bit thông thường.

--- + Kết luận

Vì vậy, tôi nghĩ đây là những gì giáo viên của bạn muốn: so sánh đơn giản bit dữ liệu so với bit thẻ. Đây là một ràng buộc thấp hơn trên đầu.

Quang phổ từ ánh xạ trực tiếp thông qua liên kết thiết lập N-way đến liên kết đầy đủ cung cấp một ví dụ. Nhưng có những khía cạnh khác của thiết kế bộ nhớ cache ảnh hưởng đến overhead. Ví dụ:

  • nếu bạn sử dụng các kích thước địa chỉ khác nhau, phần trăm thay đổi trên không. Ví dụ. Địa chỉ 32 bit sẽ chỉ có 17 bit thẻ trong ví dụ được ánh xạ diredt, so với 49 bit cho địa chỉ 64 bit.

  • nếu bạn thay đổi chức năng lập chỉ mục bộ nhớ cache, bạn có thể phải thay đổi kích thước thẻ. Ví dụ: có một số lợi ích khi có số lượng dòng bộ nhớ cache chính hoặc tập hợp trong bộ nhớ cache, ví dụ: 511 dòng thay vì 512 cho bộ nhớ cache được ánh xạ trực tiếp. Số nguyên tố như thế này đã làm giảm các vấn đề cộng hưởng. Nhưng thực hiện đơn giản, họ yêu cầu tăng chiều rộng thẻ đến toàn bộ chiều rộng 58 bit.

  • các sơ đồ như bộ nhớ cache theo ngành cho phép chia sẻ một số phần của thẻ.

Và cứ tiếp tục như vậy.

Đối với một trang web hướng dẫn:

  • xin lỗi, tôi không biết một cho những thứ mới bắt đầu như vậy. Nhưng tôi sẽ google cho các ghi chú lớp học từ nhiều trường đại học.

  • trang web của tôi, http://comp-arch.net, bao gồm các chủ đề nâng cao trong kiến ​​trúc máy tính. Nhưng loại điều này quá cơ bản, quá sơ cấp, đối với tôi để đưa vào comp.arch. Mặc dù tôi cho rằng tôi có lẽ nên viết một số giải thích đơn giản về những điều cơ bản trước khi chuyển sang các chủ đề nâng cao. Thỉnh thoảng tôi viết hướng dẫn như vậy, như ở đây, nhưng tôi đã không thu thập chúng.

  • Tổ chức nhóm tin của USEnet có thể hữu ích.

--- + Tại sao điều này lại quan trọng đối với người lập trình trên stackoverflow?

Đây chủ yếu là chủ đề phần cứng.

Nhưng lập trình viên điều chỉnh mã cần phải hiểu những thứ như thế này, để có được hiệu suất tốt nhất.

Các vấn đề liên quan