2010-03-30 33 views
13

Lưu ý, câu hỏi của tôi không phải là: làm thế nào để tôi nói trình biên dịch của tôi để biên dịch với hồ sơ trên.C++ g ++ llvm-clang trình biên dịch hồ sơ

Tôi muốn tiểu sử quy trình biên dịch của tôi. Đối với mỗi tệp, tôi muốn biết lượng thời gian được sử dụng trên mỗi dòng của chương trình.

Tôi đang làm việc trên một dự án, một số tệp có thời gian biên dịch khổng lồ, tôi đang cố gắng tìm ra lý do.

Có cách nào để thực hiện việc này bằng g ++ hoặc llvm-clang không?

Cảm ơn!

Đầu ra của -v-nghỉ-báo cáo (ý nghĩa của nó) là gì?

Trong phần sau, "phân tích cú pháp" hoặc "mở rộng" việc sử dụng các mẫu?

Execution times (seconds) 
    callgraph construction: 0.06 (2%) usr 0.00 (0%) sys 0.09 (2%) wall 3181 kB (1%) ggc 
    callgraph optimization: 0.05 (2%) usr 0.00 (0%) sys 0.05 (1%) wall 5243 kB (2%) ggc 
    cfg cleanup   : 0.02 (1%) usr 0.00 (0%) sys 0.02 (0%) wall  11 kB (0%) ggc 
    df live regs   : 0.01 (0%) usr 0.00 (0%) sys 0.01 (0%) wall  0 kB (0%) ggc 
    df reg dead/unused notes: 0.03 (1%) usr 0.00 (0%) sys 0.03 (1%) wall 1993 kB (1%) ggc 
    register information : 0.04 (1%) usr 0.00 (0%) sys 0.04 (1%) wall  0 kB (0%) ggc 
    alias analysis  : 0.01 (0%) usr 0.00 (0%) sys 0.01 (0%) wall  450 kB (0%) ggc 
    rebuild jump labels : 0.03 (1%) usr 0.00 (0%) sys 0.03 (1%) wall  0 kB (0%) ggc 
    preprocessing   : 0.12 (4%) usr 0.06 (12%) sys 1.46 (27%) wall 2752 kB (1%) ggc 
    parser    : 0.67 (21%) usr 0.15 (29%) sys 0.89 (16%) wall 91749 kB (36%) ggc 
    name lookup   : 0.15 (5%) usr 0.12 (24%) sys 0.24 (4%) wall 14384 kB (6%) ggc 
    inline heuristics  : 0.03 (1%) usr 0.00 (0%) sys 0.03 (1%) wall  0 kB (0%) ggc 
    tree gimplify   : 0.06 (2%) usr 0.01 (2%) sys 0.09 (2%) wall 15992 kB (6%) ggc 
    tree eh    : 0.02 (1%) usr 0.01 (2%) sys 0.03 (1%) wall 4405 kB (2%) ggc 
    tree CFG construction : 0.01 (0%) usr 0.01 (2%) sys 0.03 (1%) wall 6636 kB (3%) ggc 
    tree CFG cleanup  : 0.02 (1%) usr 0.01 (2%) sys 0.02 (0%) wall  15 kB (0%) ggc 
    tree find ref. vars : 0.00 (0%) usr 0.00 (0%) sys 0.00 (0%) wall 1870 kB (1%) ggc 
    tree SSA rewrite  : 0.01 (0%) usr 0.00 (0%) sys 0.01 (0%) wall 2357 kB (1%) ggc 
    tree SSA other  : 0.00 (0%) usr 0.01 (2%) sys 0.00 (0%) wall  37 kB (0%) ggc 
    tree operand scan  : 0.01 (0%) usr 0.04 (8%) sys 0.06 (1%) wall 6340 kB (2%) ggc 
    tree SSA to normal : 0.05 (2%) usr 0.00 (0%) sys 0.05 (1%) wall  95 kB (0%) ggc 
    dominance computation : 0.04 (1%) usr 0.00 (0%) sys 0.04 (1%) wall  0 kB (0%) ggc 
    expand    : 0.60 (18%) usr 0.03 (6%) sys 0.71 (13%) wall 45557 kB (18%) ggc 
    varconst    : 0.02 (1%) usr 0.00 (0%) sys 0.02 (0%) wall 3532 kB (1%) ggc 
    jump     : 0.00 (0%) usr 0.00 (0%) sys 0.00 (0%) wall 1745 kB (1%) ggc 
    mode switching  : 0.01 (0%) usr 0.00 (0%) sys 0.01 (0%) wall  0 kB (0%) ggc 
    integrated RA   : 0.35 (11%) usr 0.00 (0%) sys 0.35 (6%) wall 5259 kB (2%) ggc 
    reload    : 0.29 (9%) usr 0.01 (2%) sys 0.31 (6%) wall 6490 kB (3%) ggc 
    thread pro- & epilogue: 0.10 (3%) usr 0.01 (2%) sys 0.13 (2%) wall 4832 kB (2%) ggc 
    final     : 0.19 (6%) usr 0.01 (2%) sys 0.21 (4%) wall 2985 kB (1%) ggc 
    symout    : 0.25 (8%) usr 0.01 (2%) sys 0.26 (5%) wall 27322 kB (11%) ggc 
    TOTAL     : 3.25    0.51    5.49    256741 kB 
