2010-02-26 28 views
9
Debug.WriteLine("Timer is high-resolution: {0}", Stopwatch.IsHighResolution); 
    Debug.WriteLine("Timer frequency: {0}", Stopwatch.Frequency); 

Kết quả: (! Từ 2005)Tại sao tính năng Stopwatch.Frequency của tôi quá thấp?

Timer is high-resolution: True 
    Timer frequency: 2597705 

This bài viết đề cập đến một Tần suất 3.579.545, một triệu hơn tôi. This bài đăng trên blog đề cập đến Tần suất 3.325.040.000, tức là mất trí.

Tại sao tần suất của tôi lại thấp hơn nhiều? Tôi đang sử dụng máy i7 920, vì vậy không nên nhanh hơn?

+1

Đây có phải là máy tính xách tay không? Thông thường, tốc độ đồng hồ của máy được thu nhỏ tùy thuộc vào trạng thái pin/nguồn. – Nick

+0

Đó là một máy tính để bàn. Tôi có cài đặt nguồn được đặt ở chế độ Hiệu suất Cao; tốc độ xung nhịp bộ xử lý là mặc định (2,66 GHz). –

Trả lời

22

3,579,545 là số ma thuật . Đó là tần số trong Hertz trước khi chia cho 3 và cho nó vào chip bộ định thời 8053 trong máy tính IBM gốc. Số lượng tìm kiếm kỳ lạ không được chọn ngẫu nhiên, nó là tần số của color burst signal trong hệ thống truyền hình NTSC được sử dụng ở Mỹ và Nhật Bản. Các kỹ sư của IBM đang tìm kiếm một tinh thể rẻ để thực hiện bộ dao động, không có gì rẻ hơn so với cái được sử dụng trong mỗi bộ TV.

Khi các bản sao của IBM trở nên phổ biến rộng rãi, điều quan trọng là các nhà thiết kế của họ phải chọn cùng một tần số. Rất nhiều phần mềm MS-DOS dựa vào bộ đếm thời gian ở tốc độ đó. Trực tiếp giải quyết chip là một tội phạm phổ biến.

Điều đó đã thay đổi khi Windows xuất hiện. Phiên bản Windows 2 là phiên bản đầu tiên ảo hóa chip hẹn giờ. Nói cách khác, phần mềm không được phép trực tiếp giải quyết chip hẹn giờ nữa. Bộ vi xử lý được cấu hình để chạy trong chế độ được bảo vệ và chặn nỗ lực sử dụng lệnh I/O. Chạy mã hạt nhân thay vào đó, cho phép giá trị trả về của lệnh được giả mạo. Giờ đây, có thể có nhiều chương trình bằng cách sử dụng bộ hẹn giờ mà không cần phải đẩy mạnh các ngón chân của nhau. Một bước quan trọng đầu tiên để phá vỡ sự phụ thuộc vào cách phần cứng thực sự được thực hiện.

API Win32 (Windows NT 3.1 và Windows 95) đã chính thức truy cập bộ hẹn giờ với API, QueryPerformanceCounter() và QueryPerformanceFrequency(). Một thành phần mức hạt nhân, Lớp phần cứng thích ứng, cho phép BIOS vượt qua tần số đó. Bây giờ nó đã có thể cho các nhà thiết kế phần cứng để thực sự thả phụ thuộc vào tần số chính xác. Phải mất một thời gian dài btw, khoảng 2000 phần lớn các máy vẫn có tỷ lệ di sản.

Nhưng nhiệm vụ không ngừng để cắt giảm chi phí trong thiết kế PC đã chấm dứt điều đó.Ngày nay, nhà thiết kế phần cứng chỉ chọn bất kỳ tần số nào xảy ra có sẵn trong chipset. 3.325.040.000 sẽ là một con số, nó có lẽ là tốc độ xung nhịp CPU nhất. Tần số cao như vậy là phổ biến trong các thiết kế giá rẻ, đặc biệt là những thiết bị có lõi AMD. Số của bạn là khá bất thường, một số tỷ lệ cược rằng máy của bạn không hề rẻ. Và rằng bộ đếm thời gian chính xác hơn rất nhiều, đồng hồ CPU có dung sai thành phần điện tử điển hình.

+0

