Kích thước dòng của bộ nhớ đệm L1 và L2


78

Từ một câu hỏi trước trên diễn đàn này, tôi đã biết rằng trong hầu hết các hệ thống bộ nhớ, bộ nhớ đệm L1 là một tập con của bộ đệm L2 có nghĩa là bất kỳ mục nhập nào bị xóa khỏi L2 cũng bị xóa khỏi L1.

Vì vậy, bây giờ câu hỏi của tôi là làm cách nào để xác định một mục nhập tương ứng trong bộ đệm L1 cho một mục nhập trong bộ đệm L2. Thông tin duy nhất được lưu trữ trong mục nhập L2 là thông tin thẻ. Dựa trên thông tin thẻ này, nếu tôi tạo lại trình bổ sung, nó có thể kéo dài nhiều dòng trong bộ đệm L1 nếu kích thước dòng của bộ đệm L1 và L2 không giống nhau.

Kiến trúc có thực sự bận tâm về việc xóa cả hai dòng hay nó chỉ duy trì bộ đệm L1 và L2 với cùng kích thước dòng.

Tôi hiểu rằng đây là một quyết định chính sách nhưng tôi muốn biết kỹ thuật thường được sử dụng.


Có bộ xử lý với kích thước dòng khác nhau cho L1 và L2 không?
Oliver Charlesworth

3
Pentium 4 ban đầu có dòng cache L1 64 byte và dòng cache L2 128 byte.
Paul R

ai đó có thể nhận xét về kiến ​​trúc nehalem ??? Tôi đã xem qua một bài báo về "Tổ chức bộ nhớ đệm và quản lý bộ nhớ của kiến ​​trúc máy tính Intel Nehalem". Ở đây họ chỉ đề cập đến kích thước dòng bộ nhớ cache một lần (64 byte) ??
prathmesh.kallurkar

1
@PaulR: Pentium 4 có bộ nhớ đệm L1 và L2 độc lập. Tôi sẽ tưởng tượng các thiết kế yêu cầu bộ đệm L1 là một tập hợp con của bộ đệm L2 sẽ giữ nguyên kích thước dòng.
David Schwartz

Nếu bạn đang chạy trên x86, lệnh CPUID trả về thông tin kích thước dòng bộ đệm ẩn cuối cùng. Google cho CPUID và kích thước dòng bộ nhớ cache cho một số ví dụ đẹp.
srking.

Câu trả lời:


79

Trong core i7, kích thước dòng trong L1, L2 và L3 là như nhau: đó là 64 Byte. Tôi đoán điều này đơn giản hóa việc duy trì thuộc tính bao gồm và tính liên kết.

Xem trang 10 của: https://www.aristeia.com/TalkNotes/ACCU2011_CPUCaches.pdf


1
Vẫn còn phải biết tính liên kết của bộ nhớ cache là gì.
Felix Crazzolara

@FelixCrazzolara: Điều đó thay đổi tùy theo CPU. Xem en.wikichip.org/wiki/intel/microarchitectures/skylake_(client) chẳng hạn. Ngoài ra Kỹ thuật ánh xạ bộ nhớ cache nào được sử dụng trong bộ xử lý intel core i7? có một số chi tiết về chính sách bộ nhớ cache (như L3 bao gồm) và một vài ví dụ cụ thể trong Tại sao kích thước của bộ nhớ cache L1 nhỏ hơn kích thước của bộ nhớ cache L2 trong hầu hết các bộ xử lý?
Peter Cordes

82

Kích thước Cache-Lines là (thường) 64 byte.

Hơn nữa, hãy xem bài viết rất thú vị này về bộ nhớ đệm của bộ xử lý: Thư viện hiệu ứng bộ nhớ đệm của bộ xử lý

Bạn sẽ tìm thấy các chương sau:

  1. Truy cập bộ nhớ và hiệu suất
  2. Tác động của dòng bộ nhớ cache
  3. Kích thước bộ nhớ cache L1 và L2
  4. Song song cấp hướng dẫn
  5. Tính liên kết bộ nhớ cache
  6. Chia sẻ dòng bộ nhớ cache sai
  7. Phần cứng phức tạp

22
+1 cho liên kết. Tôi thường không theo dõi các liên kết từ các câu trả lời của SO và ưa thích sự cô đọng trong dòng. May mắn thay, lần này tôi đã làm theo nó, và nó chắc chắn là giá trị!
Davide

25

Kỹ thuật phổ biến nhất để xử lý kích thước khối bộ nhớ cache trong hệ thống phân cấp bộ đệm bao gồm nghiêm ngặt là sử dụng các khối bộ đệm có cùng kích thước cho tất cả các cấp bộ đệm mà thuộc tính bao gồm được thực thi. Điều này dẫn đến chi phí thẻ lớn hơn nếu bộ nhớ đệm cấp cao hơn sử dụng các khối lớn hơn, không chỉ sử dụng diện tích chip mà còn có thể làm tăng độ trễ vì bộ nhớ đệm cấp cao hơn thường sử dụng quyền truy cập theo giai đoạn (nơi các thẻ được kiểm tra trước khi phần dữ liệu được truy cập). Tuy nhiên, nó cũng đơn giản hóa thiết kế phần nào và giảm dung lượng lãng phí từ các phần dữ liệu không sử dụng. Không cần một phần lớn các khối 64 byte chưa sử dụng trong các khối bộ nhớ đệm 128 byte để bù đắp cho hình phạt khu vực của thẻ 32 bit bổ sung. Ngoài ra, hiệu ứng khối bộ nhớ cache lớn hơn của việc khai thác vị trí không gian rộng hơn có thể được cung cấp bằng cách tìm nạp trước tương đối đơn giản,