+0

Đây là điều tốt nhất bạn có thể nhận được. Không thể thấy thời gian của các dòng C++ riêng lẻ nhưng ở đây bạn có thể thấy vấn đề là với bộ tiền xử lý, hoặc trình phân tích cú pháp hay bất kỳ bước trình biên dịch nào khác. Tệp của bạn đã được biên soạn chỉ trong 3,25 giây. – bitc

Trả lời

7

Hãy thử những tùy chọn dòng lệnh với g ++

-v -ftime-báo cáo

Điều đó sẽ cung cấp cho bạn thêm thông tin về quá trình biên dịch. Thủ phạm thường là mẫu.

+0

Như một phương sách cuối cùng, bạn có thể nhận xét nội dung để tìm những gì đang tốn nhiều thời gian nhất. – bitc

1

Đối với dòng tiền xử lý còn một chút gợi ý:

"0.12 (4%) usr 0,06 (12%) sys 1,46 (27%) tường" - dòng này cho biết, tiền xử lý đó là để làm công việc nhỏ trên CPU chính nó (0,12), nhưng sử dụng các cuộc gọi hệ thống khá nặng (0,06 hoặc 50% thời gian CPU của người dùng) và hầu hết thời gian đã bị lãng phí không phải trên CPU (1,46 thời gian thực >> 0,18 giây cpu). Vì vậy, thời gian này đã được lãng phí trong chờ đợi một hoạt động I/O HOẶC chờ đợi cho CPU trên hệ thống bận rộn. Điều này có chạy chương trình làm việc duy nhất trên máy không?

Đối với I/O bạn có thể làm: thêm noatime vào fs để giảm số lượng I/O req, mua nhanh hơn (về thời gian tìm kiếm thấp hơn hoặc tốc độ IO cao hơn) HDD, di chuyển nguồn clang sang SSD hoặc thậm chí RAM- ổ đĩa (thiết bị vòng lặp). Và bạn không thể làm chống phân mảnh, bởi vì nó là linux.

Để biết ý nghĩa của việc vượt qua, hãy sử dụng http://gcc.gnu.org/onlinedocs/gccint/Passes.html#Passes

+0

Đối với ý nghĩa của dòng: Giới thiệu ngắn gọn về gcc http://www.cse.iitb.ac.in/~uday/gcc-mini-workshop/gcc-internals-1.pdf Bản trình bày về RTL http: //www.cse .iitb.ac.in/grc/gcc-workshop-09/downloads/gccw09-rtl.pdf – osgx

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