Tất cả câu trả lời hay.
Tôi sẽ tinh chỉnh phần "đo lường" của lời khuyên. Tôi thực hiện đo lường với mục đích định lượng bất kỳ cải tiến nào tôi có thể thực hiện. Tuy nhiên, để tìm kiếm những gì cần được khắc phục (và đó là một mục đích khác), tôi nhận được một số mẫu của ngăn xếp cuộc gọi, theo cách thủ công.
Giả sử, để đơn giản, chương trình cần 20 chu kỳ giga để chạy, khi cần. 10. Nếu tôi tạm dừng 10 lần ngẫu nhiên, thì trong 5 lần đó, nhiều hay ít, nó sẽ ở một trong những chu kỳ không cần thiết đó. Tôi có thể xem chu trình là cần thiết hay không bằng cách nhìn vào từng lớp của ngăn xếp cuộc gọi. Nếu bất kỳ lệnh gọi nào ở bất kỳ mức nào của ngăn xếp có thể được loại bỏ, thì chu kỳ là không cần thiết. Nếu một lệnh như vậy xuất hiện trên nhiều ngăn xếp, việc loại bỏ nó sẽ tăng tốc chương trình, bằng một lượng xấp xỉ tỷ lệ phần trăm của mẫu ngăn xếp mà nó đang bật.
Bất kỳ hướng dẫn nào xuất hiện trên nhiều ngăn xếp đều bị nghi ngờ - càng nhiều ngăn xếp thì càng nghi ngờ. Bây giờ, call _main
có lẽ không phải là một tôi có thể xóa, nhưng
foo.cpp:96 call std::vector::iterator:++
nếu nó xuất hiện trên nhiều ngăn xếp, chắc chắn là trọng tâm của sự chú ý.
Có thể vì lý do kiểu dáng, không phải muốn để thay thế, nhưng người ta sẽ biết mức giá nào về hiệu suất đang được thanh toán cho lựa chọn đó.
Vì vậy, tối ưu hóa bao gồm xác định các nghi phạm và tìm cách thay thế hoặc loại bỏ chúng.
Phần khó khăn (và tôi đã làm điều này nhiều lần) là sự hiểu biết những gì là cần thiết và những gì không. Để làm được điều đó, bạn sẽ hiểu được cách thức và lý do tại sao mọi thứ được thực hiện trong chương trình đó, vì vậy nếu một số hoạt động là chu kỳ, bạn có thể biết cách thay thế nó một cách an toàn.
Một số chu kỳ lợn có thể đơn giản để sửa chữa, nhưng bạn sẽ nhanh chóng chạy với những cái mà bạn không biết cách thay thế an toàn. Để làm được điều đó, bạn cần phải quen thuộc hơn với mã.
Sẽ giúp ích nếu bạn có thể chọn bộ não của người đã làm việc trong chương trình.
Nếu không (giả sử mã là ~ 10^6 dòng, như tôi đã làm việc), bạn có thể tăng tốc khá dễ dàng, nhưng để vượt xa điều đó, có thể mất vài tháng để đến nơi bạn cảm thấy thoải mái thay đổi đáng kể.
tôi có nên chia câu hỏi này thành nhiều câu hỏi không? – Claudiu
Tôi nghĩ đó là một câu hỏi hay. Nó thực sự là một quả bóng của các khái niệm được xử lý tốt nhất như một gói duy nhất. –