Một kỹ thuật ít phổ biến hơn chia khối bộ nhớ cache thành các cung. Có kích thước khu vực giống như kích thước khối cho các bộ nhớ đệm cấp thấp hơn sẽ tránh được vấn đề làm mất hiệu lực ngược quá mức vì mỗi khu vực trong bộ nhớ đệm cấp cao hơn có bit hợp lệ riêng của nó. (Việc cung cấp tất cả siêu dữ liệu trạng thái mạch lạc cho mỗi khu vực thay vì chỉ hợp lệ có thể tránh sử dụng băng thông ghi ngược quá mức khi ít nhất một khu vực trong một khối không bị bẩn / sửa đổi và một số chi phí liên kết [ví dụ: nếu một khu vực ở trạng thái chia sẻ và một khu vực khác thì ở trạng thái độc quyền, việc ghi vào khu vực ở trạng thái độc quyền có thể không liên quan đến lưu lượng truy cập mạch lạc — nếu sử dụng tính năng rình mò thay vì tính nhất quán của thư mục].)

Việc tiết kiệm diện tích từ các khối bộ nhớ đệm được phân loại đặc biệt đáng kể khi các thẻ nằm trên chip xử lý nhưng dữ liệu lại nằm ngoài chip. Rõ ràng, nếu bộ lưu trữ dữ liệu có diện tích tương đương với kích thước của chip xử lý (điều này không phải là không hợp lý), thì các thẻ 32 bit với khối 64 byte sẽ chiếm khoảng 16 (~ 6%) diện tích bộ xử lý trong khi 128- khối byte sẽ chiếm một nửa. (POWER6 + của IBM, được giới thiệu vào năm 2009, có lẽ là bộ xử lý gần đây nhất sử dụng thẻ trên chip xử lý và dữ liệu ngoài bộ xử lý. Lưu trữ dữ liệu trong DRAM nhúng mật độ cao hơn và thẻ trong SRAM mật độ thấp hơn, như IBM đã làm, phóng đại điều này hiệu ứng.)

Cần lưu ý rằng Intel sử dụng "dòng bộ nhớ cache" để chỉ đơn vị nhỏ hơn và "khu vực bộ nhớ cache" cho đơn vị lớn hơn. (Đây là một lý do tại sao tôi sử dụng "khối bộ nhớ cache" trong phần giải thích của mình.) Sử dụng thuật ngữ của Intel, sẽ rất bất thường khi các dòng bộ nhớ cache có kích thước khác nhau giữa các cấp bộ nhớ cache bất kể các cấp đó hoàn toàn bao gồm, hoàn toàn độc quyền hay được sử dụng một số chính sách bao gồm khác.

(Loại trừ nghiêm ngặt thường sử dụng bộ nhớ cache cấp cao hơn làm bộ nhớ cache nạn nhân, nơi các trục xuất từ ​​bộ nhớ cache cấp thấp hơn được chèn vào bộ nhớ cache cấp cao hơn. Rõ ràng, nếu kích thước khối khác nhau và không sử dụng sectoring, thì việc trục xuất sẽ yêu cầu phần còn lại khối lớn hơn sẽ được đọc từ một nơi nào đó bị vô hiệu nếu có trong bộ nhớ cache cấp thấp hơn. [ Về mặt lý thuyết , loại trừ nghiêm ngặt có thể được sử dụng với việc bỏ qua bộ nhớ cache không linh hoạt trong đó việc loại bỏ L1 sẽ bỏ qua L2 và đi đến L3 và các lần bỏ sót bộ nhớ cache L1 / L2 sẽ chỉ là phân bổ cho một trong hai L1 hoặcL2, bỏ qua L1 cho các truy cập nhất định. Gần nhất với điều này đang được triển khai mà tôi biết là việc Itanium bỏ qua L1 cho các truy cập dấu phẩy động; tuy nhiên, nếu tôi nhớ lại chính xác, L2 đã bao gồm L1.])


2

Thông thường, trong một lần truy cập vào bộ nhớ chính, 64 byte dữ liệu và 8 byte chẵn lẻ / ECC (tôi không nhớ chính xác) được truy cập. Và việc duy trì các kích thước dòng bộ nhớ cache khác nhau ở các mức bộ nhớ khác nhau là khá phức tạp. Bạn phải lưu ý rằng kích thước dòng bộ nhớ cache sẽ tương quan với kích thước căn chỉnh từ trên kiến ​​trúc đó hơn bất kỳ thứ gì khác. Dựa vào đó, kích thước dòng bộ nhớ cache rất khó có thể khác với kích thước truy cập bộ nhớ. Bây giờ, các bit chẵn lẻ được sử dụng cho bộ điều khiển bộ nhớ - vì vậy kích thước dòng bộ nhớ cache thường là 64 byte. Bộ xử lý thực sự kiểm soát rất ít ngoài các thanh ghi. Mọi thứ khác đang diễn ra trong máy tính chủ yếu là đưa phần cứng vào để tối ưu hóa hiệu suất CPU. Theo nghĩa đó,

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.