2017-03-25 11 views
0

特定のオペレーティングシステムから周波数または電圧スケーリングを行う方法について多くの質問がありますが、私はそれに興味がありません。私はコンパイラのバックグラウンドから来て、コンパイルされているアプリケーションに関する情報があれば、コンパイラが周波数スケーリングをどのように実行できるかを知りたいと思います。ダイナミックな電圧と周波数のスケーリングはソフトウェアからどのように制御できますか?

具体的には、特定のアセンブリ命令がCPUで使用される周波数や電圧を変更するために使用されているのか、それとも別のものであるのかを知りたいと思います。

+0

いいえ、特定のアセンブリ命令がありません。通常、これらのような動的な変更は、CPU自体および/またはチップセットのハードウェアによって管理されます。 –

+0

[このインテル®AMTテクノロジーへのリンク](https://en.wikipedia.org/wiki/Intel_Active_Management_Technology)は、いくつかのヒントを提供します。ある意味では – zx485

+2

'wrmsr'です。しかし、詳細はモデルに依存しており、ユーザーモードからは使用できません。 – harold

答えて

3

電圧と周波数のスケーリングは、通常、ハードウェアとソフトウェアの組み合わせによって制御されます。

詳細はハードウェア固有のものであるため、完全に一般的な回答は得られません。したがって、以下のほとんどはIntel x86ハードウェアに適用されます。他の「大きな」CPUも同様の可能性がありますが、マイクロコントローラのようなものは全く異なるでしょう。

上記の「ソフトウェア」部分は、アプリケーションから制御できることをいくつか期待するかもしれませんが、ソフトウェアの側面は一般的にカーネルに限定されている場合もあれば、ルートとして実行されるプロセスもあります。特に、最新のインテルの周波数制御のほとんどは、MSRレジスタを使用して調整することができ、msrカーネルモジュールとrdmsrおよびwrmsrコマンドを使用して、これをユーザランドからアクセスできます。

これは、あなたは物事がめちゃくちゃ行くかもしれので、カーネルはまた、設定されたMSRを変更しているので、変更内容を任意に取り消すことがあり、物事の推奨方法ではありません、など

最近の傾向でx86はハードウェアにさらに多くの「周波数制御」ループをプッシュすることで、より迅速に対応し、アプリケーションが実行しないアプリケーションの動作に関するきめ細かな指標にアクセスすることができます。 Intel上では、これはいわゆるHWP(ハードウェアP-states)で、Linux用のドライブ(最近のIntelではデフォルト)やWindows上の同様のものでintel_pstateドライブに実装されています。ここでは、ソフトウェアはハードウェアに一般的なヒントを与えることに任せられていますが、一般的に周波数を直接制御するわけではありません。

最終的に電圧については、これは一般的にx86上で一般的に直接制御することすらできません。あなたはMSRを介してできることを設定し、電圧はハードウェアによって適切なレベルに設定されます。特定のマザーボードや「熱狂的な」CPUは、実行時に電圧を直接設定できるドライバを提供するかもしれませんが、これは普遍的ではありません。

関連する問題