Parallel Computing (2)

对多级缓存的认识

多种miss:

  • cold miss
  • conflict miss
  • capacity miss

slide_018

多种并行思路

在本次课程中,除开上一次课程介绍的超标量(指令级别并行),又介绍了多种并行处理器思路来提升吞吐量(throughput),考虑到

  • 并行执行
  • 访问存储器的延迟(latency)

超标量(super scalar)

对于同一个程序,可以同时抓取预先编译好的多个可并行指令进行执行。

slide_024

程序中的并行是由硬件自动发现的。

多核处理器

在还没出现多核处理器的时候,人们设计CPU往往致力于增加更多的模块来让单条指令执行地更快。

slide_025

但是通过删去这些额外的模块,实际上可以实现多个核的处理器(单核的性能比原来要差)。

slide_027

这样通过在程序中定义多个线程,就可以比较充分地利用两个核的性能。程序示意图如下所示:

slide_029

slide_030

现代多核处理器的例子:

slide_033

slide_034

单指令多数据流(SIMD)

single instruction, multiple data。

通过引入更多的ALU(计算单元),使得可以在同一时间对多个数据进行相同的运算操作。

slide_037

如上架构可以执行如下的数据并行程序:

slide_039

slide_030

【注意上述第二个程序既可以被多核处理器处理也可以被SIMD处理】向量化是由编译器实现(explicit)或者在runtime时由硬件实现(implicit)。

一些行话

  • 指令流一致性、相干性(coherence)
    • 相同指令可以同时作用于多个数据
    • 一致执行对于SIMD来说是必要的
    • 一致执行对于多核并行并不是必要的
  • 差异执行(divergent)
    • 指令流缺乏一致性

slide_049

slide_050

例子

slide_053

slide_054

访问存储的加速

slide_057

数据预加载

目前有一些现代CPU架构,其可以在使用到数据前自动地进行分析,并提前加载数据,从而减少stall,但是错误估计实际上会降低性能。

多线程减少stall

在同一个核上interleave(交织)多个线程来提升利用率。

slide_066

执行单个线程的时间实际上可能仍然很长,但是多个线程总体执行时间相较于串行执行变少了。