这篇博文简单介绍多核计算机体系结构的相关术语(e.g. SIMD,superscalar,hyper-thread…),现代计算机体系结构保罗万象,越来越复杂,这里仅仅是抽象层简介,不涉及具体实现。旨在简单介绍它的一些工作方式概念.(非专业人士,有错误欢迎指正)

希望这篇文章能够帮助理解以下概念:

单核

(**注** 未特别说明,图片均来自 cs149 slides @stanford)

很简单,每个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

  1. 硬件,CPU运行时发现
  2. compiler, 编译期发现
  3. 显示地用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 的姿势

  1. cache,有效减少 stalls的长度,从而 reduce latency(在cache命中了就不需要access memory 了)
  2. Prefech,减少stall,(如果预测正确,内存依赖会变少,从而减少stall,隐藏latency(整体性能上升))

硬件支持的multi-thread (单核multi-thread)

interleave multi-thread

这种单核多线程称为 interleave 多线程,也叫伪多线程,顾名思义就是假的多线程,因为它其实只有一套 fetch/decode,ALU, 也就是一个clock只能执行一条指令,所以同时只能执行一条指令,所以线程是交错执行(interleave),的不过有多个执行上下文(excute context)

这有什么好处呢:

  1. 减少内存墙(stalls), 可以类比OS的多线程,IO密集型与计算密集型不同调度,每个跑一会儿,当一个线程跑不动等待IO的时候让另外一个跑,这里是类似的,只是OS设想的IO的磁盘,这里是memory。可以有效隐藏latency
  2. 共享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:

  1. 带来大的吞吐,隐藏延迟
  2. 使得superscalar archtechture充沛,(没有单线程ILP可以多个线程同时跑)
  3. 可能会比core扩展简单

costs:

  1. 额外的线程存储
  2. 非常依赖内存带宽(所以GPU的带宽通常比CPU大,excute context更多!)

最后以一张 CPU vsGPU架构图作为结束

reference

  1. http://cs149.stanford.edu/fall19/
  2. A morden multi-core processor. http://cs149.stanford.edu/fall19/lecture/basicarch

版权声明

本作品为作者原创文章,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

作者: taotao

仅允许非商业转载,转载请保留此版权声明,并注明出处