Tại sao bộ nhớ cache CPU nhanh như vậy?


58

Điều gì làm cho bộ nhớ cache CPU nhanh hơn nhiều so với bộ nhớ chính? Tôi có thể thấy một số lợi ích trong một hệ thống bộ đệm tầng. Nó có ý nghĩa rằng một bộ đệm nhỏ hơn là nhanh hơn để tìm kiếm. Nhưng phải có nhiều hơn cho nó.


2
Bạn có ý nghĩa gì bởi bộ nhớ chính ?
marcocs

1
@marcocs chỉnh sửa cho rõ ràng. Tôi đang đề cập đến bộ nhớ bộ đệm CPU và bộ nhớ hệ thống chính, tức là các dimms có thể tháo rời trên hầu hết các bo mạch chủ.
Điều


2
@ratchetfreak Uh ... OP khá rõ ràng yêu cầu nguyên nhân gần đúng, không phải là nguyên nhân cuối cùng.
Kyle Strand

1
Wow tôi đã không nghĩ rằng mình sẽ sử dụng bằng kỹ sư máy tính của mình. Câu trả lời được chấp nhận không thực sự là một câu trả lời. Đó là do bộ đệm CPU hoạt động ở tốc độ xung nhịp cao hơn nhiều (tốc độ xung nhịp CPU, khoảng 4GHz), trong khi bộ nhớ chính hoạt động ở tốc độ xung nhịp bus (khoảng 1600 MHz). Không chỉ vậy, bộ đệm CPU có thể đọc trong 4 chu kỳ xung nhịp, nhưng RAM hệ thống có thể mất 100 chu kỳ xung nhịp hệ thống. Ngoài ra, RAM hệ thống có sự tranh chấp với các thiết bị ngoại vi khác như đĩa hoặc mạng, trong khi bộ đệm CPU được dành riêng. Dây càng dài, tốc độ xung nhịp có thể hoạt động càng chậm. tinyurl.com/zkdsstd
Chloe

Câu trả lời:


115

Trong trường hợp bộ đệm CPU, nó nhanh hơn vì nó cùng bộ xử lý. Nói cách khác, dữ liệu được yêu cầu không phải được đưa vào bộ xử lý; nó đã ở đó

Trong trường hợp bộ nhớ cache trên ổ cứng, nó nhanh hơn vì nó ở bộ nhớ trạng thái rắn và không nằm trên các đĩa xoay.

Trong trường hợp bộ đệm trên một trang web, nó nhanh hơn vì dữ liệu đã được truy xuất từ ​​cơ sở dữ liệu (trong một số trường hợp, có thể được đặt ở bất kỳ đâu trên thế giới).

Vì vậy, đó là về địa phương , chủ yếu. Cache loại bỏ bước chuyển dữ liệu .

Địa phương là một cách thú vị để nói dữ liệu "gần nhau", theo thời gian hoặc không gian. Bộ nhớ đệm với bộ nhớ nhỏ hơn, nhanh hơn (nhưng thường đắt hơn) hoạt động vì thông thường một lượng tương đối nhỏ của dữ liệu tổng thể là dữ liệu được truy cập thường xuyên nhất.

Đọc thêm
Cache (Điện toán) trên Wikipedia


29
Tôi nghĩ rằng đây là một câu trả lời tốt. Tuy nhiên, có thể đáng bổ sung rằng cũng có một hệ thống phân cấp chi phí cho bộ đệm: bộ nhớ mạng rẻ hơn ổ cứng cục bộ, rẻ hơn RAM, rẻ hơn nhiều so với bộ đệm trên CPU. Nếu không phải như vậy, chúng ta sẽ tạo ra CPU với 120GB bộ nhớ trên chip và được thực hiện với nó.
Charles E. Grant

1
@ConditionRacer: Lý do tương tự. L1 nhanh hơn, nhưng đắt hơn, vì vậy chúng cung cấp cho bạn một ít L1 rất đắt tiền, và nhiều hơn với L2 rẻ hơn, nhưng chậm hơn. Xem thêm stackoverflow.com/questions/3699582/ Mạnh
Robert Harvey

9
"Tại sao L1 nhanh hơn L2" - câu hỏi trở thành chủ đề không phù hợp với Lập trình
viên.SE

