Tôi đang cố gắng để hồ sơ (với Callgrind) một phần cụ thể của mã của tôi bằng cách loại bỏ tiếng ồn và tính toán mà tôi không quan tâm. Dưới đây là một ví dụ về những gì tôi muốn làm:Callgrind: Hồ sơ một phần cụ thể của mã của tôi
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
//Method to be profiled with these data
//Post operation on the data
}
use-case của tôi là một thử nghiệm hồi quy, tôi muốn chắc chắn rằng phương pháp trong câu hỏi là vẫn đủ nhanh (cái gì đó như thêm ít hơn 10% hướng dẫn kể từ lần triển khai cuối cùng). Đây là lý do tại sao tôi muốn có mẫu đầu ra sạch hơn Callgrind. (Tôi cần vòng lặp for để có một lượng dữ liệu đáng kể được xử lý để có ước tính tốt về hành vi của phương pháp tôi muốn gửi hồ sơ)
Lần thử đầu tiên của tôi là thay đổi mã thành:
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
CALLGRIND_START_INSTRUMENTATION;
//Method to be profiled with these data
CALLGRIND_STOP_INSTRUMENTATION;
//Post operation on the data
}
CALLGRIND_DUMP_STATS;
Thêm macro Callgrind để điều khiển thiết bị. Tôi cũng đã thêm --instr-atstart = không có tùy chọn để đảm bảo rằng tôi chỉ cấu hình một phần của mã mà tôi muốn ...
Thật không may với cấu hình này khi tôi bắt đầu khởi chạy thực thi của mình bằng callgrind, nó không bao giờ kết thúc ... Nó không phải là một câu hỏi về sự chậm chạp, bởi vì một thiết bị đo đạc đầy đủ kéo dài chưa đầy một phút.
Tôi cũng đã cố gắng
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
CALLGRIND_TOGGLE_COLLECT;
//Method to be profiled with these data
CALLGRIND_TOGGLE_COLLECT;
//Post operation on the data
}
CALLGRIND_DUMP_STATS;
(hoặc --toggle-thu thập = tùy chọn "myMethod") Nhưng callgrind trở cho tôi một bản ghi mà không cần bất kỳ cuộc gọi (KCachegrind là màu trắng như tuyết :(và nói không hướng dẫn ...)
tôi đã sử dụng các macro/tùy chọn một cách chính xác? Bất kỳ ý tưởng về những gì tôi cần phải thay đổi để có được kết quả mong đợi?
để bạn không khởi động/dừng thiết bị? – Paschalis
@Paschalis bắt đầu/dừng sẽ tạo ra bãi chứa mới mỗi khi bạn gọi dừng lại. Nếu bạn muốn có được tập hợp trong một báo cáo duy nhất, chuyển đổi có vẻ là con đường để đi (về cơ bản nó chỉ flips hoạt động/không hoạt động thiết bị). – joetde
cảm ơn vì phản hồi @joetde. Tôi hỏi vì tôi đang phải đối mặt với một vấn đề mà callbacks/macro từ callgrind hoặc bất kỳ công cụ nào khác dường như không bao giờ được gọi. Thêm [tại đây] (http://goo.gl/08OM3c)! – Paschalis