次の方法で共有

Windowsマシンの論理プロセッサのすべてを常に使って並列計算をさせたい

Anonymous
2025-06-05T04:14:07+00:00

私が使用するWindowsマシン(CPU: 12th Gen Intel(R) Core(TM) i7-12700K)では、20個の論理プロセッサを利用可能(タスクマネージャのCPU画面で「論理プロセッサ数: 20」と表記あり)であり、すべての論理プロセッサを使って特定の計算を実施するプログラム(exe)を、Visual Studio VC++/OpenMPを使用して作成しております。なお、プログラム内では、omp_set_num_threads()関数に20を指定し、すべての論理プロセッサが使われるようにしています。

当該プログラムを実行したときにタスクマネージャのCPUを確認すると、すべての論理プロセッサの使用率が100%になりますが、仮想デスクトップを別に変えると、4つの論理プロセッサのみ100%であり、他の16個の論理プロセッサは使用率がほぼ0まで下がってしまいます。もちろん、プログラムは実行されたままの状態です。OSが当該プログラムを優先度が低いと判断してバックグランド処理に割当ててしまうことが原因なのではと推測しています。

希望としましては、当該プログラムが常にすべての論理プロセッサを使用して計算して欲しいため、それを可能にする設定をお伺いしたく思います。

WindowsマシンはデスクトップPCであり、電源モードは「高パフォーマンス」になっております。

家庭向け Windows | Windows 11 | パフォーマンスとシステムの失敗

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
質問作成者が受け入れた回答
  1. Anonymous
    2025-06-09T00:50:56+00:00

    ご回答を有難うございました。

    「デスクトップ Windows は文字通りデスクトップでユーザーが(ストレスなく)対話型の操作ができることを主な目的・用途に作られているので、アクティブでないデスクトップのバックグラウンドで実行されている処理のパフォーマンスよりユーザーが利用しているアクティブなデスクトップが優先されるのはある意味当然の結果だと思います。」

    仰るとおりです!

    バックグランド処理の優先度を上げた代わりに、デスクトップでの作業が阻害されるのであれば本末転倒ですね。

    私の方でいろいろ調べていたところ、全ての論理プロセッサを100%で稼働させる代わりに、比較的多くの論理プロセッサ(具体的にはP-Coreのみ)を100%稼働させておくことができる方法が見つかりましたので、共有します。

    PowerShellで次を実行するだけで実現できました。2行目の0xFFFFは、プログラムで使用したい論理プロセッサ(P-Core)の数を指定します。私の環境ではP-Coreが16個でしたので、16ビット分を1にした0xFFFFを指定しました。

    $proc = Start-Process -FilePath "program.exe" -PassThru$proc.ProcessorAffinity = 0xFFFF

    この状態で、別の仮想デスクトップへ移動しても、E-Coreのみに制限されることはありませんでした。しかし、P-Coreの数を超えて(例えば、E-Coreが一つ含まれる0x1FFFFなど)指定してしまうと、別の仮想デスクトップへ移動すると、一つのE-Coreのみで計算されるようになりました。

    結論として、$proc.ProcessorAffinity に P-Coreの数を指定しておけば、別の仮想デスクトップに移動しても、16個のP-Coreの100%稼働は継続されるため、この方法を利用したいと思います。

    0 件のコメント コメントはありません

8 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Nei First 30,195 評価のポイント ボランティア モデレーター
    2025-06-06T00:33:53+00:00

    蛇足だけど補足。

    >私が使用するWindowsマシン(CPU: 12th Gen Intel(R) Core(TM) i7-12700K)では、20個の論理プロセッサを利用可能(タスクマネージャのCPU画面で「論理プロセッサ数: 20」と表記あり)であり、

    インテル Core i7-12700K プロセッサー (外部サイト) *---*

    CPU仕様

    コアの数:12
    Performance-coresの数(Pコア):8
    Efficient-coresの数(Eコア):4
    スレッド総数:20
    *---*

    ハイパースレッディング(HT)は、Pコアのみ有効なので
     Pコア8xHT2+Eコア4=20スレッド(タスクマネージャCPU表記:論理プロセッサ数)

    0 件のコメント コメントはありません
  2. Anonymous
    2025-06-05T12:47:37+00:00

    WindowsマシンはデスクトップPCであり、電源モードは「高パフォーマンス」になっております。

    逆に「高パフォーマンス」の場合、バックグラウンド(裏に回して画面に映っていないプロセス)は E コアだけを使うように制御されています。
    powercfg コマンドでスロットリング機能を無効にするか、何か設定があった気がしますがすぐには出てこないですね…。

    ( powercfg /powerthrottling disable )

    0 件のコメント コメントはありません
  3. Anonymous
    2025-06-05T07:33:46+00:00

    ご返信を有難うございます。

    「電源調整をオフにする」が未構成でしたので、有効と無効の両方を試してみました。
    しかし、プログラムを実行して仮想デスクトップを別のに変更すると、途端に、20個中16個の論理プロセッサの使用率は0付近まで下がってしまいました。

    元の仮想デスクトップ(プログラムを実行しているところ)に戻すと、すべての論理プロセッサの使用率が100%になりました。

    グループポリシー周りは調べていなかったので、その他の項目を調べてみます。

    0 件のコメント コメントはありません
  4. Hebikuzure aka Murachi Akira 320.1K 評価のポイント MVP ボランティア モデレーター
    2025-06-05T06:35:20+00:00

    ヤマカンですが、グループポリシーで電力スロットリングを無効にしてみるとか。

    ADMX_Power ポリシー CSP | Microsoft Learn

    参考:【Win11】CPUスロットリング(設定)を無効にする方法【Tips】 : 0から楽しむパソコン講座のブログ

    0 件のコメント コメントはありません