5
@ConditionRacer IIRC, nó liên quan đến công nghệ được sử dụng để thực hiện bộ nhớ. Tôi nghĩ L2 là DRAM trên chip, trong khi L1 là SRAM hoặc đại loại như thế; nhiều hơn đắt tiền, nhưng nhanh hơn nhiều. Đã hơn một thập kỷ kể từ khi tôi làm việc trong thiết kế CPU,
Donal Fellows

4
@ CharlesE.Grant: trong khi hệ thống phân cấp chi phí là một ví dụ tốt, có một lý do khác khiến chúng tôi không có bộ nhớ cache trên chip 120 GB: giải quyết bộ nhớ lớn hơn cần địa chỉ lớn hơn, do đó, hướng dẫn lớn hơn hoặc nhiều chu kỳ CPU hơn. Vì vậy, để nhanh nhất, số lượng thanh ghi cần duy trì tương đối nhỏ. Tất nhiên, người ta có thể có bộ nhớ trên chip ngoài các thanh ghi, nhưng tầng nhanh nhất phải duy trì ở mức nhỏ, nếu không thì nó sẽ không còn nhanh nữa.
vsz

33

Nó nhanh hơn vì cả hai đều gần hơn và vì nó là SRAM chứ không phải DRAM.

SRAM là và có thể nhanh hơn đáng kể so với DRAM, các giá trị được giữ tĩnh ( RAM S trong S ) để chúng không phải được làm mới mà lấy đi chu kỳ. DRAM rất năng động, giống như pin sạc nhỏ, bạn phải thường xuyên sạc lại pin để chúng không bị cạn kiệt và trở thành số không. Điều này đánh cắp thời gian chu kỳ ngoài cách bạn phải truy cập các bit, v.v.

Ở cùng một điểm chết hoặc gần hơn bộ xử lý làm giảm hành trình khứ hồi, cả L1 và L2 đều nhanh hơn DRAM từ góc độ truy cập.

SRAM truy cập nhanh hơn DRAM lấy táo và táo thường ở trên chip hoặc gần hơn hoặc trên các bus nhanh hơn DRAM khiến thời gian truy cập cũng nhanh hơn.


1
SRAM cũng ngốn nhiều năng lượng hơn trên mỗi bit, vì vậy bạn phải thêm bộ tản nhiệt vào nó, và bất cứ điều gì sử dụng pin sẽ phải chịu.
9000

1
Chưa kể đến việc làm cho SRAM lớn hơn làm cho nó chậm hơn.
Darkhogg

đồng ý, nhiều sức mạnh hơn và chậm hơn so với các sram khác. Tôi nghĩ rằng nó là 4 bóng bán dẫn mỗi bit cho sram và 1 mỗi bit cho kịch. kịch dựa vào điện dung trong bào thai, trong đó sram dựa vào logic lỗi thời. vì vậy bạn phải cấp nguồn cho tất cả các bóng bán dẫn đó mọi lúc và không chỉ bơm phí định kỳ.
old_timer

4
SRAM trong cache thường là 6T, không phải 4T. Ngoài ra, SRAM (chắc chắn là biến thể 6T) tiết kiệm năng lượng hơn. Sức mạnh thực sự trong DRAM là chu kỳ làm mới và SRAM không cần điều đó. Các bóng bán dẫn SRAM rút điện khi chuyển đổi, tụ DRAM bị rò rỉ mọi lúc. Nếu bạn thay thế nắp DRAM bị rò rỉ, bạn sẽ kết thúc bằng EEPROM nhưng điều đó không nhanh: nếu khó sạc điện, thì cũng khó để lấy ra theo cách thông thường.
MSalters

@dwelch CMOS FET không tiêu hao năng lượng nếu chúng ở trạng thái mở hoặc đóng, do đó, đối số về mức tiêu thụ điện là không hợp lệ. Hơn nữa, đó là chuyển đổi logic CMOS, khiến CPU tiêu hao phần lớn năng lượng của chúng - các đỉnh hiện tại ở trạng thái trung gian (không 1 và không 0), do đó, tình huống ngược lại với những gì bạn nói :)
Ruslan

21

Một điều cần được đề cập rõ ràng là tác động của tốc độ ánh sáng. Trong video này, Grace Hopper cho thấy một đoạn dây dài khoảng một feet, đó là khoảng cách mà tín hiệu điện có thể truyền đi trong một nano giây *. Nếu CPU hoạt động ở tần số 3GHz, thì có nghĩa là khoảng cách 4 "trên mỗi chu kỳ xung nhịp. Đây là giới hạn vật lý cứng đối với tốc độ truy cập bộ nhớ. Đây là một phần lớn lý do tại sao gần với CPU (như bộ đệm L1), cho phép bộ nhớ để được nhanh hơn.

