4

いくつかのマイクロベンチマークを行い、それらを正しく実行したいと考えています。残念ながら、動的な周波数スケーリングでは、ベンチマークの信頼性が非常に低くなります。

動的周波数スケーリングが有効になっているかどうかをプログラム (C++、Windows) で確認する方法はありますか? 場合、これをプログラムで無効にできますか?

実際のベンチマークが行われる前に 1 秒間 100% の CPU を使用するウォームアップ フェーズを使用しようとしましたが、これも信頼できないことが判明しました。

更新: BIOS で SpeedStep を無効にしても、cpu-z は周波数が 1995 から 2826 GHz の間で変化することを示します

4

3 に答える 3

8

一般に、次の手順を実行する必要があります。

  • SystemPowerCapabilitiesを呼び出してInformationLevelパラメーターにCallNtPowerInformation()渡し、 lpInputBuffernInputBufferSizeをに設定してから、 lpOutputBufferSYSTEM_POWER_CAPABILITIES構造体に設定し、 nOutputBufferSizeを構造体のサイズに設定します。この最初の呼び出しの後、現在のシステム電源機能を含む構造体。システムがプロセッサ スロットリングをサポートしているかどうかを確認するには、ProcessorThrottleの値を読み取ります。NULLSYSTEM_POWER_CAPABILITIES

  • 関心のある他の 2 つのメンバーは、ProcessorMinThrottleProcessorMaxThrottleです。これらは、サポートされているシステム プロセッサのスロットリングの最小レベルと最大レベルをパーセンテージで表したものです。両方のメンバーの値が既に 100% になっている場合、これは CPU スロットリングが現在無効になっていることを意味するため、再構成する必要はありません。

  • CPU スロットリングを無効にするには、 ProcessorMinThrottleProcessorMaxThrottleをに設定する必要があります100%。これを行うには、CallNtPowerInformation()再度呼び出してSystemPowerCapabilitiesInformationLevelパラメーターに渡します。ただし、lpInputBufferを、2 つのメンバーが に設定されている SYSTEM_POWER_CAPABILITIES 構造体に設定し100%ます。私はあなたが次に何をすべきかを知っていると確信しています。

非プログラム的な方法で、Windows の組み込みコマンド ライン ツール、つまりPowerCfgを使用して Windows電源オプションを取得/設定することもできます。

参考文献

于 2010-10-20T09:16:39.203 に答える
0

Windows XP 以降では、CPU 速度は電源ポリシーによって管理されます。Windows の電源管理ダイアログで「最大パフォーマンス」モードを設定すると、スケーリングがオフになりませんか?

SpeedSwitchXPなどのサードパーティ ツールもあります。

CallNtPowerInformation関数を使用して、プログラムでこれを行うことができると思います。

于 2010-10-20T07:53:51.897 に答える