Tại sao có bộ đệm L1 riêng cho dữ liệu và hướng dẫn?


23

Chỉ cần xem qua một số slide và nhận thấy rằng bộ đệm L1 (ít nhất là trên CPU Intel) phân biệt giữa bộ đệm dữ liệu và bộ đệm hướng dẫn, tôi muốn biết lý do tại sao đây là ..


Câu trả lời:


28

Thực tế có một số lý do.

Đầu tiên và có lẽ là quan trọng nhất, dữ liệu được lưu trữ trong bộ đệm hướng dẫn thường khác một chút so với dữ liệu được lưu trong bộ đệm dữ liệu - cùng với các hướng dẫn, có các chú thích cho những thứ như hướng dẫn tiếp theo bắt đầu, để giúp giải mã. Một số bộ xử lý (Ví dụ: Netburst, một số SPARC) sử dụng "bộ đệm theo dõi", lưu trữ kết quả giải mã một lệnh thay vì lưu trữ lệnh gốc ở dạng được mã hóa.

Thứ hai, nó đơn giản hóa mạch một chút - bộ đệm dữ liệu phải xử lý việc đọc và ghi, nhưng bộ đệm hướng dẫn chỉ xử lý việc đọc. (Đây là một phần lý do tại sao mã tự sửa đổi rất tốn kém - thay vì ghi đè trực tiếp dữ liệu vào bộ đệm của lệnh, ghi sẽ chuyển qua bộ đệm dữ liệu vào bộ đệm L2 và sau đó dòng trong bộ đệm của lệnh bị vô hiệu và tái -được tải từ L2).

Thứ ba, nó làm tăng băng thông: hầu hết các bộ xử lý hiện đại có thể đọc dữ liệu từ bộ đệm hướng dẫn và bộ đệm dữ liệu cùng một lúc. Hầu hết cũng có hàng đợi ở "lối vào" vào bộ đệm, vì vậy chúng thực sự có thể thực hiện hai lần đọc và một lần ghi trong bất kỳ chu kỳ nhất định.

Thứ tư, nó có thể tiết kiệm điện. Mặc dù bạn cần tự duy trì nguồn cho các ô nhớ để duy trì nội dung của chúng, một số bộ xử lý có thể / tắt nguồn một số mạch liên quan (bộ giải mã và như vậy) khi chúng không được sử dụng. Với các bộ nhớ cache riêng biệt, chúng có thể cấp nguồn cho các mạch này một cách riêng biệt để lấy hướng dẫn và dữ liệu, tăng khả năng mạch không được cấp nguồn trong bất kỳ chu kỳ nhất định nào Điều).


3
Cũng cần phải đề cập rằng mã và dữ liệu có thể thể hiện các mẫu truy cập khác nhau; ví dụ, các hướng dẫn để tổng hợp tất cả các phần tử trong một mảng thể hiện địa phương tạm thời (cùng một hướng dẫn được sử dụng thường xuyên (nếu bạn thực hiện theo vòng lặp)) và dữ liệu trong mảng thể hiện vị trí không gian (dữ liệu sau được sử dụng tiếp theo).
gablin

1
@gablin: trong khi sự thật, những khác biệt trong các mẫu thường sẽ ưu tiên một bộ đệm hợp nhất. Trong một vòng lặp chặt chẽ như bạn đề cập, hầu hết các bộ đệm hướng dẫn đều không hoạt động. Bộ đệm hợp nhất về cơ bản sẽ tăng gấp đôi kích thước của bộ đệm dữ liệu trong suốt thời gian của vòng lặp.
Jerry Coffin

Không thực sự, bởi vì có nhiều mã hơn sau vòng lặp nhỏ đó và đó cũng có khả năng sẽ hoạt động với mảng. Điều đó đặc trưng cho rất nhiều mã (ví dụ, xử lý chuỗi). Trên thực tế, bộ nhớ cache đầu tiên trong CPU là bộ đệm hợp nhất - chúng nằm giữa giao diện bộ nhớ chính của CPU và bus ngoài, đây là nơi đơn giản để đặt chúng - nhưng hiện tại chúng tôi sử dụng bộ đệm được phân vùng vì nó nhanh hơn trong thực tế .
Donal Fellows

@Donal Fellows: Vâng, thực sự. Tôi nhận thức rõ về cách thức bộ nhớ đệm được thực hiện sớm và lý do tại sao chúng thay đổi thành bộ đệm ẩn.
Jerry Coffin

5

Cũng giống như bất động sản, việc sử dụng bộ đệm được điều khiển bởi ba điều: vị trí, vị trí, vị trí. Điểm chung của việc có bộ đệm là hầu hết các chương trình thể hiện các mẫu vị trí: nếu chúng truy cập byte 1111111, thì byte tiếp theo chúng sẽ truy cập có lẽ là 1111110 hoặc 1111112, và không quá nhiều byte 9999999. Tuy nhiên, hầu hết các chương trình sẽ thể hiện rất khác nhau mô hình vị trí cho hướng dẫn của họ và dữ liệu của họ. Điều này có nghĩa là các hướng dẫn và dữ liệu không thể chia sẻ bộ đệm một cách hiệu quả. Bởi vì các hướng dẫn và dữ liệu không nhất thiết phải ở gần nhau trong bộ nhớ. Một truy cập dữ liệu sẽ chuyển hướng dẫn từ bộ đệm và các hướng dẫn tải sẽ làm hỏng dữ liệu từ bộ đệm.

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.