EDIT * thực sự ánh sáng có thể đi được bao xa trong chân không, khoảng cách qua đồng / silicon là ít hơn.


2
Giới hạn cứng cho đồng. Đây là một điểm tốt, mặc dù vậy, tôi đã không xem xét bộ vi xử lý hiện đại nhanh đến mức nào.
Điều

@ConditionRacer Tôi vừa thêm một hiệu chỉnh, 11,8 inch là ánh sáng trong chân không.
Matthew Finlay

2
Bạn cần giảm một nửa số đó vì bạn cần một chuyến đi khứ hồi để lấy lại bộ nhớ. Vì vậy, nó chỉ là 5cm chứ không phải 10cm cho mỗi chu kỳ độ trễ trong chân không .
CodeInChaos

2
Tốc độ của ánh sáng là lý do tại sao đồng hồ bus bộ nhớ chính đã ngừng phát triển nhanh hơn vài năm trước (2000ish?) Nó không phải là hiệu ứng trực tiếp - nó phải làm với tín hiệu logic CMOS không còn là sóng vuông hoàn hảo nữa ở tần số bus - nhưng c cho thấy nổi bật trong toán học.
zwol

5

Các câu trả lời khác đã bao gồm tất cả các bit có liên quan: địa phương (và chi phí truyền dữ liệu liên quan, chiều rộng xe buýt và đồng hồ, v.v.); tốc độ ánh sáng (một lần nữa, liên quan đến chi phí chuyển nhượng và chiều rộng và thông lượng xe buýt); công nghệ bộ nhớ khác nhau (SRAM vs.DRAM). Tất cả điều này nhìn thấy trong ánh sáng của cân bằng chi phí / hiệu suất .

Một bit bị bỏ qua và nó chỉ được đề cập trong bình luận của Darkhogg: bộ nhớ cache lớn hơn có tốc độ truy cập tốt hơn nhưng độ trễ lâu hơn. Nhiều cấp độ của bộ đệm trong đó cũng được giới thiệu để giải quyết sự đánh đổi này.

Có một câu hỏi và câu trả lời xuất sắc về điểm này trên thiết bị điện tử SE

Từ các câu trả lời, đối với tôi, một điểm cần làm nổi bật là: logic thực hiện tất cả các hoạt động cần thiết cho việc đọc bộ đệm không đơn giản (đặc biệt là nếu bộ đệm được liên kết, giống như hầu hết các bộ đệm hiện nay). Nó đòi hỏi cổng và logic. Vì vậy, ngay cả khi chúng ta loại trừ chi phí và không gian chết

Nếu ai đó sẽ cố gắng thực hiện bộ đệm L1 lớn một cách lố bịch, logic thực hiện tất cả các hoạt động cần thiết cho việc đọc bộ đệm cũng sẽ trở nên lớn. Tại một số điểm, độ trễ lan truyền qua tất cả logic này sẽ quá dài và các hoạt động chỉ mất một chu kỳ đồng hồ trước đó sẽ phải được chia thành nhiều chu kỳ đồng hồ. Điều này sẽ tăng độ trễ.


5

Có rất nhiều điểm tốt được nêu ra trong các câu trả lời khác, nhưng một yếu tố dường như bị thiếu: độ trễ giải mã địa chỉ.

Sau đây là một sự đơn giản hóa lớn về cách giải mã địa chỉ bộ nhớ hoạt động, nhưng nó cho một ý tưởng tốt về lý do tại sao các chip DRAM lớn thường khá chậm.

