web-dev-qa-db-ja.com

CPU負荷分散を制御するBIOS設定はありますか?

私は、長時間実行されているシングルスレッドタスクの場合、ホームPCがプロセス全体の単一の論理コアに全使用量を割り当てていることに気付きました。ただし、まったく同じプロセスの場合、私の仕事用PCはすべてのコア間で負荷を共有します(各コアはシングルスレッドプロセスの実行時に順番をとります)。

どちらのPCもWindows 10を実行しています。私の自宅のPCは、CPUとマザーボードが異なります(ASUS ROG 11thエディション)。

これはどのプロセスにも当てはまるようですが、テストしたばかりの例は私が作成したRスクリプトです。まったく同じRスクリプト、同じバージョンのRを実行している両方のPCは、CPU負荷分散へのアプローチが異なります。さらに悪いことに、私の家庭用PCは常にこの種のことのためにCPU0を使用しているようです。

負荷を均等に分散させるために自宅のPCに適用できるBIOS設定があることを願っています。ある?

13
Chechy Levas

最も可能性の高い原因は、ホームマシンがWindows 10スケジューラーの機能を利用していることだと考えています。これは、「推奨コア」サポートとして広く知られ、低パフォーマンスのコアよりも高パフォーマンスのコアを優先します。 2018年以前は、デスクトップCPUは一般に、どのコアに配置しても、同じ速度でスレッドを実行すると信頼できました。理論上、1つのコアが特定の電圧で別のコアよりも高い周波数で実行できる場合でも、CPUはそれを可能にするように設計されていません。

この状況の変化が広まったのは、2018年にAMDのZen + Ryzen CPUが登場したときだけです。これらのモデルにより、AMDは、混合品質のコアを持つCPUが、負荷のかかっているコアに応じて異なるクロック周波数にブーストできるようにしました。これは、パフォーマンスプロファイルに関係なく、スケジューラがスレッドをすべてのコアにスワップすると、ほとんど効果がなくなりました。コアを「CCX」と呼ばれるグループに分割するAMDのアーキテクチャにより、パフォーマンスのペナルティがさらに悪化しました。 CCX内のあるコアから別のコアにスレッドを転送する方が、異なるCCX間でスレッドを分散するよりも高速です。

Intelの「Extreme Edition」CPUも、この種の明示的な混合パフォーマンスサポートを備えています。彼らはそれを Intel Turbo Boost Max Technology 3. と呼んでいます。 Intelは、これをサポートするWindows 10の最も古いバージョンは "RS5"であり、1809のように見えると述べています。

インテル®ターボブーストマックステクノロジー3.0を使用すると、プロセッサーの最高速のコアを特定し、最も重要なワークロードをそれらに向けることで、軽くスレッド化されたパフォーマンスが最適化されます。

2019年まで、Windowsのすべてのバージョンは、これらの事実を無視し、AMD CPUのすべての物理コアにわたって等しくスレッドをスケジュールしました。 Windows 10バージョン1903には、AMDのCCXユニットを認識し、同じユニット内にスレッドを保持しようとする更新されたスケジューラーが含まれていました。 リンク

この改善は、少数のコアのみを使用するタスクに特別な影響を与えることを目的としています。スレッドは、個々のCCX間で前後に切り替わります。

Windows 10バージョン1909はスケジューラにさらなる改善をもたらし、「お気に入りのCPUコアの最適化」と呼ばれる機能で、混合パフォーマンスコアの状況を認識するようになりました。 リンク

最近のWindows Insiderブログ投稿でMicrosoftは、Windows 10 19H2には、これらの推奨コアに命令がどのように配布されるかに関する最適化が含まれると述べています。

確かに、このタイムラインについての私の理解は100%確実ではなく、推奨コアは以前のバージョンで使用されている可能性がありますが、これに関する具体的な情報を見つけるのは驚くほど困難でした。以前のバージョンに存在していたことを暗示する言語にもかかわらず、ほとんどのニュース投稿は、「支持されたコア」サポートが1909年に完全に新しいことに同意しているようです。

ARMアーキテクチャは、実際には 2011 以降、「big.LITTLE」と呼ばれるこのような混合パフォーマンス構成を明示的にサポートしていました。 ARMで実行されるWindows 10ビルドは 2017 でリリースされ、big.LITTLEのサポートは最初から、または少なくとも 2018 によって含まれていました。これは、現代のIntelとAMDの状況に対するサポートを追加することでうまく機能しているようです。

余談ですが、論理コアはパーキングされるため、必要になるまで除外されます。スケジューラ自体がそれらについて理解しているためではありません。 リンク

コアパーキングは、Windows Server 2008 R2でのみサポートされています。ただし、コアパーキングアルゴリズムとインフラストラクチャは、Windows 7クライアントシステム上の論理プロセッサーと、インテルハイパースレッディングテクノロジーを搭載したプロセッサーとのプロセッサーパフォーマンスのバランスを取るためにも使用されます。

11
Corrodias

スレッドからコアへのスケジューリングは技術であり、非常に難しいものです。これは、最新のマルチコアCPUが熱プロファイルを管理する方法に関係しています。 正確なモデルによって異なります CPUは、以下の1つ以上の処理を行う場合があります。

  • サーマルウィグルルームがある場合は、1つ以上のコアのクロック周波数をブーストします
  • 未使用のコンポーネント(コアを含む)をシャットダウンして、サーマルプロファイルのスペースを増やします。
  • いくつかのコアをスロットルして、熱エンベロープの内部で他のコアをブーストできるようにします
  • はるかに

これは、シングルスレッドのワークロード(Rスクリプトなど)の場合、最適な戦略は大きく異なることを意味します。

  • CPUが1つのコアを他のコアを犠牲にしてブーストできる場合は、そのスレッドを1つのブーストされたコアに「固定」することをお勧めします
  • 熱エンベロープが小さい場合、タスクを別のコアに随時割り当て、最もクールなコアに配置するのが理にかなっています。

スケジューラーが選択するものは何でも、人間がこれまでにできるよりも優れた仕事をするためにそれを信頼する必要があります。

26
Eugen Rieck

いいえ。コンピューターのBIOSは、有効または無効にするCPUコアとコアの速度を制御できる場合がありますが、実行される内容を制御することはできません。プログラムとそのスレッドの実行は、オペレーティングシステムによって制御されます。

2台のコンピューターの動作が異なる理由については、まったく別の問題です。 OSセットアップまたはR構成である可能性があります。それは別の質問で尋ねられる必要があり、ハードウェアとソフトウェアの構成の詳細が必要になります。

また、1つのコアでのみ実行しても問題はありません。プログラムの実行は、プログラムが実行するように設計されています。おそらく、仕事用のコンピューターはより多くの同時タスクを実行しており、CPU使用率を調整する必要があります。これは、ご使用のホームコンピューターがより高速なコアを備えており、他のコアとスレッドを交換する必要がない場合があります。

13
Keltari