2008-10-26 38 views
5

Joe Duffy nêu trong bài viết MSDN "Using concurrency for scalability" rằng chi phí tạo chuỗi là khoảng 200.000 chu kỳ và chi phí hủy là khoảng 100.000 chu kỳ.Đo chi phí chủ đề

Khi tôi cố gắng tạo một chuỗi mới để thực hiện một số phép tính, tôi muốn chắc chắn rằng các phép tính của chúng đắt hơn 200.000 chu kỳ.

Làm cách nào để đo chu kỳ CPU? Tôi nghĩ nó sẽ thú vị hơn là đo thời gian thực hiện.

+0

Bạn có lẽ nên thêm chi phí của bộ nhớ cache hướng dẫn xóa ý nghĩa với chi phí sử dụng đề tài. – Hugo

Trả lời

2

Bạn có thể sử dụng lược tả lấy mẫu như Vtune của Intel để có thể đo lường số lượng chu kỳ CPU đang được tiêu thụ với số lượng nhiễu tối thiểu trên hệ thống đang được đo.

Khi sử dụng chủ đề, tuy nhiên mục tiêu là để tránh các luồng mới không cần thiết. Xem xét sử dụng thread pool. Điều này sẽ cho phép bạn chạy các mục công việc không đồng bộ, nhưng không cần phải sinh ra một luồng mới cho mỗi mục.

+0

mod +1 cho lời khuyên về nhóm chủ đề! –

+0

Các hồ bơi chủ đề chỉ hồ bơi thread hiện có; nếu một chủ đề vẫn chưa được tạo, chi phí tạo giống như tôi sẽ không sử dụng bất kỳ nhóm luồng nào. –

+0

Có, tạo chủ đề sẽ giống nhau nếu bạn thực hiện hoặc nhóm chủ đề. Nhưng hồ bơi thread giúp tránh tạo ra không cần thiết bằng cách giữ một số chủ đề nhàn rỗi xung quanh. Nếu các mục công việc của bạn đủ nhỏ để tránh chi phí tạo ra, chúng nghe có vẻ thích hợp cho một threadpool. –

1

Tôi sẽ kiểm tra không gian tên System.Diagnostic. Nó có rất nhiều thứ về theo dõi bộ nhớ và cách sử dụng CPU.

0

Tôi hỏi một câu hỏi có liên quan chặt chẽ một vài ngày trước đây, và vẫn chưa không tìm thấy một cách để đo lường việc sử dụng chu kỳ CPU thực tế của mã: Limiting assembly execution number of cpu cycles

Trong trường hợp của bạn, bạn có thể không chạy một hồ sơ của phép tính và xem thời gian tính toán một lần, và so sánh với thời gian tổng hợp của việc tạo ra một chuỗi tính toán và sau đó loại bỏ chuỗi đó sau đó?

0

Đây là vấn đề với việc đếm chu kỳ CPU. Các CPU khác nhau có số chu kỳ khác nhau để thực hiện cùng một lệnh. Vì vậy, nó không quá đáng tin cậy một IMO số liệu. Tôi nghĩ những gì bạn nên đo là thời gian để thực hiện, và trong .NET, bạn sử dụng System.Environment.TickCount để thực hiện điều này. Tôi nghĩ rằng đó là điều tốt nhất mà bạn có ...

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