现代多核计算机体系结构简介
这篇博文简单介绍多核计算机体系结构的相关术语(e.g. SIMD,superscalar,hyper-thread…),现代计算机体系结构保罗万象,越来越复杂,这里仅仅是抽象层简介,不涉及具体实现。旨在简单介绍它的一些
工作方式概念.(非专业人士,有错误欢迎指正)
希望这篇文章能够帮助理解以下概念:
单核
很简单,每个clock 执行一条指令.
并行优化技术
multi-core
一个处理器增加多个核
这带来的是硬件对 multi-thread 的并行化支持.可以让两个线程同时跑.
SIMD(Single Instruction Multi-Data)
这是典型的数据并行(Data parallel) 的模型
典型的场景就是向量乘法
for (int i=0 ; i<n ; ++i)
z[i] = x[i] * y[i]
这里面每个data执行的指令都是一样的 mul
有很多种方式都可以实现这种SIMD
- 硬件,CPU运行时发现
- compiler, 编译期发现
- 显示地用SIMD指令(程序员可见的)
前面两种都是programmer不可见的,因此写程序的时候尽量写data parallel 通常能够带来性能优化(PS:即使现在不能,随着这种技术的发展后面也一定能)
超标量(superscalar)
和单核单指令流的唯一区别就是加了另外一套 fetch/decode 及ALU 逻辑,这意味着可以在一个clock跑2条并行 的指令(ILP,指令级并行) 需要执行的指令流中的指令是无关的,没有依赖的.
这对programmer是完全透明的
superscalar+SIMD
访存(access memory)
两个重要概念
memory latency 处理器发出内存请求指令(store,load),到获得内存,继续跑的时间
memory bandwidth 内存系统可以提供数据给处理器的速度(e.g. 20G/s).
stalls 指令流中的指令由于前一条指令的依赖(e.g. 数据依赖,访存)而无法执行,称为被墙了(‘stalls’,不知怎翻译)
由于访存与cpu计算速度的巨大差异,改进前面的任意三者之一,都会提高计算的效果
改进 access memory 的姿势
- cache,有效减少 stalls的长度,从而 reduce latency(在cache命中了就不需要access memory 了)
- Prefech,减少stall,(如果预测正确,内存依赖会变少,从而减少stall,隐藏latency(整体性能上升))
硬件支持的multi-thread (单核multi-thread)
interleave multi-thread
这种单核多线程称为 interleave 多线程,也叫伪多线程,顾名思义就是假的多线程,因为它其实只有一套 fetch/decode,ALU, 也就是一个clock只能执行一条指令,所以同时只能执行一条指令,所以线程是交错执行(interleave),的不过有多个执行上下文(excute context)
这有什么好处呢:
- 减少内存墙(stalls), 可以类比OS的多线程,IO密集型与计算密集型不同调度,每个跑一会儿,当一个线程跑不动等待IO的时候让另外一个跑,这里是类似的,只是OS设想的IO的磁盘,这里是memory。可以有效隐藏latency
- 共享CPU cache,仍然可以类比OS多线程,共享内存的优点
一些不好的地方: 1. 每个thread的cache变少,可以会带来多次访问内存,不过可以hide latency,提高吞吐量
GPU的这个单核多线程就比较多,适合高吞吐
Simultaneous multi-threading (SMT)
这是一个superscalar的扩展,设想前面的想法,多套 fetch/decode ALU就可以一个clock执行多条instruction, 因此如果这里也配多套fetch/decode ALU,就能一次从多个thread中取指令执行了。
intel的hyper-thread技术属于这类多线程
总结多线程的利弊:
pros:
- 带来大的吞吐,隐藏延迟
- 使得superscalar archtechture充沛,(没有单线程ILP可以多个线程同时跑)
- 可能会比core扩展简单
costs:
- 额外的线程存储
- 非常依赖内存带宽(所以GPU的带宽通常比CPU大,excute context更多!)
最后以一张 CPU vsGPU架构图作为结束
reference
- http://cs149.stanford.edu/fall19/
- A morden multi-core processor. http://cs149.stanford.edu/fall19/lecture/basicarch
版权声明
本作品为作者原创文章,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
作者: taotao
仅允许非商业转载,转载请保留此版权声明,并注明出处