在Windows Server 2003上设置亲和力

我有一个程序,默认情况下只运行在一个CPU上。 我已经尝试使用start /affinity x notepad.exe批处理命令,但我不能让它运行我的程序。 它会更改命令行窗口的标题,但不会执行该程序。 这个启动命令可以用于记事本,所以它可能只是一个软件的问题。 我已经通过任务pipe理器手动设置亲和力,所以我知道它的工作原理。

我不是这个软件的程序员如此改变,这不是一个选项。

更新:我现在运行该程序。 我将exit命令添加到批处理脚本的末尾。 现在我需要知道/ affinity标志是如何工作的。 我似乎无法得到它使用4 cpu'。

更新2:所以我终于明白,/亲和标志期望一个hex数字。 我现在可以正确设置记事本的亲和力,但仍然无法为我正在使用的软件进行设置。 难道是软件不支持multithreading?

它是按位转换二进制到十进制。 例如。 0001 = 1 = cpu1,1000 = 8 = cpu4,1111 = 15 =全部四个cpus

如果它“改变命令行窗口的标题,但不执行该程序”,那么这看起来像一个命令行问题。 你能发布实际的命令行吗? 它是否包含空格,引号或其他参数?


编辑:

很高兴知道你有它运行。 正如其他人所说,“亲和力”参数是一个位掩码; 因此,需要使用“1”作为“CPU 1”,“2”作为“CPU 2”,“4”作为“CPU 3”,作为“8”作为“CPU 4”,等等。 你可以通过添加这些数字来设置多个CPU的亲和力,所以如果你想让你的进程使用CPU3和4(但不是 1和2),你可以使用“12”。 “15”是你应该用来表示“所有前4个CPU”。


编辑2:

当然,如果你的程序不是multithreading的,那么从拥有更多可用的CPU中就没有任何好处。 要排除这一点,请使用“任务pipe理器”设置其关联性,并查看其行为; 如果您有四个CPU,但该程序仅占系统CPU总时间的25%,则它是单线程的; 如果达到50%,则最多运行两个线程。 如果它达到100%,那么它可以充分利用你的服务器(但要小心不要放慢其他一切)。

我的第一个问题是batch file不会运行我的程序。 这最终成为path中空间的问题。 我无法弄清楚如何逃脱他们,所以我只是使用短名称。 (例如c:/ progra〜1 /而不是c:/ program files /)

第二个问题是设置亲和力。 事实上启动命令中的亲和标志采用hex数字。 该软件仍然没有工作,但与软件有关。 现在正在由开发者修复。 (好极了!)

至于软件不是multithreading,我认为Windows做一些负载平衡,因为如果你手动设置它使用所有的处理器软件确实使用它们,并走得更快。