Giả sử tôi có một đơn vị biên dịch bao gồm ba hàm, A, B và C. A được gọi một lần từ hàm bên ngoài đơn vị biên dịch (ví dụ: đó là điểm nhập hoặc gọi lại); B được gọi nhiều lần bởi A (ví dụ, nó được gọi trong một vòng lặp chặt chẽ); C được gọi một lần bởi mỗi lời gọi B (ví dụ: đó là hàm thư viện).Ngữ nghĩa của thuộc tính nóng GCC
Toàn bộ đường đi qua A (đi qua B và C) là quan trọng về hiệu suất, mặc dù hiệu suất của bản thân A không quan trọng (vì phần lớn thời gian được sử dụng trong B và C).
Bộ chức năng tối thiểu nào cần chú thích với __attribute__ ((hot))
để thực hiện tối ưu hóa tích cực hơn cho đường dẫn này? Giả sử chúng tôi không thể sử dụng -fprofile-generate
.
Tương đương: __attribute__ ((hot))
có nghĩa là "tối ưu hóa nội dung của chức năng này", "tối ưu hóa cuộc gọi đến chức năng này", "tối ưu hóa tất cả các cuộc gọi con cháu mà chức năng này tạo ra" hay kết hợp chúng?
Trang thông tin GCC không giải quyết rõ ràng các câu hỏi này.
'__attribute__ ((hot))' có thể giúp bạn một cái gì đó, nhưng bạn có thể nhận được kết quả tốt hơn từ đầu tiên làm cho cả hai B và C 'static inline' và tối ưu hóa với' -O3'. – twalberg
Tôi giả định rằng các bước đã được thực hiện. –