Do một bài tập ở trường tôi phải chuyển đổi mã C++ thành assembly (ARMv8). Sau đó, tôi phải biên dịch mã C++ bằng cách sử dụng các tối ưu hóa -O0, -O1, -O2, -O3 và -Os của GCC, ghi lại thời gian và so sánh với thời gian thực thi của mã assembly của tôi. Vì, tôi nghĩ rằng tôi biết -O3 phải nhanh hơn -O1 và -O2. Tuy nhiên, tôi nhận được rằng -O2 là nhanh nhất, sau đó là -O1, -O3, -Os, -O0. Điều đó có bình thường không? (Thời gian tính toán là khoảng 30 giây).Thời gian thực hiện được tối ưu hóa
Trả lời
Có, điều đó là bình thường. Thực hiện tối ưu hóa -Ox dưới dạng hướng dẫn. Trung bình, họ sản xuất tối ưu hóa được quảng cáo, nhưng rất nhiều phụ thuộc vào phong cách trong đó mã được viết, bố trí bộ nhớ, cũng như trình biên dịch riêng của mình. Đôi khi, bạn cần phải thử và thất bại nhiều lần trước khi nhận được mã tối ưu. -O2 thực sự cung cấp tối ưu hóa tốt nhất trong hầu hết các trường hợp.
Cảm ơn! Tôi quản lý để vượt qua chỉ -O0, nơi mã lắp ráp của tôi chạy trong 57 và -O1-3 trong khoảng 33s. Nó tốt không? – Monstermania
Vâng, điều đó tốt và để tối ưu hóa thêm, bạn có thể cần phải dành nhiều thời gian và công sức. Mã C++ thường khó khăn hơn để tối ưu hóa so với mã C. Nếu bạn có thể, bạn có thể thử chơi với tối ưu hóa bộ nhớ bằng cách thay đổi kích thước của chồng và đống. Đôi khi, nó giúp. – VladP
Lưu ý rằng GCC có nhiều khácoptimization flags.
Không đảm bảo rằng -O3
cho mã nhanh hơn -O2
; một trình biên dịch có thể áp dụng nhiều lần tối ưu hóa hơn, nhưng chúng đều là các chẩn đoán và có thể không thành công (hoặc thậm chí làm chậm một chút mã cụ thể của bạn). Do đó, điều này xảy ra là -O3
cung cấp mã hơi chậm hơn -O2
(trên một số mã mã đầu vào cụ thể) cụ thể.
Bạn có thể thử phiên bản mới hơn của GCC (phiên bản mới nhất trong tháng 11 năm 2017- là GCC 7, GCC 8 sẽ hết hạn sau vài tháng). Bạn cũng có thể thử một số tùy chọn better-march=
hoặc -mtune=
.
Cuối cùng, với GCC plugin của bạn, bạn có thể thêm tối ưu hóa đường chuyền riêng của bạn, hoặc thay đổi thứ tự (và các thiết lập) của tối ưu hóa ứng dụng đi (có vài trăm tối ưu hóa khác nhau qua trong GCC). Nhưng bạn sẽ cần rất nhiều công việc (có lẽ một hoặc hai năm) để có thể mở rộng GCC.
Bạn có thể điều chỉnh các thông số tối ưu hóa và một số dự án (MILEPOST) thậm chí còn sử dụng các kỹ thuật học máy để cải thiện chúng.
Xem thêm trang trình bày và tài liệu tham khảo trên (cũ) GCC MELT documentation của tôi.
- 1. Tối ưu hóa thời gian xây dựng trong Android Studio
- 2. Tối ưu hóa thời gian chạy của thuật toán
- 3. GCC/Tối ưu hóa thời gian xây dựng
- 4. Tối ưu hóa Thời gian tải Biểu mẫu Windows
- 5. Tối ưu hóa nào là OK để thực hiện ngay?
- 6. Cách tối ưu hóa để thực hiện RPC trong .Net
- 7. Tối ưu hóa tải tối ưu UITableView
- 8. Intel C++ Compiler hiểu biết những gì tối ưu hóa được thực hiện
- 9. Chụp nhanh thời gian chạy JVM tối ưu
- 10. Tối ưu hóa jQuery
- 11. Tối ưu hóa vi mô, liệu nó có được tối ưu hóa bởi các trình duyệt hiện đại không?
- 12. Tối ưu hóa ViewState
- 13. Khi nào hiệu suất đạt được đủ đáng kể để thực hiện tối ưu hóa đó?
- 14. Đặt thời gian thực hiện tối đa trong MYSQL/PHP
- 15. Tăng thời gian thực hiện tối đa cho php
- 16. Thời gian thực hiện tối đa cho JavaScript
- 17. Tối ưu hóa GHC
- 18. Cách tăng thời gian thực hiện tối đa trong php
- 19. Thời gian thực hiện tối đa 30 giây vượt quá
- 20. Tối ưu hóa CALayer?
- 21. tối ưu hóa quadprog
- 22. Tối ưu hóa ABAP
- 23. pthreads với thời gian thực ưu tiên
- 24. Tối ưu hóa protobuf nào?
- 25. Thực hiện đơn đặt hàng tối ưu
- 26. Tối ưu hóa cờ vua
- 27. Tối ưu hóa! - Nó là gì? Làm thế nào là nó được thực hiện?
- 28. ArrayList <Integer> được tối ưu hóa bởi JDK để thực hiện như int []?
- 29. cách xem mã được tối ưu hóa trong c
- 30. Điều gì có thể làm cho mã F # không được tối ưu hóa nhanh hơn mã được tối ưu hóa?
Bản sao có thể có của [GCC: Sự khác biệt giữa -O3 và -Os] (https://stackoverflow.com/questions/19689014/gcc-difference-between-o3-and-os) – Bilkokuya
Tôi nên thêm điều đó trong khi câu hỏi Tôi đã gắn cờ không hỏi cụ thể về -O2, nó được trả lời bằng câu trả lời được chấp nhận ở đó. – Bilkokuya
Tiêu đề câu hỏi của bạn đề cập đến thời gian biên dịch, nhưng văn bản câu hỏi của bạn có vẻ quan tâm nhiều hơn đến thời gian thực hiện, điều này không giống nhau. – lurker