我的目标是根据给定计算机上的cpu核心数启动批处理文件中的多个进程。我想出了下面的脚本似乎工作正常,但不确定这是否是最佳方式。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set arg1=%1
FOR /F "tokens=* USEBACKQ" %%F IN (`wmic cpu get NumberOfCores`) DO (
SET str=%%F
)
set str=%str:NumberOfCores =%
FOR /L %%n IN (1,1, %str% ) DO ( start %arg1% )
答案 0 :(得分:1)
有一个误解,环境变量NUMBER_OF_PROCESSORS
代表处理器的逻辑数量,它不是cpu套接字的数量,但核心数量最终会因HT / SMT而翻倍。
请参阅此wmic命令的输出
> wmic cpu get NumberOfCores,NumberOfEnabledCore,NumberOfLogicalProcessors /value
NumberOfCores=4
NumberOfEnabledCore=4
NumberOfLogicalProcessors=8
像NUMBER_OF_PROCESSORS
一样经常使用start并不能保证已启动的程序在逻辑处理器上分发。阅读start /?
=>节点,亲和
@Echo off
For /f %%A in ('wmic cpu get NumberOfCores /value^|find "="') Do Set /A %%A
Set Num
示例输出:
NumberOfCores=4
NUMBER_OF_PROCESSORS=8