概念辨析:CPU、核心、线程、计算节点

个人计算机一般一台机器一个CPU,而CPU又有很多核心。每个核心有自己的一套寄存器,自己的一套高速缓存(高速缓存通常又分多级)。CPU和内存相连接,虽然寄存器和高速缓存是一个核心私有的,其他核心不能访问,但是不同的核心共享物理内存,可以通过内存通信。如果是一个进程派生的多个线程,它们可以直接在进程的虚拟空间中通信,如果是不同进程的线程要共享内存,那就涉及到进程间通信了。

上图中,L1为寄存器服务,而寄存器是核心私有的,所有L1也是核心私有的。L3为主存服务,而主存是多核心共享的,所以L3也是多核心共享的。对于L2的理解,不同工程师有不同的理解,所以不同芯片设计可能不同。独享的缓存L1不存在多核竞争的情况,所以效率更高;共享的缓存通常需要锁或串行化技术来保证数据一致性,所以效率稍低。

为什么单核CPU发展为多核CPU?

最开始为了提高CPU性能,人们不断加快单核心的频率,但是随着频率不断增高,核心散发出的热量也逐渐增大,当核心频率大到一定程度,散热就成了大问题。为了进一步提高CPU处理能力,于是人们想了另外的办法:单个CPU核心的频率有上限,但如果每个核心频率不是那么高,在一个CPU上集成多个核心, 让它们并行,不就行了吗?

每个核心往往支持两个硬件线程(一般采用超线程技术实现),这是为了充分利用核心的计算资源。一个等待IO的线程会阻塞在原地,由于它等待的IO事件还没有完成,所以它无法往后执行任何指令。此时核心的计算资源将处于空闲状态。为了充分利用一个核心的计算资源,在支持多个硬件线程的机器上,调度器往往会将其他等待计算资源的线程调度过来执行。

8核CPU的处理能力往往比4核CPU高,而同样是8核,支持两个硬件线程的CPU,它的指令吞吐量往往比只支持单个硬件线程的CPU的大。为了充分利用CPU的多核心处理能力,软件也要并行编程才行。如果软件采用串行设计,那么就算CPU有64个核心,这个软件在运行时也只能利用到CPU的一个核心。然而,并行编程并非易事。并行编程要注意不同线程之间的耦合,如何不同线程耦合很紧,比如A线程总是要等待B线程的数据,那么即使是并行程序,性能可能也和串行时的差不多,甚至由于并行框架无法避免的一些开销,性能反而有下降。科学计算往往是比较容易将一个大任务分解为多个松耦合的小任务的,这样的易分解的任务才能从并行编程中获得明显的性能提升。

什么是CPU亲和性?

将进程或一组线程绑定在某些核心上运行。

系统线程数大概率高于核心数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值