A.并行计算与并行结构
在所有四类计算机设计中,多级并行化现在是主要动力,功耗和成本是主要限制因素。在应用中基本上有两种并行性:
1.数据级并行(DLP),产生的原因是有许多数据项可以同时操作。
2.任务级并行性(TLP),产生的原因是创建了可以独立操作并在很大程度上并行运行的工作任务。
计算机硬件反过来可以利用这两种应用程序并行性,四种主要方式:
1.指令级并行利用编译器帮助,通过流水线等思想在适度水平上利用数据级并行,在中度水平上使用推测执行等思想。
2.向量架构、图形处理器单元(GPU)和多媒体指令集通过将单个指令并行应用于数据集合来利用数据级并行性。
3.线程级并行性在紧密耦合的硬件模型中利用数据级并行性或任务级并行性,允许并行线程之间进行交互。
4.请求级并行性利用程序员或操作系统指定的任务之间的并行性。
Flynn(1966 年)研究了 20 世纪 60 年代的并行计算时,他发现了一个简单的分类,我们今天仍在使用它的缩写。它们针对数据级并行和任务级并行。他观察了由多处理器最受限组件中的指令所要求的指令和数据流中的并行性,并将所有计算机分为以下四类:
单指令流单数据流(SISD)——这一类别是单处理器。程序员将其视为标准顺序计算机,但它能充分利用指令级并行性(ILP)。第 3 章涵盖了使用超标量化和推测执行等 ILP 技术的 SISD 架构。
单指令流多数据流(SIMD)——多个处理器使用不同的数据流执行相同的指令。SIMD 计算机通过将相同的操作并行应用于多个数据项来利用数据级并行性。每个处理器都有自己的数据存储器(SIMD 的 MD在此体现),但有一个单一的指令存储器和控制处理器,它负责检索和分配指令。第四章涵盖了数据级并行性(DLP)及其三种不同的架构:向量架构、标准指令集的多媒体扩展和 GPU。
多指令流单数据流(MISD)——迄今为止尚未建造出这种类型的商用多处理器,但它完善了这种简单的分类。
多指令流、多数据流(MIMD)-每个处理器都获取自己的指令并对其自己的数据进行操作,它针对的是任务级并行性。一般来说,MIMD 比 SIMD 更灵活,因此应用范围更广,但它的成本也比 SIMD 高。例如,MIMD 计算机也可以利用数据级并行性,尽管开销可能比 SIMD 计算机要高。这种开销意味着粒度必须足够大,才能有效地利用并行性。紧密耦合的 MIMD 架构,它利用线程级并行性,因为多个协作线程并行运行,松散耦合的 MIMD 架构——特别是集群和仓库规模计算机——它们利用请求级并行性,许多独立任务可以并行进行,几乎不需要通信或同步。
这种分类法是一个粗略模型,因为许多并行处理器是 SISD、SIMD 和 MIMD 类别的混合体。
B.指令集结构
ISA(指令集结构) 充当软件和硬件之间的边界。这次对 ISA 的快速回顾将使用 80x86、ARMv8 和 RISC-V 的示例来说明 ISA 的七个维度。最受欢迎的 RISC(精简指令集) 处理器来自 ARM,2015 年出货了 148 亿个芯片,或大约是 50 倍之多。
今天所有的 ISA 都被归类为通用寄存器架构,其中操作数可以是寄存器或内存位置。80x86 有 16 个通用寄存器和 16 个可以存储浮点数据的寄存器,而 RISC-V 有 32 个通用寄存器和 32 个浮点寄存器(见图 1.4)。这类架构的两个流行版本是寄存器-内存指令集架构(ISAs)。
1.ISA分类——如今几乎所有的ISA都被归类为通用寄存器架构,其中运算对象要么是寄存器,要么是内存位置。80x86有16个通用寄存器和16个可以保存浮点数据的寄存器,而RISC-V有32个通用寄存器、32个浮点寄存器(见图1.4)。该类的两个流行版本是寄存器存储器ISA,
2.内存寻址——几乎所有的台式机和服务器计算机,包括80x86、ARMv8和RISC-V使用字节寻址来访问内存操作数。一些架构,如ARM v8,要求对象必须对齐。如果A mod s=0,则对字节地址A处大小为s字节的对象的访问将被对齐。(参见第A-8页图A.5。)80x86和RISC-V不需要对齐,但如果操作数对齐,访问通常会更快。
3.寻址模式——除了指定寄存器和常量操作数外,寻址模式还指定内存对象的地址。RISC-V寻址模式有寄存器、立即(用于常数)和置换,其中向寄存器添加常数偏移以形成存储器地址。80x86支持这三种模式,以及三种位移变体:无寄存器(绝对)、两个寄存器(基于位移索引)和两个寄存器
4.操作数的类型和大小——与大多数指令集架构(ISA)一样,80x86、ARMv8 和 RISC-V 支持 8 位(ASCII 字符)、16 位(Unicode 字符或半字)、32 位(整数或字)、64 位(双字或长整数)以及 IEEE 754 在 32 位(单精度)和 64 位(双精度)中的浮点数。80x86 还支持 80 位浮点数(扩展双精度)。
5.操作——操作的一般类别包括数据传输、算术逻辑、控制和浮点。RISC-V 是一种简单且易于流水线化的指令集架构,它代表了 2017 年使用的 RISC 架构。
6.控制流指令——几乎所有 ISA,都支持条件分支、无条件跳转、过程调用和返回。RISC-V x86 和ARM三者都使用 PC 相对寻址,其中分支地址由一个加到 PC 上的地址字段指定。存在一些细微差异。RISC-V 的条件分支(BE、BNE 等)测试寄存器的内容,而 80x86 和 ARMv8 的分支测试由算术/逻辑操作产生的条件码位。ARMv8 和 RISC-V 的过程调用将返回地址放在寄存器中,而 80x86 的调用(CALL F)将返回地址放在内存的栈上。
7.在编码一个指令集架构——编码有两种基本选择:固定长度和可变长度。所有 ARMv8 和 RISC-V 指令都是 32 位长,这简化了指令解码。80x86 的编码是可变长度的,范围从 1 到 18 字节。可变长度指令可能比固定长度指令占用更少的空间,因此为 80x86 编写的程序通常比为 RISC-V 编译的程序更小。请注意,之前提到的选择将影响指令如何编码成二进制表示。例如,寄存器的数量和寻址方式的数量都会对指令的大小产生重大影响,因为寄存器字段和寻址方式字段可能会在单个指令中出现多次。(注意,ARMv8 和 RISC-V 后来提供了扩展,分别称为 Thurnb-2 和 RV64IC,它们分别提供了 16 位和 32 位长度的指令组合,以减少程序大小。这些 RISC 架构紧凑版本的代码大小小于 80x86。)
文章评论