上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1 SIMD/矢量处理
在继续研究Helium的细节之前,简要回顾一下一些计算机架构的基础知识是有用的。
SIMD是一个描述硬件的术语,在该硬件中的多个处理单元中可以同时对多个数据项执行相同的操作。换句话说,CPU可以同时执行并行计算,但只有一个指令正在执行。这意味着我们正在利用数据级并行性。
同理,标量操作是对单个数据项执行的操作。矢量运算则是一个对一维数据数组执行的操作。
SIMD操作并不意味着采用的是超标量处理器。超标量意味着CPU通过同时将指令分派给不同处理器内的执行单元,在一个时钟周期内可以执行有多条指令。SIMD也不应与多线程操作(Multiple Threaded Operation,SMT)混淆,后者可能具有并行运行的并发线程。
阿姆达尔定律(Amdahl's law)是一个可以在优化系统性能时计算其优化理论值的公式。该定律以计算机科学家Gene Amdahl的名字命名,他曾是IBM System-360大型机的首席架构师(据说还发明了营销术语FUD——恐惧(Fear),不确定性(Uncertainty),质疑(Doubt))。在并行计算中,该定律用于表示使用多个处理器或处理元素实现的性能提升。例如,如果可以并行化算法,潜在性能提升会受到无法并行化的部分的限制。简单来说,如果可以并行化一段代码的50%,最大加速比为2倍速。阿姆达尔定律在SIMD和矢量机领域中是很重要的。Helium架构的许多设计决策均受阿姆达尔定律的启发。如果一次可以操作16个数据,而不是1个,那么潜在的数据吞吐量则增加了16倍,但前提是能够避免或最小化那些必须以标量方式运行的代码段。