Khi bộ xử lý cần truy cập bộ nhớ, nó sẽ gửi một lệnh tới chip bộ nhớ để chọn từ cụ thể mà nó muốn sử dụng. Lệnh này được gọi là Chọn Địa chỉ Cột (bây giờ chúng ta sẽ bỏ qua địa chỉ hàng). Bây giờ, chip bộ nhớ phải kích hoạt cột được yêu cầu, bằng cách gửi địa chỉ xuống một tầng các cổng logic để tạo một lần ghi kết nối với tất cả các ô trong cột. Tùy thuộc vào cách nó được triển khai, sẽ có một độ trễ nhất định cho mỗi bit địa chỉ cho đến khi kết quả xuất hiện ở đầu kia. Đây được gọi là độ trễ CAS của bộ nhớ. Bởi vì các bit đó phải được kiểm tra tuần tự, quá trình này mất nhiều thời gian hơn so với chu kỳ của bộ xử lý (thường chỉ có một vài bóng bán dẫn theo trình tự để chờ). Nó cũng mất nhiều thời gian hơn một chu kỳ xe buýt (thường chậm hơn một vài lần so với chu kỳ bộ xử lý). Lệnh CAS trên chip bộ nhớ thông thường có khả năng đảm nhận thứ tự 5ns (IIRC - đã lâu rồi tôi mới xem xét thời gian), tốc độ chậm hơn so với chu kỳ bộ xử lý.

May mắn thay, chúng tôi chia địa chỉ thành ba phần (cột, hàng và ngân hàng) cho phép mỗi phần nhỏ hơn và xử lý đồng thời các phần đó, nếu không độ trễ sẽ còn dài hơn.

Bộ đệm bộ xử lý, tuy nhiên, không có vấn đề này. Không chỉ nhỏ hơn nhiều, vì vậy dịch địa chỉ là một công việc dễ dàng hơn, nó thực sự không cần dịch nhiều hơn một đoạn nhỏ của địa chỉ (trong một số biến thể, không có gì cả) vì nó là liên kết. Điều đó có nghĩa là dọc theo mỗi dòng bộ nhớ được lưu trong bộ nhớ cache, có thêm các ô nhớ lưu trữ một phần (hoặc tất cả) địa chỉ. Rõ ràng điều này làm cho bộ đệm thậm chí còn đắt hơn, nhưng điều đó có nghĩa là tất cả các ô có thể được truy vấn để xem liệu chúng có dòng bộ nhớ cụ thể mà chúng ta muốn đồng thời hay không, và chỉ có một (hy vọng) có dữ liệu phù hợp sẽ loại bỏ nó lên một chiếc xe buýt kết nối toàn bộ bộ nhớ với lõi bộ xử lý chính. Điều này xảy ra trong ít hơn một chu kỳ, bởi vì nó đơn giản hơn nhiều.


-2

Một trong những triết lý mà tôi đã nghiên cứu là chuyển động phần cứng đạt tối đa thông lượng tối thiểu khi chúng ta nói về bất kỳ bộ nhớ dựa trên bộ đệm nào, có thể là bộ đệm CPU, bộ đệm bộ đệm hoặc bộ nhớ cache cho mục đích đó. Động lực cơ bản đạt được khi có ít nhất hoặc không có chuyển động phần cứng để truy xuất / đọc / ghi dữ liệu và thao tác được hoàn thành nhanh hơn.

Dữ liệu truyền từ đĩa -> bộ nhớ chính (RAM) (lưu trữ tạm thời) -> Bộ đệm CPU (bộ nhớ tạm thời nhỏ hơn gần CPU để dữ liệu được truy cập thường xuyên) -> CPU (xử lý).

Bộ đệm CPU là không gian bộ nhớ nhỏ hơn, nhanh hơn, lưu trữ các bản sao dữ liệu từ các vị trí bộ nhớ chính được sử dụng gần đây nhất.

Bộ đệm bộ đệm là vùng nhớ chính lưu trữ các bản sao dữ liệu từ các vị trí đĩa được sử dụng gần đây nhất.

Bộ nhớ cache của trình duyệt là thư mục hoặc không gian tương tự lưu trữ các bản sao dữ liệu từ các trang web được truy cập gần đây nhất của người dùng.

Tham khảo: Cách thức hoạt động của bộ nhớ máy tính


"Triết lý hệ điều hành là ..." - đây chỉ là ý kiến ​​của bạn hay bạn có thể sao lưu nó bằng cách nào đó?
gnat

Đã được dạy về điều này trong khi nghiên cứu Unix bởi Maurice Bach. Thật không may, không có tài liệu hỗ trợ. Đã chỉnh sửa ..
roshan4074

5
howthingworks nổi tiếng là không đáng tin cậy để có được thông tin kỹ thuật đáng tin cậy. Chúng rất tuyệt vì đơn giản hóa mà Joe và Jane trung bình có thể hiểu, nhưng đó là về nó.
jwenting
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.