A Modern Multi-Core Processor

一个处理器在做什么?

image-20221104152159781

  • Fetch Decode:指令流解码,决定下一条执行的指令
  • ALU:执行单元,执行一条指令,决定如何修改寄存器和计算机内存
  • Context 一组寄存器,保存了进程的状态。

这部分有点像科普性质了,有点像CPU的发展史。

原本的CPU,一个时钟周期拉取一个指令执行

image-20221104140957958

但是程序中很多指令之间是无关的,所以cpu在内部多做了一个执行单元,这样我们可以在一个时钟周期执行两个命令。

Superscalar execution: processor automatically independent instructions in an instruction sequence and can execute them in parallel on multiple execution units.

image-20221104141743625
image-20221104153823685

Processor pre multi-core era: Increase in chip transistors were used to help a single instruction stream run fast.(增加每个核的transistor数量,从而使得指令流执行更加迅速)

Idea #1

image-20221104153618002

不增加每个核的transistor的数量,而是增加处理器的核数

多核并行的模式:

image-20221104154035043

如果有16个核,就有16个同时执行的指令流

Idea #2

fetch/Decode的成本要比ALU贵,因此可以一个核塞多个ALU,从而分摊managing 指令流的成本

image-20221104154330483

SIMD single multiple data,simd里面wide指8bits、1Byte

condition

image-20221104154549357

如果出现了if condition之类的情况,可能最糟糕的情况只会获得1/8的peak performance

explicit simd CPU

在编译阶段,编译器将simd指令编译在二进制文件中

  • 程序code中写明simd指令
  • 使用一些声明simd的semantic,(ispc的forall等
  • 一些auto-vectorizing的编译器

implicit simd GPU

编译器只能生成标量处理程序,但是硬件可以在simd alus上执行,也就是硬件层面决定

访问内存

stalls

如果当前指令流的当前指令没有完成,处理器就不能继续执行当前指令流的下一条指令,这就是stalls

image-20221104155614779

访问内存的延迟,通常为100左右cpu时钟周期

Cache

image-20221104155735098

Cache可以提供更低的延迟和更高的数据带宽

image-20221104155816155

prefetch

在执行程序之前,先预先将数据提前fetch到Cache中,如果fetch错了,这可能降低执行效率

image-20221104160744903

Idea #3

通过多线程来掩盖stalls,注意,这里的多线程是一个核上多个context意义上的多线程

image-20221104160831175
image-20221104160953917

多线程是面向吞吐量的系统的选择,虽然一个线程的执行时间可能变长,但是系统总的吞吐量提高了

延迟和带宽

image-20221104162519645

延迟:一辆车从san 到Stanford路上画的时间

带宽:一个小时内(或者其他时间单位),能有多少车辆从san到Stanford。

延迟高带宽不一定低,同样延迟低不一定带宽高。如果是内存带宽,就是能够同时从内存传输多少数据的能力,而延迟则是从内存传输数据到处理器的时间。

image-20221104162854482

如果内存带宽很低就会出现这种情况,内存的总线被占用,其他load操作只能等待,但是如果内存带宽提高,那么相当于内存总线还能同时传输更多数据,这时候就可以允许多个load操作同时执行。

我们就可以达到这样的理想100%利用率:

image-20221104163042150

原文地址:http://www.cnblogs.com/kalicener/p/16858959.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性