nobugz, cảm ơn bạn đã trả lời chi tiết. Bạn có thể mở rộng đoạn cuối của mình không? Dường như với tôi rằng một tần số cao hơn sẽ cấp độ chính xác tăng lên: với một freq hẹn giờ. của 3.3ghz, tôi ở độ phân giải 3 nano giây, trong khi với freq của tôi., Tôi đang ở 385ns. –

+3

Vâng, bạn đã có độ phân giải ít hơn rất nhiều. Nhưng bộ đếm thời gian của bạn có lẽ chính xác hơn rất nhiều. Tốc độ xung nhịp CPU 3,3 GHz thường chỉ chính xác 10%. Tôi không biết thực tế, nó phụ thuộc vào cách tín hiệu được tạo ra. Bất cứ điều gì chạy ở một megahertz hoặc tốt hơn là rất tốt đủ cho phần mềm thời gian, jitter do luồng là rất nhiều tồi tệ hơn thế. –

+0

@SamPearson Vì vậy, có thể anh chàng từ bài thứ hai, với 3.325.040.000 ve mỗi giây, có 'Stopwatch.IsHighResolution' được đặt thành False, vì hệ thống của anh ấy sử dụng" đồng hồ "CPU trực tiếp, dẫn đến độ chính xác ± 10% theo Hans. Nếu đây là ý nghĩa của 'IsHighResolution', tôi nghĩ rằng lựa chọn thuật ngữ" độ phân giải "là không may, vì rõ ràng 3.325.040.000 đếm mỗi giây là" độ phân giải "cao hơn 2.597.705 lần mỗi giây. Độ phân giải là cái gì đó khác với độ chính xác hoặc không chắc chắn. –

6

Tần số phụ thuộc vào HAL (lớp trừu tượng phần cứng). Quay trở lại trong những ngày pentium, nó đã được phổ biến để sử dụng đánh dấu CPU (được dựa trên tỷ lệ xung nhịp CPU), do đó bạn đã kết thúc với bộ đếm thời gian thực sự cao.

Với máy đa xử lý và đa lõi, và đặc biệt là với CPU tốc độ biến đổi (đồng hồ CPU chậm lại cho trạng thái nguồn thấp) bằng cách sử dụng CPU đánh dấu khi bộ hẹn giờ trở nên khó khăn và dễ bị lỗi, vì vậy các tác giả của HAL dường như đã chọn sử dụng đồng hồ phần cứng chậm hơn nhưng đáng tin cậy hơn, như đồng hồ thời gian thực.

1

Giá trị Stopwatch.Frequency là mỗi giây, do đó tần suất của bạn là 2.597.705 có nghĩa là bạn có hơn 2,5 triệu bọ ve mỗi giây. Chính xác bạn cần bao nhiêu độ chính xác?

Đối với các biến thể về tần suất, đó là điều phụ thuộc phần cứng. Một số sự khác biệt phần cứng phổ biến nhất là số lõi, tần số của mỗi lõi, trạng thái nguồn hiện tại của cpu (hoặc lõi) của bạn, cho dù bạn đã bật hệ điều hành để điều chỉnh động tần số cpu, v.v. luôn luôn giống nhau, và tùy thuộc vào trạng thái của CPU của bạn khi bạn kiểm tra nó, nó có thể thấp hơn hoặc cao hơn, nhưng thường xung quanh giống nhau (cho bạn, có lẽ khoảng 2,5 triệu.)

1

Tôi nghĩ rằng 2.597,705 = tần suất bộ xử lý của bạn. Myne là 2.737.822. i7 930

+2

Khó. 2.6 MHz sẽ là một tần số xử lý khá chậm trong những ngày này;) –

+0

Yeap, bạn đã đúng! Xin lỗi vì chuyện đó. Anh chàng đã làm điều gì đó sai trái. Tôi nghĩ Đồng hồ bấm giờ không hoạt động tốt ở chế độ gỡ lỗi. – Pedro77

+0

:). Đồng hồ bấm giờ & gỡ lỗi ... rất nhiều bài viết tôi muốn chỉ trở lại ... nó đi xuống đến -> đo lường hiệu suất là ** cao ** khôn lanh. Chỉ để cho vui: Tần số của tôi: 3,320,390, I7 2600k. – Noctis

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