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

alv*_*vas 51 multi-core cpu

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

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

/sf/answers/746930831/表明我可以在每个内核上运行 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
Run Code Online (Sandbox Code Playgroud)

请原谅我在内核/线程方面的笨拙。

Mar*_*rby 70

这是你想知道的

Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4
Run Code Online (Sandbox Code Playgroud)

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

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

什么是更好的 ?

这取决于你想要做什么,更多的线程意味着更少的频率(即 3ghz 分成两部分),但更好的多任务处理(更多线程)和使用全核(无超线程)更适合高 CPU 使用率的任务(即游戏)。

希望这对你有帮助。

  • “更多线程意味着更少频率”,这种说法是非常错误的。即使使用超线程,一个单独的进程也可以完全使用处理器。超线程可以利用指令管道和寄存器,否则这些指令管道和寄存器会被空闲以并行执行来自不同进程/线程的某些操作,从而在某些情况下增加处理器的最大吞吐量。性能提升是非常应用程序/配置的。在 P4 之后,没有记录启用 HT 的性能损失(P4 gen 内核在某些情况下有一些问题) (3认同)
  • 我不认为这种说法非常错误。如果您在单个内核上运行两个进程,则与在其自己的内核上运行每个进程相比,每个进程可用的频率更少。这是一个非常基本和简单的声明,但 OP 从未要求任何有关超线程或其工作原理的详细信息。尽管您是对的,但超线程已经取得了长足的进步,并且拥有 48 个内核,我相信他们不会想关闭它。 (2认同)
  • @NGRhodes:英特尔 HT 的粒度足够细,可以在两个线程之间重叠乱序执行。这基本上是 HT 的重点,将更多指令级并行性暴露给无序内核。(即,即使在一个线程从分支错误预测中恢复或等待缓存未命中时也保持这些执行单元的馈送。)前端问题带宽被分割为 50/50(除非一个线程停止),因此取决于什么样的如果您的代码遇到瓶颈,HT 可能会给您几乎翻倍的吞吐量,或者几乎没有额外的吞吐量。(例如 x264 视频编码的 15%。) (2认同)