2012-01-03 38 views
18

Ai đó có thể vui lòng giải thích những gì chúng ta đạt được bằng cách có một bộ nhớ cache hướng dẫn riêng biệt và bộ nhớ cache dữ liệu. Bất kỳ con trỏ nào đến một liên kết tốt giải thích điều này cũng sẽ được đánh giá cao.lý do tại sao riêng biệt icache và dcache cần

+1

Một là dành cho dữ liệu và một hướng dẫn: cả hai có thể 'churn' ở các mức khác nhau và có quyền truy cập khác mẫu. –

+2

[Từ Wikipedia] (http://en.wikipedia.org/wiki/CPU_cache): _ "Hướng dẫn và lưu trữ dữ liệu có thể được tách ra để có hiệu suất cao hơn với CPU Harvard nhưng chúng cũng có thể được kết hợp để giảm chi phí phần cứng." _ Vì vậy, chúng không phải lúc nào cũng ** riêng biệt. –

+1

Tidbit thú vị ở đây là JIT có thể tạo ra các vấn đề bằng cách viết hướng dẫn thông qua bộ đệm dữ liệu và chúng không nằm trong bộ nhớ cache/bộ nhớ cache thấp hơn khi đến lúc lấy hướng dẫn hoặc bộ nhớ cache có thể có hướng dẫn cũ . Bạn phải tự chăm sóc đồng bộ hóa. – rsaxvc

Trả lời

18

Lý do chính là: hiệu suất. Một lý do khác là tiêu thụ điện năng.

DCache và iCache riêng biệt giúp bạn có thể tìm nạp hướng dẫn và dữ liệu song song.

Hướng dẫn và dữ liệu có các mẫu truy cập khác nhau.

Ghi vào iCache rất hiếm. Các nhà thiết kế CPU đang tối ưu hóa iCache và kiến ​​trúc CPU dựa trên giả định rằng các thay đổi mã là hiếm. Ví dụ: AMD Software Optimization Guide for 10h and 12h Processors nói rằng:

Việc mã hóa trước bắt đầu khi bộ đệm lệnh L1 được lấp đầy. Thông tin Predecode được tạo ra và được lưu trữ cùng với bộ nhớ cache lệnh.

CPU Intel Nehalem có đệm vòng lặp và thêm vào đó CPU Sandy Bridge có bộ nhớ cache 01 The microarchitecture of Intel, AMD and VIA CPUs. Lưu ý rằng đây là các tính năng liên quan đến mã và không có đối tác trực tiếp nào liên quan đến dữ liệu. Chúng có lợi cho hiệu suất, và vì Intel "cấm" các nhà thiết kế CPU để giới thiệu các tính năng dẫn đến việc tăng tiêu thụ điện năng quá mức, có lẽ chúng cũng có lợi cho tổng tiêu thụ điện năng.

Hầu hết các CPU đều có mạng chuyển tiếp dữ liệu (lưu trữ để tải chuyển tiếp). Không có "lưu trữ để tải chuyển tiếp" liên quan đến mã, chỉ đơn giản là vì mã đang được sửa đổi ít thường xuyên hơn nhiều so với dữ liệu.

Mã thể hiện các mẫu khác với dữ liệu.

Điều đó nói rằng, hầu hết CPU ngày nay có bộ nhớ cache L2 hợp nhất chứa cả mã và dữ liệu. Lý do cho điều này là có bộ đệm L2I và L2D riêng biệt sẽ vô tận tiêu thụ ngân sách bán dẫn trong khi không cung cấp bất kỳ lợi ích hiệu suất đo lường nào.

(Chắc chắn, lý do có ICache riêng biệt và dCache không phải là giảm độ phức tạp bởi vì nếu lý do đã giảm độ phức tạp hơn sẽ không có bất kỳ pipelining trong bất kỳ thiết kế CPU hiện tại.Một CPU với pipelining phức tạp hơn một CPU không có pipelining. Chúng tôi muốn tăng độ phức tạp. Thực tế là: thiết kế CPU tiếp theo (thường) phức tạp hơn thiết kế trước đó.)

+0

Tôi có nghĩa là sự phức tạp của bộ điều khiển bộ nhớ cache. – rsaxvc

4

Nó phải làm gì với các đơn vị chức năng của CPU chủ yếu truy cập bộ nhớ cache đó. Vì ALU và FPU truy cập vào bộ nhớ cache dữ liệu mà bộ giải mã và bộ lập lịch truy cập bộ nhớ cache lệnh, và thường pipelining cho phép bộ xử lý lệnh và bộ thực thi hoạt động đồng thời, sử dụng một bộ đệm đơn sẽ gây ra tranh chấp giữa hai thành phần này. Bằng cách tách chúng, chúng tôi mất một số tính linh hoạt và đạt được khả năng cho hai thành phần chính của bộ xử lý này để lấy dữ liệu từ bộ nhớ cache cùng một lúc.

2

Một lý do làm giảm độ phức tạp - bạn có thể triển khai bộ nhớ cache dùng chung có thể truy xuất nhiều dòng cùng một lúc hoặc chỉ không đồng bộ (xem phần Truy vấn dưới), nhưng nó làm cho bộ điều khiển bộ nhớ cache phức tạp hơn nhiều.

Lý do khác là ổn định thực thi - nếu bạn có một lượng ICache và dcache đã biết, bộ nhớ đệm của dữ liệu không thể bỏ qua hệ thống bộ nhớ cache của hướng dẫn, có thể xảy ra trong bộ nhớ cache được chia sẻ đơn giản.

Và như Dan đã nói, việc tách chúng ra làm cho đường ống dễ dàng hơn, mà không cần thêm độ phức tạp của bộ điều khiển.

1

Do MEM và FETCH của bộ xử lý có thể truy cập L1 cache (giả sử kết hợp) cùng một lúc, có thể xung đột ưu tiên (có thể trở thành nút cổ chai hiệu suất). Một cách để giải quyết vấn đề này là tạo bộ đệm L1 với hai cổng đọc. Nhưng tăng số lượng cổng làm tăng diện tích bộ nhớ cache bậc hai và do đó tăng tiêu thụ điện năng.

Ngoài ra, nếu bộ đệm L1 là bộ nhớ kết hợp thì có khả năng một số khối dữ liệu có thể thay thế các khối chứa hướng dẫn quan trọng và sắp được truy cập. Những sự trục xuất và theo dõi bộ nhớ cache bỏ lỡ có thể làm tổn thương hiệu suất tổng thể.

Ngoài ra, hầu hết bộ xử lý thời gian sẽ tìm nạp hướng dẫn theo tuần tự (một số ngoại lệ như mục tiêu đã thực hiện, nhảy vv) cung cấp cho bộ nhớ cache lệnh nhiều địa phương không gian hơn và tỷ lệ truy cập tốt. Ngoài ra, như đã đề cập trong các câu trả lời khác, hầu như không có bất kỳ ghi vào ICache (tự sửa đổi mã như trình biên dịch JIT). Vì vậy, thiết kế icache và dcache riêng biệt có thể được tối ưu hóa xem xét các mẫu truy cập và các thành phần khác như tải/lưu trữ hàng đợi, viết bộ đệm, v.v.

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