2010-07-05 34 views
5

Tôi đã thử lược tả chương trình C++ của mình bằng gprof. Chương trình tự chạy trong khoảng 53 giây, vì vậy tôi không hiểu tại sao nó nói, chính chỉ chạy trong khoảng 8,29 giây. Bất kỳ lời giải thích về điều này?C++ chính chỉ sử dụng ~ 20% thời gian nói gprof

Dưới đây là một đoạn trích:

kết quả
index % time self children called  name 
               <spontaneous> 
[2]  20.5 0.00 8.29     main [2] 
       0.00 8.28  1/1   MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3] 
       0.00 0.01  1/1   MPQS::MPQS(NTL::ZZ, long) [36] 
       0.00 0.00  1/1   MPQS::~MPQS() [78] 
----------------------------------------------- 
       0.00 8.28  1/1   main [2] 
[3]  20.5 0.00 8.28  1   MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3] 
       7.15 1.08  801/801   MPQS::sieve() [4] 
       0.00 0.04  801/801   MPQS::find_smooth_vals() [23] 
       0.01 0.00  1/1   MPQS::try_solutions(NTL::mat_GF2&) [35] 
       0.00 0.00  801/801   MPQS::compute_coeffecients() [59] 
----------------------------------------------- 
       7.15 1.08  801/801   MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3] 
[4]  20.4 7.15 1.08  801   MPQS::sieve() [4] 
       1.08 0.00  801/801   MPQS::find_candidates() [9] 
+0

Có phải đo thời gian đồng hồ treo tường hoặc thời gian CPU tích lũy thực tế được sử dụng bởi quy trình của bạn không? – csl

+0

Bạn đã thử chạy mã của mình thông qua lệnh unix 'time' chưa? Điều đó sẽ cho bạn thấy thời gian đồng hồ treo tường so với thời gian không gian người dùng (mã của bạn) so với thời gian hạt nhân. Bạn có mong đợi mã của bạn được IO ràng buộc hoặc CPU bị ràng buộc? – Rup

+1

@Rup: "MPQS" gần như chắc chắn là viết tắt của "Đa đa thức bậc hai sàng", một thuật toán cho bao thanh toán số lượng lớn. Tôi hy vọng nó sẽ được * rất nhiều * CPU bị ràng buộc. –

Trả lời

2

Có phải bạn in ra cửa sổ Console? gprof không tính thời gian bị chặn. See this.

+0

Tôi hẹn giờ theo chương trình bằng cách sử dụng một hàm GetTime(), được cung cấp bởi thư viện NTL C++. Nó đo thời gian quá trình đang chạy trên CPU. Nó nói khoảng 53 giây. Tôi đầu vào chương trình ngay từ đầu, nhưng thời gian thủ công của tôi, sử dụng GetTime() không bắt đầu cho đến sau đó. 53 giây phù hợp rất tốt với những gì tôi quan sát thấy khi nhìn vào đồng hồ trên máy tính của tôi. Tôi chưa thử chạy nó bằng lệnh thời gian, làm cách nào để thực hiện điều đó? Tôi không biết nếu tôi mong đợi nó được CPU ràng buộc hoặc IO bị ràng buộc. –

+1

Ahh, do đó, tất nhiên là số tiền gprof trong thời gian tôi chi tiêu cho đầu vào cho chương trình! Đây là lý do tại sao nó nói chính là thực sự chỉ chạy cho một số lượng nhỏ thời gian. Tôi sẽ cố gắng mã hóa đầu vào của tôi vào chương trình và xem kết quả! –

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