web-dev-qa-db-ja.com

コマンドラインからWindows実行可能ファイルのグループとアフィニティを設定するにはどうすればよいですか?

マルチプロセッサセットアップで6回同時に実行する必要がある実行可能ファイルfoo.exeがあり、最初の3つのインスタンスがグループ0のコアに割り当てられ、次の3つのインスタンスがグループ1のコアに割り当てられます。

デスクトップにfoo.exeプログラムのショートカットが6つあります。各ショートカットは、foo.exeプログラムに実行するための異なるパラメーターのセットを提供します。

ショートカットをクリックするだけで、foo.exeプログラムの6つのインスタンスを実行できます。それらはすべて起動しますが、タスクマネージャーに移動し、グループアフィニティを設定して、3がグループ0のCPUに割り当てられ、3がCPUのグループ1に割り当てられていることを確認する必要があります。

デスクトップにあるショートカットを変更して、foo.exeプログラムの3つがグループ0を使用し、そのうちの3つがグループ1を使用するようにする方法はありますか?

5
Zareh

startコマンドを使用して/affinityフラグを使用し、プロセスが使用するコアを指定できます。

使用法

start /affinity n foo.exe -arguments

したがって、ショートカットは次のようになります。

c:\windows\system32\cmd.exe /C start /affinity n foo.exe -argumentsここで、nはCPUコア番号+1です。

したがって、Core 0で実行するには、次のようになります。

c:\windows\system32\cmd.exe /C start /affinity 1 foo.exe -arguments

ソース

複数のコアを指定する

CPUに4つのコアがあると仮定します。使用するコアを指定するには:

  1. 配列の長さがコアの数に等しい配列としてコアを視覚化します。コアは、右から左に降順で配置されます。

    [CPU3, CPU2, CPU1, CPU0]

  2. ここで、プロセスで使用するコアを1に、使用しないコアを0に置き換えます。プロセスでコア3と1を使用する場合、配列は次のようになります。

    [0,1,0,1]

  3. 配列の要素を文字列に「ポップ」します。これで、0101として表されます。

  4. 文字列が2進数であると想定し、16進数に変換します。今では0x5になります

  5. 同じコマンドstart /affinity n foo.exe -argumentsを使用しますが、n0x5になり、start /affinity 0x5 foo.exe -argumentsになります。

ソース

  • ソースは、視覚化を配列ではなくバイナリ文字列として説明しています(チェックしてください)。これは少し紛らわしいので、配列を使用して説明しました。
  • ソースは、コマンドで16進数であることを示すために0xのプレフィックスを付ける必要があることを指定していません。 start /?を読み取ると、16進数であることが指定されます。
6
MrFregg