Tôi có triển khai một lớp X, có hai con trỏ tới hai mẩu thông tin. Tôi đã viết một triển khai mới, lớp Y, chỉ có một con trỏ đến một cấu trúc chứa hai mẩu thông tin với nhau như các thành viên lân cận. Các phương thức của X và Y thường chỉ cần thao tác một phần thông tin, nhưng cung cấp phương thức get() trả về một con trỏ tới phần thứ hai (trong trường hợp này lớp X chỉ trả về con trỏ của nó cho phần đó và lớp Y trả về địa chỉ của thành viên thứ hai của cấu trúc). Trong sử dụng bình thường, các cuộc gọi đến các phương thức của X và Y sẽ xảy ra xen kẽ bởi các cuộc gọi để nhận() và thực hiện công việc trên mảnh thứ hai được trả về. Tôi hy vọng rằng trong các tình huống thực tế cần phải có một cải tiến hiệu suất, bây giờ hai thông tin nằm cạnh nhau trong bộ nhớ trong việc thực hiện lớp Y (vì chúng là các thành viên liền kề của một cấu trúc), nhưng tôi 'không thấy bất kỳ sự khác biệt nào trong các tiêu chuẩn tôi đã viết (xen kẽ các cuộc gọi đến các phương thức của X và Y bằng cách thực hiện công việc trên các phần thứ hai của chúng trong các vòng lớn). Tôi nghi ngờ điều này là bởi vì tất cả mọi thứ phù hợp trong bộ nhớ cache trong cả hai trường hợp trong các bài kiểm tra của tôi. Tôi không muốn thử điều này trong ứng dụng thực sự của tôi bởi vì ngữ nghĩa của X và Y khác nhau theo những cách tinh tế khác không liên quan đến việc tối ưu hóa này và chuyển ứng dụng đang sử dụng sẽ là một số công việc. làm việc ngay từ đầu.C++, cách cải thiện điểm chuẩn trong vùng nhớ đệm?
Cách tốt nhất để quan sát sự khác biệt về hiệu suất do vị trí bộ nhớ cache tốt hơn là gì? Nếu tôi làm một loạt các công việc giả trên một mảng bằng với kích thước của bộ nhớ cache giữa các cuộc gọi là đủ? Hoặc tôi muốn làm việc trên một mảng hơi ít hơn kích thước bộ nhớ cache, để làm việc trên trường hợp của tôi trong lớp học của tôi sẽ gây ra những thứ để rơi vào và ra khỏi bộ nhớ cache? Tôi không chắc chắn làm thế nào để mã một cái gì đó là mạnh mẽ chống lại tối ưu hóa trình biên dịch và kích thước bộ nhớ cache khác nhau.
'Tại sao' không thực sự là vấn đề ở đây - câu hỏi khá rõ ràng đối với địa điểm bộ nhớ cache điểm chuẩn. Tôi không nghĩ 'tại sao' lại thực sự thêm bất cứ điều gì vào cuộc thảo luận, và tốt nhất là cho rằng Joseph biết mình đang làm gì. – Justicle
"Tại sao" luôn quan trọng, ít nhất là IMHO. "Tôi hy vọng rằng trong các tình huống thực tế đời sống cần phải có một cải tiến hiệu suất" mà nói với tôi Joseph đang tìm cách để tăng tốc độ. "Tôi không muốn thử điều này trong ứng dụng thực của tôi", điều này cho thấy mục tiêu cuối cùng của anh là hiệu suất tốt hơn và anh cố gắng thực hiện nó thông qua địa phương được cải thiện - đó là lý do tôi đề nghị các khóa học khác để cải thiện hiệu suất. Tuy nhiên, @ Joseph, nếu tôi đã đi sai hướng ở đây, xin vui lòng bỏ qua. ;-) [Và trong trường hợp đó, cachegrind là những gì bạn muốn] –
Tôi đang viết một lớp con trỏ thông minh về cơ bản là thuật toán ít hơn. Tôi đã tối ưu hóa nó với g-prof xuống đến điểm mà mọi thứ như một chi nhánh tồn tại (một if) hoặc một số nguyên phân bổ có thể xác định xem lớp của tôi có đánh bại việc thực thi cũ hay không. Đây là một trong số ít các trường hợp tối ưu hóa vi mô chắc chắn áp dụng;) –