cpu、core、processor、thread 等概念有的是物理的有的是逻辑的,在不同语境中含义不尽相同。
一、物理 CPU 数(physical cpu)指主板上实际插入的 cpu 硬件个数(socket)。(但是这一概念经常被泛泛的说成是 cpu 数,这很容易导致与 core 数,processor 数等概念混淆,所以此处强调是物理 cpu 数)。 单CPU主板 由于在主板上引入多个 cpu 插槽需要更复杂的硬件支持(连接不同插槽的 cpu 到内存和其他资源),通常只会在服务器上才这样做。在家用电脑中,一般主板上只会有一个 cpu 插槽。 多CPU主板(2颗CPU) 二、核心(core)一开始,每个物理 cpu 上只有一个核心(a single core),对操作系统而言,也就是同一时刻只能运行一个进程/线程。 为了提高性能,cpu 厂商开始在单个物理 cpu 上增加核心(实实在在的硬件存在),也就出现了双核心 cpu(dual-core cpu)以及多核心 cpu(multiple cores),这样一个双核心 cpu 就是同一时刻能够运行两个进程/线程的。 Intel 6核心12线程 CPU 三、同时多线程技术(simultaneous multithreading)和 超线程技术(hyper–threading/HT)本质一样,是为了提高单个 core 同一时刻能够执行的多线程数的技术(充分利用单个 core 的计算能力,尽量让其“一刻也不得闲”)。 simultaneous multithreading 缩写是 SMT,AMD 和其他 cpu 厂商的称呼。 hyper–threading 是 Intel 的称呼,可以认为 hyper–threading 是 SMT 的一种具体技术实现。 在类似技术下,产生了如下等价术语:
所以可以这样说:某款采用 SMT 技术的 4 核心 AMD cpu 提供了 8 线程同时执行的能力;某款采用 HT 技术的 2 核心 Intel cpu 提供了 4 线程同时执行的能力。 四、查看 cpu 信息4.1 Linux 系统 查看物理 cpu 数: cat /proc/cpuinfo| grep 'physical id'| sort| uniq| wc -l 查看每个物理 cpu 中 核心数(core 数):
查看总的逻辑 cpu 数(processor 数): cat /proc/cpuinfo| grep 'processor'| wc -l 查看 cpu 型号:
判断 cpu 是否 64 位: 检查 cpuinfo 中的 flags 区段,看是否有 lm (long mode) 标识 lscpu 命令可以同时看到上述信息。比如:
4.2 Window 系统 五、x86 与 x86_645.1 x86 泛指一系列基于 Intel 8086 且向后兼容的中央处理器指令集架构。 x86 的 32 位架构一般又被称作 IA-32,全名为 “Intel Architecture, 32-bit”。 值得注意的是,Intel 也推出过 IA-64 架构,虽然名字上与 “IA-32” 相似,但两者完全不兼容,并不属于x86指令集架构家族。 5.2 x86-64 又称 x64,即英文词 64-bit extended,64 位拓展 的简写,是 x86 架构的 64 位拓展,向后兼容于 16 位及 32 位的 x86 架构。 不同厂商有不同的称呼:
六、多线程程序线程数为了让我们的多线程程序更好的利用 cpu 资源,我们通常会先了解机器拥有的 processor 数,有若干手段可以获取这一信息:
具体在多线程程序中设置线程数多大,对计算密集型的程序有的建议是 processor count + 1,有的建议是 processor count 的 1.5 倍,都是经验值,实测为准。 小结
总的逻辑 CPU 数 = 物理 CPU 数 × 每颗物理 CPU 的核心数 × 每个核心的超线程数。 文章来源: |
|