はじめに
知ってましたか?私は知りませんでした。
Windows11上で、一回の実行で何分か以上かかる処理を、デスクトップから実行した場合と、タスクスケジューラから実行した場合で、1.5~2倍くらい後者の方が時間がかかる現象に出くわしました。
原因
なんでだと思いますか?
ヒント:実行したマシンのCPUは、第14世代Intel Core7プロセッサで、Pコア/Eコア1の混在構成です。
(ここまで書いちゃったらもう分かりますよね)
正解は、
10
9
8
7
6
5
4
3
2
1
0
タスクスケジューラから実行した場合は、Eコアで実行されることがあるからです。
リソースモニタ等で監視しながら実行してみると、最初数秒はPコアで動いてるんですが、そのあとはEコアに処理が移っちゃってることが見て取れました。
負荷の低い処理ならそれでもいいんですが、CPU全力でぶん回すような処理なのにEコアのままで動かれるとキーッとなります。
解決方法
タスクスケジューラのタスクってデフォルトは低優先で動く(これも今回知ったんですが)ので、通常優先に変えたら変わるのかとも思ったけど変わらず。
タスクスケジューラで実行した処理がEコアで動くなんて情報、ぐぐっても見つけられなかった(英語だったらあったのかな?)ぐらいなので、解決方法も分からなかったんですが、ChatGPTに聞いてみたらズバリではないけど次の方法が示唆されました。
「電源管理」を「パフォーマンス優先」にする
して、その成果は・・・最後までPコアで動いた!
以上です。
別解としては、アフィニティ(タスクマネージャでいうと「関係の設定」です。分かりにくい)をいじって、Eコアへの割り当てを全部解除してしまう(=Pコアだけが残る)という方法もあります。がこちらはプロセスが上がってからいじる必要があって事前に仕込んでおけないので一般的には「電源管理」でいいと思います。
もちろん消費電力は上がるはずですが。
感想
どのコアで実行するかは、プロセスの優先度でもなく、処理の負荷でもなく、親(タスクスケジューラ)の素性によって決められているという、ちょっと現代社会にあるまじきというか、いや現代社会でも変わらないというべきなのか、そんなお話でした。
-
Qiita見てる人で知らない人は少ないと思いますが、最近のIntelの上位のCPUには、一つのCPUの中に、特性の異なる2種類のコアが入っていて、Pコア(Performance Core)は性能重視で電力消費多め、Eコア(Efficient Core)は電力効率重視で性能は抑えめのコアという構成になっています。スマホ向けだともっと前からこういう構成が一般的でした。 ↩