如何从命令行设置 Windows 可执行文件的组和亲和性

如何从命令行设置 Windows 可执行文件的组和亲和性

我有一个可执行文件foo.exe,需要在多处理器设置上同时运行 6 次,其中前 3 个实例将分配给第 0 组中的核心,后 3 个实例将分配给第 1 组中的核心。

foo.exe我的桌面上有 6 个该程序的快捷方式。每个快捷方式都为该foo.exe程序提供了一组不同的运行参数。

我只需单击快捷方式即可运行这 6 个程序实例foo.exe。它们全部启动,但是我必须进入任务管理器,通过设置它们的组亲和性,确保 3 个程序分配给第 0 组中的 CPU,3 个程序分配给第 1 组中的 CPU。

有没有什么方法可以修改我桌面上的快捷方式,以确保其中 3 个foo.exe程序使用组 0,另外 3 个程序使用组 1?

答案1

您可以使用命令/affinity中的标志start来指定进程应使用的核心。

用法

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. 假设字符串是二进制的,将其转换为十六进制。现在它将是0x5

  5. 现在使用相同的命令start /affinity n foo.exe -arguments,但现在n将是0x5,给予start /affinity 0x5 foo.exe -arguments

来源

笔记:
  • 源代码将可视化解释为二进制字符串,而不是数组(请查看)。我觉得这有点令人困惑,所以我使用数组来解释。
  • 源文件未指定必须0x在命令中加上前缀以显示其十六进制。阅读start /?指定它是十六进制。

答案2

我不知道是否可以在命令行上分配处理器组,但您可以使用 start /node <node_number> /affinity <affinity_value> 设置所需的 NUMA 节点号。Windows 向您承诺整个节点将包含在单个处理器组中。如果节点处理器数量高于 64 个处理器,则 Windows 会将其划分为多个虚拟节点。因此,如果您使用节点,您基本上会将进程设置为在节点的处理器组上运行...

相关内容