11
  Debug.WriteLine("Timer is high-resolution: {0}", Stopwatch.IsHighResolution);
  Debug.WriteLine("Timer frequency: {0}", Stopwatch.Frequency);

結果:

  Timer is high-resolution: True
  Timer frequency: 2597705

この記事(2005年から!)は、私の頻度よりも100万多い3579545の頻度について言及しています。 このブログ投稿では、3,325,040,000の頻度について言及していますが、これは非常識です。

なぜ私の頻度はそれほど比較的低いのですか?私はi7920マシンを使用しているので、もっと速くすべきではありませんか?

4

4 に答える 4

26

3,579,545 はマジック ナンバーです。これは、3 で割って元の IBM PC の 8053 タイマー チップに供給する前のヘルツ単位の周波数です。奇数に見える数字は偶然に選ばれたのではなく、米国と日本で使用されている NTSC TV システムのカラー バースト信号の周波数です。IBM のエンジニアは、発振器を実装するための安価な水晶を探していましたが、すべてのテレビ セットで使用されている水晶よりも安価なものはありませんでした。

IBM のクローンが広く利用可能になった後も、設計者が同じ周波数を選択することは依然として重要でした。多くの MS-DOS ソフトウェアは、その速度で時を刻むタイマーに依存していました。チップに直接アドレス指定することはよくある犯罪でした。

Windowsが登場すると、それが変わりました。Windows 2 のバージョンは、タイマー チップを仮想化した最初のバージョンです。つまり、ソフトウェアがタイマー チップを直接アドレス指定することはできなくなりました。プロセッサは保護モードで実行するように構成されており、I/O 命令を使用しようとする試みをインターセプトしました。代わりにカーネルコードを実行して、命令の戻り値を偽造できるようにします。複数のプログラムが互いに足を踏み入れることなく、タイマーを使用して複数のプログラムを実行できるようになりました。ハードウェアが実際にどのように実装されているかへの依存を断ち切るための重要な最初のステップです。

Win32 API (Windows NT 3.1 および Windows 95) は、API、QueryPerformanceCounter() および QueryPerformanceFrequency() を使用してタイマーへのアクセスを形式化しました。カーネル レベルのコンポーネントであるハードウェア アダプテーション レイヤーにより、BIOS はその周波数を渡すことができます。ハードウェア設計者は、正確な周波数への依存を実際に取り除くことが可能になりました。それには長い時間がかかりました.2000年頃には、大多数のマシンがまだレガシーレートを持っていました.

しかし、PC 設計のコストを削減するという果てしない探求は、それを終わらせました。現在、ハードウェア設計者は、たまたまチップセットですぐに利用できる周波数を選択するだけです。3,325,040,000 はそのような数値であり、おそらく CPU クロック レートです。そのような高周波は、安価な設計、特に AMD コアを搭載した設計では一般的です。あなたの数値はかなり異常です。あなたのマシンが安くなかった可能性があります。また、タイマーがはるかに正確であるため、CPU クロックには典型的な電子部品の許容誤差があります。

于 2010-02-27T01:50:27.577 に答える
7

頻度は HAL (ハードウェア抽象化レイヤー) に依存します。ペンティアムの時代には、CPU ティック (CPU クロック レートに基づく) を使用するのが一般的だったので、非常に高い頻度のタイマーを使用することになりました。

マルチプロセッサとマルチコア マシン、特に可変レート CPU (低電力状態では CPU クロックが遅くなる) では、タイマーが難しくなり、エラーが発生しやすくなるため、CPU ティックを使用するため、HAL の作成者は選択したようです。リアルタイム クロックのように、より低速ですが、より信頼性の高いハードウェア クロックを使用します。

于 2010-02-27T00:00:27.717 に答える
1

2,597,705 = プロセッサの周波数だと思います。マインは 2,737,822 です。i7 930

于 2012-08-03T21:17:46.853 に答える
1

Stopwatch.Frequency の値は 1 秒あたりであるため、頻度が 2,597,705 であるということは、1 秒あたりのティック数が 250 万を超えることを意味します。正確にどのくらいの精度が必要ですか?

周波数の変動に関しては、それはハードウェアに依存するものです。最も一般的なハードウェアの違いには、コア数、各コアの周波数、CPU (またはコア) の現在の電力状態、OS が CPU 周波数を動的に調整できるようにしているかどうかなどがあります。周波数は変わりません。常に同じであり、チェックしたときの CPU の状態に応じて、それより低い場合も高い場合もありますが、一般的にはほぼ同じです (あなたの場合、おそらく約 250 万です)。

于 2010-02-27T00:04:08.133 に答える