Hãy bắt đầu với điều này:
Tôi nghĩ rằng bộ xử lý SMP mới nhất sử dụng bộ đệm 3 cấp vì vậy tôi muốn hiểu hệ thống phân cấp cấp Bộ nhớ cache và kiến trúc của chúng.
Để hiểu bộ nhớ cache bạn cần biết một số điều:
Một CPU có các thanh ghi. Giá trị trong đó có thể được sử dụng trực tiếp. Không có gì nhanh hơn.
Tuy nhiên, chúng tôi không thể thêm các thanh ghi vô hạn vào một con chip. Những thứ này chiếm không gian. Nếu chúng ta làm cho chip lớn hơn, nó sẽ đắt hơn. Một phần là vì chúng ta cần một con chip lớn hơn (nhiều silicon hơn), nhưng cũng vì số lượng chip có vấn đề tăng lên.
(Hình ảnh một wafer tưởng tượng với 500 cm 2 . Tôi cắt giảm 10 chip từ nó, mỗi chip 50cm 2 trong kích thước. Một trong số đó bị phá vỡ. Tôi loại bỏ nó và tôi rời nó 9 chip làm việc. Bây giờ lấy wafer cùng và tôi cắt 100 chip từ nó, mỗi chip nhỏ gấp mười lần. Một trong số đó nếu bị hỏng. Tôi loại bỏ chip bị hỏng và tôi còn lại 99 chip đang hoạt động. Đó là một phần tổn thất mà tôi sẽ phải chịu. Để bù lại số tiền lớn hơn Tôi sẽ yêu cầu giá cao hơn. Không chỉ là giá cho silicon bổ sung)
Đây là một trong những lý do tại sao chúng tôi muốn chip nhỏ, giá cả phải chăng.
Tuy nhiên, bộ đệm càng gần CPU, nó càng có thể được truy cập nhanh hơn.
Điều này cũng dễ giải thích; Tín hiệu điện truyền gần tốc độ ánh sáng. Đó là nhanh nhưng vẫn là một tốc độ hữu hạn. CPU hiện đại hoạt động với xung nhịp GHz. Điều đó cũng nhanh. Nếu tôi lấy CPU 4 GHz thì tín hiệu điện có thể truyền đi khoảng 7,5cm mỗi tích tắc. Đó là 7,5 cm theo đường thẳng. (Chips là bất cứ điều gì nhưng kết nối thẳng). Trong thực tế, bạn sẽ cần ít hơn đáng kể so với 7,5 cm vì điều đó không cho phép bất kỳ lúc nào các chip trình bày dữ liệu được yêu cầu và cho tín hiệu truyền trở lại.
Tóm lại, chúng tôi muốn bộ đệm càng gần càng tốt. Có nghĩa là chip lớn.
Hai cần phải được cân bằng (hiệu suất so với chi phí).
Chính xác thì bộ đệm L1, L2 và L3 nằm ở đâu trong máy tính?
Giả sử chỉ có phần cứng kiểu PC (máy tính lớn khá khác nhau, bao gồm cả hiệu năng so với cân bằng chi phí);
IBM XT
Bản gốc 4,77Mhz: Không có bộ đệm. CPU truy cập bộ nhớ trực tiếp. Một đọc từ bộ nhớ sẽ theo mô hình này:
- CPU đặt địa chỉ mà nó muốn đọc trên bus bộ nhớ và xác nhận cờ đọc
- Bộ nhớ đặt dữ liệu trên bus dữ liệu.
- CPU sao chép dữ liệu từ bus dữ liệu vào các thanh ghi bên trong của nó.
80286 (1982)
Vẫn không có bộ đệm. Truy cập bộ nhớ không phải là vấn đề lớn đối với các phiên bản tốc độ thấp hơn (6Mhz), nhưng model nhanh hơn chạy tới 20Mhz và thường cần trì hoãn khi truy cập bộ nhớ.
Sau đó, bạn nhận được một kịch bản như thế này:
- CPU đặt địa chỉ mà nó muốn đọc trên bus bộ nhớ và xác nhận cờ đọc
- Bộ nhớ bắt đầu đưa dữ liệu lên bus dữ liệu. CPU chờ.
- Bộ nhớ đã nhận được dữ liệu và giờ đây nó đã ổn định trên bus dữ liệu.
- CPU sao chép dữ liệu từ bus dữ liệu vào các thanh ghi bên trong của nó.
Đó là một bước thêm dành cho việc chờ đợi bộ nhớ. Trên một hệ thống hiện đại có thể dễ dàng có 12 bước, đó là lý do tại sao chúng ta có bộ đệm .
80386 : (1985)
CPU nhanh hơn. Cả hai trên mỗi đồng hồ, và bằng cách chạy ở tốc độ đồng hồ cao hơn.
RAM nhanh hơn, nhưng không nhanh hơn CPU.
Kết quả là nhiều trạng thái chờ đợi là cần thiết. Một số bo mạch chủ làm việc xung quanh này bằng cách thêm bộ nhớ cache (đó sẽ là 1 st cấp bộ nhớ cache) trên bo mạch chủ.
Việc đọc từ bộ nhớ bây giờ bắt đầu bằng kiểm tra xem dữ liệu đã có trong bộ đệm chưa. Nếu nó được đọc từ bộ đệm nhanh hơn nhiều. Nếu không cùng quy trình như được mô tả với 80286
80486 : (1989)
Đây là CPU đầu tiên của thế hệ này có một số bộ đệm trên CPU.
Đó là bộ đệm hợp nhất 8KB, có nghĩa là nó được sử dụng cho dữ liệu và hướng dẫn.
Trong khoảng thời gian này, người ta thường đặt 256KB bộ nhớ tĩnh nhanh trên bo mạch chủ làm bộ đệm cấp 2 . Như vậy 1 st cấp bộ nhớ cache trên CPU, 2 nd cấp bộ nhớ cache trên bo mạch chủ.
80586 (1993)
586 hoặc Pentium-1 sử dụng bộ đệm cấp 1 chia tách. Mỗi 8 KB cho dữ liệu và hướng dẫn. Bộ đệm được phân chia để bộ đệm dữ liệu và hướng dẫn có thể được điều chỉnh riêng cho mục đích sử dụng cụ thể của chúng. Bạn vẫn có bộ đệm thứ 1 nhỏ nhưng rất nhanh ở gần CPU và bộ đệm thứ 2 lớn hơn nhưng chậm hơn trên bo mạch chủ. (Ở khoảng cách vật lý lớn hơn).
Trong cùng khu vực pentium 1, Intel đã sản xuất Pentium Pro ('80686'). Tùy thuộc vào kiểu máy, con chip này có bộ nhớ cache 256Kb, 512KB hoặc 1MB. Nó cũng đắt hơn nhiều, rất dễ để giải thích với hình ảnh sau đây.
Lưu ý rằng một nửa không gian trong chip được sử dụng bởi bộ đệm. Và đây là cho mô hình 256KB. Nhiều bộ đệm hơn về mặt kỹ thuật là có thể và một số mô hình được sản xuất với bộ nhớ cache 512KB và 1MB. Giá thị trường cho những thứ này là cao.
Cũng lưu ý rằng chip này chứa hai khuôn. Một với CPU thực tế và bộ đệm thứ 1 , và một bộ chết thứ hai với bộ đệm thứ 2 256KB .
Pentium-2
Pentium 2 là lõi pentium pro. Vì lý do kinh tế, không có bộ đệm thứ 2 trong CPU. Thay vào đó, những gì được bán cho CPU một PCB với các chip riêng cho CPU (và bộ đệm thứ 1 ) và bộ đệm thứ 2 .
Khi công nghệ phát triển và chúng tôi bắt đầu tạo ra các chip với các thành phần nhỏ hơn, có thể có khả năng tài chính để đưa bộ đệm thứ 2 trở lại trong khuôn CPU thực tế. Tuy nhiên vẫn còn một sự chia rẽ. Bộ nhớ cache 1 giây rất nhanh được gắn vào CPU. Với một cú 1 st bộ nhớ cache mỗi lõi CPU và một ít nhanh 2 lớn hơn nhưng nd bộ nhớ cache bên cạnh cốt lõi.
Pentium-3
Pentium-4
Điều này không thay đổi đối với pentium-3 hoặc pentium-4.
Trong khoảng thời gian này, chúng tôi đã đạt đến một giới hạn thực tế về tốc độ chúng ta có thể xung nhịp CPU. 8086 hoặc 80286 không cần làm mát. Một pentium-4 chạy ở tốc độ 3.0 GHz tạo ra rất nhiều nhiệt và sử dụng nhiều năng lượng đến mức nó trở nên thiết thực hơn khi đặt hai CPU riêng biệt trên bo mạch chủ thay vì một nhanh.
(Hai CPU 2.0 GHz sẽ sử dụng ít năng lượng hơn so với CPU 3.0 GHz giống hệt nhau, nhưng vẫn có thể làm được nhiều việc hơn).
Điều này có thể được giải quyết theo ba cách:
- Làm cho CPU hiệu quả hơn, do đó chúng làm nhiều công việc hơn với cùng tốc độ.
- Sử dụng nhiều CPU
- Sử dụng nhiều CPU trong cùng một 'chip'.
1) Là một quá trình đang diễn ra. Nó không phải là mới và nó sẽ không dừng lại.
2) Được thực hiện sớm (ví dụ với bo mạch chủ Pentium-1 kép và chipset NX). Cho đến bây giờ đó là lựa chọn duy nhất để xây dựng một PC nhanh hơn.
3) Yêu cầu CPU có nhiều 'lõi cpu' được tích hợp vào một chip. (Sau đó, chúng tôi đã gọi CPU đó là CPU lõi kép để tăng sự nhầm lẫn. Cảm ơn bạn đã tiếp thị :))
Ngày nay, chúng ta chỉ coi CPU là "lõi" để tránh nhầm lẫn.
Bây giờ bạn có các chip như pentium-D (bộ đôi), về cơ bản là hai lõi pentium-4 trên cùng một chip.
Bạn có nhớ hình ảnh của pentium-Pro cũ không? Với kích thước bộ nhớ cache khổng lồ?
Xem hai khu vực lớn trong bức tranh này?
Hóa ra chúng ta có thể chia sẻ bộ đệm thứ 2 giữa cả hai lõi CPU. Tốc độ sẽ giảm nhẹ, nhưng một 512KiB chia sẻ 2 nd bộ nhớ cache thường nhanh hơn vì thêm hai độc lập 2 là nd mức cache của một nửa kích thước.
Điều này rất quan trọng cho câu hỏi của bạn.
Điều đó có nghĩa là nếu bạn đọc một cái gì đó từ một lõi CPU và sau đó cố gắng đọc nó từ một lõi khác có chung bộ đệm mà bạn sẽ nhận được một bộ đệm. Bộ nhớ sẽ không cần phải được truy cập.
Vì các chương trình di chuyển giữa các CPU, tùy thuộc vào tải, số lượng lõi và bộ lập lịch bạn có thể đạt được hiệu suất bổ sung bằng cách ghim các chương trình sử dụng cùng một dữ liệu vào cùng một CPU (bộ nhớ cache trên L1 trở xuống) hoặc trên cùng các CPU chia sẻ bộ đệm L2 (và do đó bị bỏ lỡ trên L1, nhưng lượt truy cập đọc bộ đệm L2).
Vì vậy, trên các mô hình sau, bạn sẽ thấy bộ nhớ cache cấp 2 được chia sẻ.
Nếu bạn đang lập trình cho CPU hiện đại thì bạn có hai tùy chọn:
- Đừng bận tâm. Hệ điều hành sẽ có thể lên lịch mọi thứ. Bộ lập lịch có tác động lớn đến hiệu suất của máy tính và mọi người đã dành rất nhiều nỗ lực để tối ưu hóa điều này. Trừ khi bạn làm điều gì đó kỳ lạ hoặc đang tối ưu hóa cho một mô hình PC cụ thể, bạn sẽ tốt hơn với bộ lập lịch mặc định.
- Nếu bạn cần mỗi bit hiệu năng cuối cùng và phần cứng nhanh hơn không phải là một tùy chọn, thì hãy thử để lại các rãnh truy cập cùng dữ liệu trên cùng lõi hoặc trên lõi có quyền truy cập vào bộ đệm chung.
Tôi nhận ra rằng tôi chưa đề cập đến bộ đệm L3, nhưng chúng không khác nhau. Bộ đệm L3 hoạt động theo cùng một cách. Lớn hơn L2, chậm hơn L2. Và nó thường được chia sẻ giữa các lõi. Nếu nó hiện diện lớn hơn rất nhiều so với bộ đệm L2 (nếu không thì nó sẽ không có ý nghĩa) và nó thường được chia sẻ với tất cả các lõi.