2015-04-17 18 views
5

sự khác biệt giữa -fprofile-use-fauto-profile là gì?sự khác biệt giữa -fprofile sử dụng và -fauto hồ sơ là gì?

Đây là những gì các tài liệu nói:

https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options

-fprofile sử dụng

-fprofile sử dụng = path

Enable hồ sơ tối ưu hóa thông tin phản hồi trực tiếp, và tối ưu hóa sau mà nói chung là có lợi nhuận chỉ với thông tin phản hồi hồ sơ có sẵn: [...]

Nếu con đường được chỉ định, GCC nhìn vào con đường để tìm các tập tin dữ liệu phản hồi hồ sơ. Xem -fprofile-dir.

và bên dưới mà

-fauto hồ sơ

-fauto hồ sơ = path

Enable lấy mẫu dựa trên thông tin phản hồi hướng tối ưu hóa, và tối ưu hóa sau đây thường là lợi nhuận chỉ với thông tin phản hồi hồ sơ có sẵn: [...]

con đường là tên của một tập tin chứa hồ sơ AutoFDO trong sự hình thành. Nếu bỏ qua, nó mặc định là fbdata.afdo trong thư mục hiện hành.

(Danh sách các tối ưu hóa trong [...] cho -fauto-profile dài.)

Trả lời

3

Tôi tình cờ xem chủ đề này bằng một con đường tôi thậm chí không thể nhớ và đang học cụ này như tôi đi cùng. Nhưng tôi không thích nhìn thấy một câu hỏi chưa được trả lời nếu tôi có thể học được điều gì đó từ nó! Vì vậy, tôi đã đọc.

Tối ưu hóa được hướng dẫn phản hồi

Như GCC nói, cả hai đều là phương thức áp dụng Tối ưu hóa được hướng dẫn phản hồi. Bằng cách chạy chương trình và profiling những gì nó làm, làm thế nào nó có phải nó, bao lâu nó dành trong đó chức năng, vv - chúng tôi có thể tạo điều kiện thêm, optimisations đạo từ dữ liệu kết quả. Các kết quả từ profiler được 'fed forward' tới trình tối ưu hóa. Tiếp theo, có lẽ, bạn có thể lấy tiểu sử và cấu hình được tối ưu hóa tiểu sử của mình , sau đó biên dịch một phiên bản FDO khác, v.v ... do đó, phản hồi một phần của tên.

Câu trả lời thực sự, sự khác biệt giữa hai công tắc này, không được ghi chép rõ ràng, nhưng có sẵn nếu chúng ta chỉ cần nhìn xa hơn một chút.

-fprofile sử dụng

Thứ nhất, báo giá của bạn cho -fprofile-use chỉ thực sự khẳng định rằng nó đòi hỏi -fprofile-generate, một lựa chọn mà không phải là rất tốt tài liệu: tài liệu tham khảo từ -use chỉ nói với bạn đọc trang bạn đã được bật, trong mọi trường hợp, -generate chỉ được đề cập nhưng không bao giờ được xác định. Hữu ích! Nhưng! Chúng ta có thể tham khảo các câu trả lời cho câu hỏi này: How to use profile guided optimizations in g++?

Như rằng các quốc gia trả lời, và các mảnh của tài liệu hướng dẫn của GCC trong câu hỏi ở đây nhẹ nhàng chỉ ra ... -fprofile-generate gây instrumentation để được thêm vào nhị phân đầu ra. Khi trang đó tóm tắt, một tệp thực thi có công cụ có thêm các công cụ để tạo điều kiện kiểm tra bổ sung hoặc thông tin chi tiết trong thời gian chạy của nó.

(Hình thức thiết bị khác mà tôi biết - và phương tiện tôi đã sử dụng - là thư viện tiện ích bổ sung của trình biên dịch UBSan, mà tôi sử dụng qua GCC's -fsanitize=undefined option. Điều này nắm bắt các bit của Hành vi không xác định khi chạy. tiết lộ UB tôi có thể đã khác lấy thời gian dài để tìm - và làm cho tôi tự hỏi như thế nào chương trình của tôi chạy ở tất cả Clang can use this library too, và có thể trình biên dịch khác)

-fauto hồ sơ

Ngược lại, -fauto-profile là khác nhau!.. Sự khác biệt chính là gợi ý, nếu không muốn nói rõ ràng, trong tóm tắt bạn trích dẫn cho nó:

path là tên của một tập tin chứa AutoFDO thông tin hồ sơ.

Chế độ này xử lý hồ sơ và tối ưu hóa tiếp theo bằng cách sử dụng AutoFDO. Để Google, chúng tôi đi: AutoFDO Một vài dòng đầu tiên không giải thích điều này như một cách ngắn gọn càng tốt, và tôi nghĩ rằng bản tóm tắt tốt nhất được chôn cất khá xa xuống phía dưới trang:

Sự khác biệt lớn giữa AutoFDO [-fauto-profile] và FDO [-fprofile-use] là cấu hình AutoFDO trên nhị phân được tối ưu hóa thay vì nhị phân được thiết bị. Điều này làm cho nó rất khác nhau trong việc xử lý các chức năng nhân bản.

Làm cách nào để thực hiện việc này? -fauto-profile yêu cầu bạn cung cấp các tệp lược tả được viết bởi trình biên dịch hạt nhân Linux, Perf, được chuyển đổi sang định dạng AutoFDO. Perf, thay vì thêm thiết bị đo đạc, sử dụng các tính năng phần cứng của CPU và hạt nhân cấp tính năng của hệ điều hành đến hồ sơ thống kê khác nhau về một chương trình trong khi nó đang chạy:

perf là mạnh mẽ: nó có thể đếm hiệu suất công cụ CPU, tracepoints , kprobes và uprobes (theo dõi động). Nó có khả năng định hình nhẹ. [...] Các bộ đếm hiệu năng là các thanh ghi phần cứng CPU đếm các sự kiện phần cứng như các lệnh được thực hiện, bộ nhớ cache bị thiếu hoặc các nhánh bị sai lệch. Chúng tạo thành cơ sở cho các ứng dụng lược tả để theo dõi luồng điều khiển động và xác định các điểm nóng.

Vì vậy, điều đó cho phép nó cấu hình một chương trình được tối ưu hóa, thay vì chương trình được thiết kế.Chúng tôi có thể giả định hợp lý điều này là đại diện hơn về cách chương trình của bạn sẽ phản ứng trong thế giới thực - và vì vậy có thể tạo điều kiện thu thập dữ liệu hồ sơ hữu ích hơn và áp dụng các tối ưu hóa hiệu quả hơn.

Một ví dụ về làm thế nào để làm những việc của buộc tất cả điều này với nhau và nhận được -fauto-profile để làm điều gì đó với chương trình của bạn được tóm tắt ở đây: Feedback directed optimization with GCC and Perf

(Có lẽ bây giờ mà tôi học được tất cả điều này, tôi sẽ cố gắng các tùy chọn này ra một số ngày!)

Các vấn đề liên quan