提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 多发射处理器总结
  • 数据冒险
  • 动态调度-Tomasulo算法
  • GPU与CPU的多发射技术对比(待考究)

多发射处理器总结

无论是动态多发射还是静态多发射,核心思想就是“推测+指令打包”,利用并行的硬件资源去提高IPC(指令数/周期)。

  • 静态多发射是利用compiler进行推测,将不具有数据冒险的指令成对打包,组成超长指令字(Very long instruction word, VLIW),而硬件只需要提供并行的解码与执行单元,并扩展总线宽度即可达到,是一种较为古老但是很实用的技术,常在轻量级的处理器中使用。
  • 动态多发射也称为超标量,由硬件决定每个周期issue的指令数目。“推测”由硬件负责,动态的避免数据冒险,并将无数据冒险的指令分配给不同的执行单元,这种分配可以看作是广义的“打包”,利用的就是可以同时执行指令的执行单元。
  • 据我了解,目前主流x86 CPU都是采用动态多发射+动态流水线调度。而主流GPU计算卡,只采用动态多发射。
  • 许多超标量处理器又将动态流水线调度技术包括在内。而动态流水线调度的核心就是指令可以乱序执行,比如Tomasulo算法的利用。

数据冒险

  • 在指令顺序执行的流水线技术中,只会有RAW造成流水线阻塞,而WAR和WAW不会造成影响,因为这其实是一种寄存器的“名字相关”,编译器可以绕过;
  • 在动态流水线中,若支持指令乱序执行,WAR和WAW必须保序;

动态调度-Tomasulo算法

利用寄存器重命名发消除WAR和WAW的算法,动态调度核心思想是“顺序发射-乱序执行-顺序提交”,保留站相当于在执行单元门后排队,谁的数据准备好了就可以进入到执行单元中,最后由Re-order buffer(ROB)实现提交。实际上,动态调度就是利用硬件实现指令流的分析,在不影响程序原有数据流逻辑的基础上尽可能的乱序执行指令,与取指令的顺序不同。

GPU与CPU的多发射技术对比(待考究)

  • CPU的动态多发射技术需要指令顺序发射、乱序执行、顺序写回去达到大的IPC。
  • GPU的一个基本计算单元是包括16个warp的,这warp之间可以看作是16个issue enrty,且在做密集计算时,stall bubble很容易会被16个warp填满。每个warp内部,可以看作是一个简单的动态多发射但是数序发射、顺序执行、顺序写回的小CPU。