2015-11-20 16 views
7

Ở đây tôi biên soạn một chương trình đầu vào với -O2 mức tối ưu (với gcc 4.8.4) và đo thời gian thực hiện:GCC hành vi

gcc -O2 -c test.c -o obj.o 
TIMEFORMAT='%3R' && time(./obj.o) 
execution time = 1.825 

và khi tôi thay -O2 cờ với danh sách các tùy chọn được bật theo quy định tại GCC manuel ở mức -O2 https://gcc.gnu.org/onlinedocs/gcc-4.8.4/gcc/Optimize-Options.html#Optimize-Options như thế:

gcc -fauto-inc-dec -fcompare-elim -fcprop-registers -fdce -fdefer-pop -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion -fipa-pure-const -fipa-profile -fipa-reference -fmerge-constants -fsplit-wide-types -ftree-bit-ccp -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-phiprop -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -funit-at-a-time -fthread-jumps -falign-functions -falign-jumps -falign-loops -falign-labels -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks -fdelete-null-pointer-checks -fdevirtualize -fexpensive-optimizations -fgcse -fgcse-lm -fhoist-adjacent-loads -finline-small-functions -findirect-inlining -fipa-sra -foptimize-sibling-calls -fpartial-inlining -fpeephole2 -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop -fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-overflow -ftree-switch-conversion -ftree-tail-merge -ftree-pre -ftree-vrp -c test.c -o obj.o 
    TIMEFORMAT='%3R' && time(./obj.o) 
execution time = 2.652 

câu hỏi của tôi là lý do thời gian thực hiện là khác nhau ngay cả như vậy, tôi đã áp dụng tối ưu hóa giống nhau không?

CẬP NHẬT

if (theo tài liệu GCC):

Không phải tất cả các tối ưu hóa được điều khiển trực tiếp bởi một lá cờ.

Vậy làm thế nào các nhà nghiên cứu có thể sử dụng để tái tạo chuỗi tối ưu hóa thậm chí nhanh hơn trình tự tối ưu hóa tiêu chuẩn (sử dụng thuật toán tiến hóa họ sử dụng để tạo ra hàng ngàn chuỗi tối ưu hóa và thu thập những với tác động cao nhất về thời gian thực hiện)

là một ví dụ "Acovea" http://hg.ahs3.net/acovea/debian/html/acoveaga.html

và "Cole" http://users.elis.ugent.be/~leeckhou/papers/cgo08.pdf

+3

Có thể có giải thích thỏa mãn hơn, nhưng trên các hệ thống đa nhiệm ưu tiên (ví dụ: tất cả máy tính để bàn, thiết bị di động và máy chủ), luôn có khả năng một điều gì đó khác đang diễn ra. Nói chung, mọi người có xu hướng chạy nhiều kiểm tra thời gian và trung bình chúng ra để có được số hữu ích hơn mà không phải là lòng thương xót của phần mềm sao lưu của bạn :). – Linuxios

+0

1) là mã thực sự giống nhau không? Nếu không: Có thể bạn nên hỏi câu hỏi này tại danh sách gửi thư gcc. Nếu có: phương pháp điểm chuẩn của bạn sai. – Olaf

+0

@Olaf Nếu mã khác - tại sao yêu cầu trên danh sách gửi thư gcc? –

Trả lời

-3

có 2 tốt tối ưu hóa t mũ nên được biết:

  • -O2: Tối ưu hóa không gian và thời gian (thận trọng: không khởi tạo biến)
  • -os: Tối ưu hóa không gian và thời gian (cảnh báo: không khởi tạo biến)
+1

ngoài chủ đề – staticx