こんにちは、阿久津です。サッカーのW杯もグループリーグが終わり、決勝トーナメントが始まりました。筆者も睡眠不足の日々と闘いつつ、毎日サッカーを観られるという至福の時間を過ごしていますが、気になるのが審判の誤……もとい、HDDの空き容量。動画ファイルを待避するために用意した1TB HDDも既に満杯直前。

当初はCMや解説など不要な部分のみカットしたMPEG-2 TSファイルをそのまま保存していましたが、グループリーグ終了の時点で約半分を消費しています。ワールドカップ開催前に撮りためていた壮行試合などを含めますと、決勝戦まで持たないことが判明しました。

しかたなく動画変換を始めましたが、問題は原稿執筆を行なう日中まで処理が続いてしまう点。筆者が説明するまでもなく、最近の動画エンコーダは使用するCPU(コア)数を認識し、スレッド数を調整する機能が備わっています。しかし、ほかのアプリケーションを使用する際、動画エンコーダのCPUリソース占有に負けてしまい、動作が著しく遅くなってしまうため、執筆作業に支障を来たすことも。

そもそもマルチ(コア)CPUに対応するWindows OSでは、使用するプロセッサを選択する機能が用意されています。タスクマネージャーを起動し、対象となるプロセスを右クリックすると表示されるメニューから<関係の設定>を選択してください。プロセッサの関係ダイアログからは、使用するプロセッサもしくは使用を抑制するプロセッサの取捨選択が可能となります(図01~03)。

図01: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「taskmgr」と入力して<OK>ボタンをクリックします。なお、[Ctrl]+[Alt]+[Esc]キーでも同様の結果を得ることができます

図02: タスクマネージャーが起動したら<プロセス>タブを開き、対象となるプロセスを右クリックしてください。メニューから<関係の設定>を選択します

図03: プロセッサの関係ダイアログが起動します。ここから使用もしくは使用を抑制するプロセッサを選択してください。<OK>ボタンをクリックすると設定が反映されます

しかし、アプリケーションを終了しますと、この設定は破棄されてしまうため、起動するたびに同様の操作を行なわなくてはなりません。そこで使用するのが「start」コマンド。指定したコマンドを実行するためにウィンドウを開くための標準コマンドですが、プログラムの実行優先度を指定できるため、使ったことのある方も多いのではないでしょうか。

同コマンドには、実行コマンドが使用するプロセッサの関係をマスク指定する「AFFINITY」が用意されています。こちらを用いることで起動時から使用するプロセッサの指定を行なうことが可能になりますので、今回はコンテキストメニューから使用するプロセッサを選択し、円滑なプログラム実行環境を構築するチューニングをお届けしましょう。

1.[Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力してから<OK>ボタンをクリックします。
2.レジストリエディターが起動したら、HKEY_CLASSES_ROOT \ exefile \ shellまでキーをたどって開きます。
3.shellキーを右クリックし、メニューから<新規>→<キー>と選択します。キー名は「Run with CPU-0 Affinity」に変更してください。
4.ステップ03で作成したキーを右クリックし、同じくメニューから<新規>→<キー>と選択します。キー名は「command」に変更してください。
5.commandキーを選択し、右ペインにある「既定」をダブルクリックします。
6.値のデータに「cmd.exe /c start "Run with CPU-0 Affinity" /affinity 1 "%1"」と入力してから<OK>ボタンをクリックします。
7.ステップ03~06の手順を参考に、Run with CPU-1 Affinity\commandキー、Run with CPU-2 Affinity\commandキー、Run with CPU-3 Affinity\commandキーを作成します。
8.ステップ07で作成したキーの「既定」を開き、それぞれ「cmd.exe /c start "Run with CPU-1 Affinity" /affinity 2 "%1"」「cmd.exe /c start "Run with CPU-2 Affinity" /affinity 4 "%1"」「cmd.exe /c start "Run with CPU-3 Affinity" /affinity 8 "%1"」と入力してください。
9.[F5]キーを押して変更内容をシステムに反映させてから、レジストリエディターを終了させます。

これでチューニング終了です(図04~10)。

図04: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図05: レジストリエディターが起動したら、HKEY_CLASSES_ROOT \ exefile \ shellキーまでたどって開き、shellキーを右クリックしてください。メニューから<新規>→<キー>と選択します

図06: 新規キー名となる「新しいキー #1」を「Run with CPU-0 Affinity」に変更します

図07: 図06で作成したキーを右クリックし、メニューから<新規>→<キー>と選択します

図08: 新規キー名となる「新しいキー #1」を「command」に変更します。続いて右ペインの「既定」をダブルクリックしてください

図09: 編集ダイアログが起動したら、テキストボックスに「cmd.exe /c start "Run with CPU-0 Affinity" /affinity 1 "%1"」と入力して<OK>ボタンをクリックします

図10: 図05~09までの操作を参考に、各キーおよび既定値の変更を行ないましょう。詳しくは下記の囲みを参考にしてください。作業を終えたら[F5]キーを押して変更内容をシステムに反映させてから、レジストリエディターを終了します

作成するレジストリキーおよびエントリ


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\exefile\shell\Run with CPU-0 Affinity]

[HKEY_CLASSES_ROOT\exefile\shell\Run with CPU-0 Affinity\command]
@="cmd.exe /c start \"Run with CPU-0 Affinity\" /affinity 1 \"%1\""

[HKEY_CLASSES_ROOT\exefile\shell\Run with CPU-1 Affinity]

[HKEY_CLASSES_ROOT\exefile\shell\Run with CPU-1 Affinity\command]
@="cmd.exe /c start \"Run with CPU-1 Affinity\" /affinity 2 \"%1\""

[HKEY_CLASSES_ROOT\exefile\shell\Run with CPU-2 Affinity]

[HKEY_CLASSES_ROOT\exefile\shell\Run with CPU-2 Affinity\command]
@="cmd.exe /c start \"Run with CPU-2 Affinity\" /affinity 4 \"%1\""

[HKEY_CLASSES_ROOT\exefile\shell\Run with CPU-3 Affinity]

[HKEY_CLASSES_ROOT\exefile\shell\Run with CPU-3 Affinity\command]
@="cmd.exe /c start \"Run with CPU-3 Affinity\" /affinity 8 \"%1\""

それでは結果を確認してみましょう。任意の実行ファイルを右クリックしてください(画面の例ではメモ帳[%windir%\notepad.exe]を使用します)。<Run with CPU-0 Affinity>など先のチューニングで作成した項目が表示されていれば、ひとまず成功です。続いて任意の項目(画面の例では<Run with CPU-3 Affinity>)を選択してください。

実行ファイルが起動しますので、タスクマネージャーから実行ファイル名を名前に持つプロセスを確認してみましょう。プロセッサの関係ダイアログで、指定したプロセスのみ選択されていればチューニング成功となります(図11~13)。

図11: 任意の実行ファイルを右クリックし、メニューから<Run with CPU-3 Affinity>を選択します

図12: 先の手順を参考にタスクマネージャーを起動し、図11で起動した実行ファイルのプロセスを右クリックします。メニューから<関係の設定>をクリックしてください

図13: 図11で選択した項目と合致するプロセッサのみチェックが入っていれば成功です

なお、今回は個別にプロセッサを使用するチューニングとしましたが、CPU 0とCPU 1を併用する場合、「affinity」オプションで指定する数値は「3」となります。詳しくは下記にまとめましたので、こちらを参考に、レジストリエディターで指定するコマンドラインの数値とキー名を変更してください(図14)。

図14: 「affinity」オプションで指定できるプロセッサ

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)