【问题标题】:Trying to find amount of CPU cores in batch file试图在批处理文件中查找 CPU 内核的数量
【发布时间】:2021-04-15 06:08:07
【问题描述】:

以下是我一直在使用的工作代码,但正如您所见,它使用环境变量来表示处理器数量,这些天在大多数计算机上通常是 cores * 2。有没有一种方法可以让我的循环基于 cpu 中的核心数量和/或如何编辑循环以将处理器数量除以 2?

set loopcount=%NUMBER_OF_PROCESSORS%
:loop
START "Batch Script" MyProgram.exe
set /a loopcount=loopcount-1
if %loopcount%==0 goto exitloop
goto loop
:exitloop

【问题讨论】:

    标签: loops for-loop batch-file cpu


    【解决方案1】:

    对于任何类似于“我如何才能找到有关我的计算机的信息?”的问题,答案总是使用wmic

    for /F "delims=" %%A in ('wmic cpu get NumberOfCores /format:value ^| find "NumberOfCores"') do set %%A
    for /L %%A in (1,1,%NumberOfCores%) do start "Batch Script" MyProgram.exe
    

    当然,如果您正在寻找批量计算的方法,只需使用 set /a

    set /a loopcount=%NUMBER_OF_PROCESSORS%/2
    

    【讨论】:

    • wmic cpu get NumberOfCores 给出物理内核的数量,所以%NUMBER_OF_PROCESSORS%/2 只返回一半
    • @phuclv - 问题是要找到核心数,所以我给出了两种方法,因为%NUMBER_OF_PROCESSORS% 指的是逻辑处理器的数量,而不是物理处理器的数量。
    • 啊,是的,我没有仔细阅读这个问题。但是除以 2 并不能解决 OP 的问题。如果将来某些 CPU 的每个内核有多个线程怎么办? Intel Xeon Phi 有 4 个线程/核,PPC 甚至有 8 个线程/核的 CPU。所以唯一正确的方法是wmic cpu get NumberOfCores
    • 我倾向于同时创建 %Cores%%Loops% 变量:For /F "Tokens=2Delims==" %%G In ('WMIC CPU Get NumberOfCores /Value')Do Set /A Cores=%%G,Loops=Cores/2 2>NUL
    • 感谢您让我了解 wmic。我也不知道 /a 来做数学。第一次创建批处理文件,但现在我知道了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2019-05-19
    • 2013-04-11
    相关资源
    最近更新 更多