核心与线程:我应该在这台机器上运行多少个线程?


41

我应该在这台机器上运行多少个线程?

lscpu说有96个核心。是那些物理核心吗?我可以在此计算机上运行的最大和最佳线程是多少?

https://stackoverflow.com/a/10670440/610569显示,每个内核可以运行20个以上的线程。这样可以吗?那是最优的吗?

alvas@server:~$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                96
On-line CPU(s) list:   0-95
Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4
NUMA node(s):          4
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU E5-4657L v2 @ 2.40GHz
Stepping:              4
CPU MHz:               2700.000
CPU max MHz:           2900.0000
CPU min MHz:           1200.0000
BogoMIPS:              4801.91
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92
NUMA node1 CPU(s):     1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93
NUMA node2 CPU(s):     2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94
NUMA node3 CPU(s):     3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95

请原谅我对内核/线程的痴迷。

Answers:


52

这就是你想知道的

Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4

您有4个CPU插槽,每个CPU最多可以有12个内核,每个内核可以有两个线程。

您的最大线程数是4 CPU x 12核心x每个核心2个线程,因此12 x 4 x 2是96。因此,最大线程数是96,最大核心数是48。

什么是更好的 ?

这取决于您要执行的操作,更多的线程意味着更少的频率(即3ghz被分成两部分),但是更好的多任务处理(更多的线程)和使用全核(没有超线程)更适合于CPU使用率较高的任务(即游戏)。

希望这对您有所帮助。


3
“更多的线程意味着更少的频率”,这句话是非常错误的。即使使用超线程,一个单独的进程也可以充分利用处理器。超线程可以利用指令流水线和寄存器,否则它们将空闲以并行地从不同的进程/线程执行某些执行,从而在某些情况下增加了处理器的最大吞吐量。性能提升是非常出色的应用程序/配置。在P4之后,没有记录到启用HT的性能损失(P4 gen内核在某些情况下有一些问题)
NGRhodes

2
我认为这句话不是很错误。如果在单个内核上运行两个进程,则与在自己的内核上运行每个进程相比,每个进程的可用频率降低。这是一个非常基本和简单的声明,但是OP从未要求提供有关超线程或其工作方式的任何详细信息。尽管您是正确的,但是超线程已经走了很长一段路,我相信拥有48个内核的人都不想将其关闭。
Mark Kirby

2
@NGRhodes:Intel HT的粒度足以重叠两个线程之间的乱序执行。基本上,这是HT的重点,它将更多的指令级并行性暴露给乱序内核。(即,即使一个线程正在从分支错误预测中恢复或等待高速缓存未命中,也要保持执行单元的执行速度。)前端问题带宽分配为50/50(一个线程停止时除外),因此取决于哪种类型代码遇到瓶颈,HT可能会给您近两倍的吞吐量,或者几乎没有额外的吞吐量。(就像15%的x264视频编码一样。)
彼得·科德斯

1
有关微体系结构的详细信息,请参见agner.org/optimize
彼得·科德斯

1

从我的理论观点来看,每个cpu核心线程(基于硬件的线程)-96个核心之一有效地在大多数情况下可以处理16个线程(基于软件的线程fe C ++ thread.h)。


1
您从哪里获得“可以有效地处理16个线程”?输出显示“每个核心的线程数:2”
提交时间为

0

您可以通过运行htop或ps命令找到可以在计算机上运行多少线程,这些命令返回计算机上的进程数。

您可以使用有关“ ps”命令的手册页。

man ps

如果要计算所有用户进程数,可以使用以下命令之一:

  1. ps -aux| wc -l
  2. ps -eLf | wc -l

计算用户进程数:

  1. ps --User root | wc -l

另外,您可以使用“ htop” [参考]

在Ubuntu或Debian上安装:

sudo apt-get install htop

在Redhat或CentOS上安装:

yum install htop
dnf install htop      [On Fedora 22+ releases]

如果要从源代码编译htop,请在此处找到它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.