2010-07-15 38 views
6

Tôi muốn viết một loạt các tối ưu hóa cho gcc bằng thuật toán di truyền. Tôi cần đo thời gian thực hiện của một chức năng lắp ráp cho một số chỉ số và chức năng phù hợp. Không thể sử dụng phép đo thời gian thông thường, vì nó bị ảnh hưởng bởi kích thước bộ nhớ cache.
Vì vậy, tôi cần một bảng nơi tôi có thể thấy một cái gì đó như thế này.Làm thế nào để đo thời gian thực thi lệnh x86 và x86-64 trong các chu kỳ xử lý?

command | operands | operands sizes | execution cycles 

Tôi có hiểu nhầm điều gì đó không? Xin lỗi vì tiếng Anh xấu.

+0

Tiếng Anh của bạn vẫn ổn. Tôi không biết ngày nào sẽ đến khi những người tìm kiếm một vài phần trăm tăng tốc thông qua tối ưu hóa vi mô cũng sẽ hiểu giá trị của việc nhận được nhiều yếu tố tăng tốc thông qua tối ưu hóa macro, mà trình biên dịch không thể làm được. –

+0

Có thể trùng lặp [Cần bao nhiêu chu kỳ CPU cho mỗi lệnh lắp ráp?] (Http://stackoverflow.com/questions/692718/how-many-cpu-cycles-are-needed-for-each-assembly-instruction) –

Trả lời

2

Với CPU hiện đại, không có bảng đơn giản để tìm kiếm bao lâu một lệnh sẽ thực hiện để hoàn thành (mặc dù bảng như vậy tồn tại đối với một số bộ xử lý cũ, ví dụ 486). Thông tin tốt nhất của bạn về những gì từng hướng dẫn và thời gian thực hiện từ nhà sản xuất chip. Ví dụ. Intel's documentation manuals khá tốt (cũng có hướng dẫn tối ưu hóa trên trang đó).

Trên khá nhiều CPU hiện đại, cũng có lệnh RDTSC đọc bộ đếm thời gian cho bộ xử lý mà mã đang chạy vào EDX:EAX. Có những cạm bẫy với điều này, nhưng về cơ bản nếu mã bạn đang lược tả là đại diện của một tình huống sử dụng thực, việc thực thi của nó không bị gián đoạn hoặc chuyển sang lõi CPU khác, thì bạn có thể sử dụng lệnh này để lấy thời gian bạn muốn. I E. bao quanh mã bạn đang tối ưu hóa với hai hướng dẫn RDTSC và lấy sự khác biệt trong TSC làm thời gian. (Các khác biệt về thời gian trong các bài kiểm tra/tình huống khác nhau có thể là tuyệt vời; số liệu thống kê là bạn của bạn.)

1

Bạn có thể thiết lập mã của mình bằng cách lắp ráp (rdtsc và bạn bè) hoặc sử dụng API thiết bị đo đạc như PAPI. Chính xác đo chu kỳ đồng hồ đã được chi tiêu trong quá trình thực hiện một hướng dẫn là không thể, tuy nhiên - bạn có thể tham khảo hướng dẫn phát triển kiến ​​trúc của bạn cho các ước tính tốt nhất.

Trong cả hai trường hợp, bạn nên cẩn thận khi tính đến các hiệu ứng tài khoản khi chạy trên môi trường SMP.

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