2011-01-05 32 views
12

Tôi tò mò xem có ai có đề xuất về thư viện thử nghiệm hiệu suất và giao diện người dùng sẽ tạo ra các biểu đồ đồ họa đẹp cho C++ hay không. . Có khả năng tạo ra các bảng xếp hạng như:Tiện ích kiểm tra hiệu năng cho C++

http://download.eclipse.org/eclipse/downloads/drops/S-3.7M4-201012081300/performance/performance.php?fp_type=0

sẽ là khá trơn. Chúng tôi sử dụng cppunit ngay bây giờ để thử nghiệm đơn vị, vì vậy có thể có một cái gì đó tích hợp với điều đó.

Một số thông tin khác: Chúng tôi đang biên dịch trên Linux (chúng tôi sử dụng Ubuntu Lucid/Maverick) trên các máy Intel x86-64.

+0

http://stackoverflow.com/questions/4394606/beyond-stack-sampling-c-profilers, có danh sách liên tục thú vị về những điều như vậy ... – Nim

+0

Điều này phụ thuộc phần lớn vào hệ điều hành và CPU bạn đang chạy như những gì có sẵn ... bạn đang tìm kiếm nhiều hơn cho thử nghiệm tự động hoặc hồ sơ hiệu suất? – AJG85

+0

Tôi đã nghĩ về một thiết lập thử nghiệm hồi quy tự động sẽ được đặc biệt hướng đến các chỉ số hiệu suất. Nó sẽ được mát mẻ để tận dụng cppunit, nhưng nó không cần thiết và tôi muốn được quan tâm đến bất kỳ loại khai thác thử nghiệm hiệu suất. Hồ sơ sẽ là bước chúng tôi sẽ thực hiện sau khi các thử nghiệm hồi quy của chúng tôi lưu ý một số thời gian chạy lớn hoặc tương tự. –

Trả lời

4

Một số gợi ý:

  • Các googletest C++ khuôn khổ có khả năng sản xuất các báo cáo JUnit tương thích.
  • Hudson có thể được sử dụng để chạy thử nghiệm của bạn. Nó chỉ yêu cầu ứng dụng C++ của bạn có thể chạy như một ứng dụng giao diện điều khiển.
  • Hudson Performance Plugin có thể tạo biểu đồ đồ họa từ báo cáo JUnit.
  • Có rất nhiều khác plugins.
2

Trên Linux, bạn có thể thử bộ công cụ valgrind. Valgrind bao gồm công cụ callgrind có thể cấu hình mã của bạn. KCacheGrind hình dung đầu ra của cachegrind rất độc đáo.

+1

Ý tưởng không phải là cấu hình mã, mỗi lần, nó tạo ra một hệ thống xây dựng hàng đêm có thể thông báo cho chúng ta về các hồi quy hiệu suất bằng cách lấy một số chỉ số đơn giản (thậm chí có thể chỉ là thời gian chạy). kiểm tra đơn vị mà chúng tôi sẽ có. Vì vậy, chúng tôi không đặc biệt muốn công cụ mã của chúng tôi, chúng tôi chỉ muốn xem hiệu suất thô của nó. –

+0

@Kenny: Bạn có thể phân tích đầu ra của 'cg_diff' để tạo ra loại biểu đồ bạn muốn. –

2

Một số lưu ý có liên quan hy vọng từ trải nghiệm của tôi về loại điều này trong câu trả lời herehere.

Không có lý do thiết lập CppUnit hiện tại của bạn kết hợp với một cái gì đó như scoped_timer (xem phần thứ hai) và một chút xử lý sau cho một số biểu đồ có thể không thỏa mãn nhu cầu của bạn. Trong khi tôi tin CppUnit bao gồm một plugin ("Clocker"?) Sẽ đăng xuất thời gian không nhất thiết, tôi không nghĩ nó thực sự hữu ích cho loại thử nghiệm hiệu suất này trong thực tế bởi vì bạn luôn mong muốn thời gian chỉ là một phần của mỗi bài kiểm tra và không phải tất cả mã thiết lập.

1

Có hai khung kiểm tra hiệu suất có thể giúp bạn.

Cả hai đều được lấy cảm hứng từ khung Google thử nghiệm và cung cấp giao diện để hỗ trợ thực hiện thử nghiệm, vì vậy nó dễ dàng để vận chuyển googletest ban đầu của bạn đến Hayai hoặc SkyPat.

SkyPat kết hợp kiểm tra đơn vị và perf_evnet. Nó mở rộng khái niệm về Google Test và cung cấp một giao diện để truy cập PMU. perf_event cho số lượng chu kỳ chính xác là hữu ích cho các công cụ nhạy cảm với phương sai thời gian, chẳng hạn như trình biên dịch. SkyPat cũng có thể lập cấu hình một đoạn mã bằng các sự kiện PMU (eq: chu kỳ, hướng dẫn, tham chiếu bộ nhớ cache, bộ nhớ cache bị bỏ lỡ, v.v.).

Hayai hỗ trợ một số phương pháp đo lường hiệu suất của hệ điều hành khác nhau (Windows: QueryPerformanceCounter(), Linux: gethrtime(), Apple (OSX, iOS): mach_absolute_time()) vào khuôn khổ kiểm tra hiệu quả của nó.

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