Gần đây Herb Sutter đã có một cuộc trò chuyện tuyệt vời trên "Modern C++: What You Need to Know". Chủ đề chính của bài nói chuyện này là hiệu quả và cách địa phương dữ liệu và truy cập vào các vấn đề bộ nhớ. Ông cũng đã giải thích cách truy cập tuyến tính của bộ nhớ (mảng/vector) sẽ được yêu thích bởi CPU. Ông đã lấy một ví dụ từ một tài liệu tham khảo cổ điển khác "Game performance by Bob Nystrom" về chủ đề này.Cách viết chương trình thân thiện với bộ nhớ cache trong C++?
Sau khi đọc những bài viết này, tôi đã nhận rằng có hai loại bộ nhớ cache mà tác động việc thực hiện chương trình:
- dữ liệu bộ nhớ cache
- Hướng dẫn cache
Cachegrind công cụ cũng đo cả hai loại bộ nhớ cache thông tin thiết bị của chương trình của chúng tôi. Những điểm đầu tiên đã được giải thích bởi nhiều bài báo/blog và cách để đạt được hiệu quả bộ nhớ cache dữ liệu tốt (địa phương dữ liệu).
Tuy nhiên tôi không nhận được nhiều thông tin về chủ đề Bộ nhớ cache hướng dẫn và loại điều chúng tôi cần lưu ý trong chương trình để đạt được hiệu suất tốt hơn ?. Theo sự hiểu biết của tôi, chúng tôi (lập trình viên) không có nhiều quyền kiểm soát đối với hướng dẫn nào hoặc thứ tự sẽ thực hiện. Nó sẽ thực sự tốt đẹp nếu các chương trình C++ nhỏ giải thích cách truy cập này (bộ nhớ cache lệnh .i.e) sẽ thay đổi theo kiểu viết chương trình của chúng ta. Các lập trình viên thực hành tốt nhất nên làm theo để đạt được hiệu suất tốt hơn đối với điểm này là gì?
Tôi có nghĩa là chúng ta có thể hiểu về các chủ đề bộ nhớ cache dữ liệu nếu chương trình của chúng tôi thực hiện (vectơ vs danh sách) theo cách tương tự để giải thích về điểm thứ 2. Mục đích chính của câu hỏi này là hiểu chủ đề này càng nhiều càng tốt.
Tránh các chức năng ảo và ngắt mã phức tạp thành các vòng nhỏ hơn. – lpapp
@Leeor: theo cách nào trùng lặp? – lpapp
Xin lỗi, tôi đã đề cập đến câu hỏi sai, tôi sẽ rút lại phiếu bầu khi tôi ở bên cạnh máy tính, nhưng tôi cho rằng nó đã được trả lời trước với mã lưu trữ bối cảnh, bao gồm bộ nhớ cache, bộ nhớ cache đã giải mã, v.v. – Leeor