2013-06-27 21 views
6

Câu hỏiLàm thế nào để cấu hình khóa các ganh đua dưới g ++/std :: mutex?

Có bất kỳ công cụ mã nguồn mở hoặc không ai có bất kỳ kỹ thuật/code cho profiling mức độ std::mutex tranh cãi trong việc điều hành mã?

Tôi muốn tính phần trăm tranh chấp khóa ở mức độ chi tiết (theo thời gian hoặc số) của từng trường hợp std::mutex. Nếu có công cụ thả xuống không yêu cầu mã hóa, điều đó thậm chí còn tốt hơn.

Tôi đang tìm một kỹ thuật sẽ hoạt động với std::thread và g ++: ở lối ra của ứng dụng, tôi muốn loại bỏ một hồ sơ thống kê tranh chấp mutex thành tệp nhật ký, để tôi có thể theo dõi chất lượng của luồng luồng theo ngữ cảnh chạy thực tế.

Note

Tôi đã thấy this thread. Thật không may, các câu trả lời hoặc yêu cầu một đống tiền mặt hoặc chạy trên Windows.

Trả lời

4

Tôi khuyên bạn nên sử dụng một cái gì đó như AMD CodeXL hoặc Intel VTune. CodeXL miễn phí; Intel VTune có giấy phép học tập miễn phí nếu có thể áp dụng cho bạn hoặc bạn có thể dùng thử 30 ngày. Cả hai đều làm việc trong Linux.

Ở cấp độ cơ bản nhất, các công cụ này có thể xác định các điểm nóng bằng ví dụ: đo lượng thời gian bạn sử dụng bên trong các phương thức std::mutex. Có các kỹ thuật/công cụ phân tích nâng cao khác được bao gồm trong mỗi công cụ có thể giúp bạn nhiều hơn nữa. Bạn không cần phải thay đổi mã của mình chút nào, mặc dù bạn có thể cần phải kiểm tra xem bạn đã biên dịch với các biểu tượng gỡ lỗi và/hoặc chưa loại bỏ các tệp nhị phân chưa. Bạn cũng có thể muốn tránh xa các mức tối ưu hóa cực độ như -O3 và dính vào -O1, -O2 hoặc -Og.

PS: Như sẽ tất cả các thắc mắc tối ưu hóa, tôi phải nhắc nhở bạn luôn đo nơi vấn đề hiệu suất của bạn thực sự là trước khi bạn bắt đầu tối ưu hóa. Không có vấn đề làm thế nào lo lắng bạn về tranh chấp khóa, xác nhận mối quan tâm của bạn với một profiler trước khi bạn dành những nỗ lực rất lớn cố gắng để giảm bớt bất cứ điều gì khóa ganh đua bạn có thể hoặc có thể không có.

+0

Sẽ không 'gprof' cung cấp khá nhiều thông tin giống nhau (mặc dù hơi thiên vị)? – rubenvb

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