第18章 多核计算机

多核处理器,也称芯片多处理器,将两个或多个处理器单元(称为内核)组合在一个硅片(称为芯片)上。通常,每个内核都由独立处理器的全部组件构成,如寄存器、ALU、流水线硬件、控制单元,以及L1指令和数据缓存。除了多个内核之外,现代多核芯片还包括了L2高速缓存,以及越来越多的L3高速缓存。高度集成的多个处理器也包含了内存和外围控制器。

18.1 硬件性能问题

微处理器系统在执行性能方面的几十年稳定增长来自于,时钟频率的增加,晶体管密度的增加以及芯片上多处理器组织结构改进。

18.1.1 增加并行性机会

处理器设计中结构的改变主要侧重于利用ILP,以便在每个时钟周期中完成更多工作。按时间顺序,这些改变包括:
        1.流水线:单个指令通过功能段流水线并行,以便一条指令在流水线的一个段中执行时,另一条指令在该流水线的另一个段中执行。
        2.超标量:通过复制执行资源构成多条流水线。主要避免了结构冒险,就可以在并行流水线中执行指令。
        3.同步多线程SMT:扩展了寄存器组,多个线程就可以共享使用流水线资源,通过线程切换挖掘更多的指令级并行性。

深流水线能走多远是有实际限制的,因为更多的流水线就需要更多的逻辑,更多的互连以及更多的控制信号。

使用超标量组织结构,可以通过增加并行流水线的数量来提高性能。同样,随着流水线数量的增多,收益也在递减。需要更多的逻辑来管理冒险并组织流水线资源。最终,单个执行线程会达到某个点,在这个点上,冒险和资源依赖阻碍了对多个可用流水线的充分利用。此外,编译的二进制代码很少能提供足够的ilp来利用超过6条的并行流水线。

计算机芯片的设计和制造涉及了一系列相关的问题。处理所有与超长流水线,多个超标量流水线和smt寄存器组相关的逻辑问题会增加复杂性,而复杂性的增加意味着越来越多芯片区域被用于协调和信号传输逻辑。与处理器逻辑相关的工程挑战是越来越多的处理器芯片致力于更简单的存储逻辑的原因之一。

18.1.2 能耗

随着单个芯片上晶体管数量的增加,为了保持更高的性能趋势,设计人员采用了更精细的处理器设计(流水线、超标量和SMT)和更高的时钟频率。可惜的是,随着芯片密度和时钟频率的增加,对功耗的需求也呈指数级增长。

控制功率密度的一种方式是把更多的芯片用于高速缓存。存储晶体管更小,产生的功率密度比逻辑晶体管低一个数量级。随着芯片晶体密度的增加,用于存储的芯片面积百分比也在增加,现在一般是芯片面积的一半。

如何利用所有逻辑晶体管是一个关键的设计问题。Pollack经验指出:性能的提升大致与复杂性的增加的平方根成正比。原则上,随着内核数量的增加,多核的使用有可能提供近乎线性的性能改进。

功率方面的考虑为迈向多核组织结构提供了另一个动机。因为芯片有如此巨大的高速缓存,任何一个执行线程都不太可能有效地使用所有存储器。即使使用smt,多线程也是以一种相对有限的方式来完成的,因此不能完全利用巨大的高速缓存,而大量相对独立的线程则有更大的机会来充分利用缓存。

18.2  软件性能问题

18.2.1 多核软件

多核组织结构潜在的优势取决于有效利用并行资源的能力。

多个处理器之间通信和工作分配,以及高速缓存一致性开销,软件通常会产生开销。这种开销会使得性能难达到峰值。

数据库管理系统和数据库应用程序是可以有效使用多核系统的一个领域。

引入线程粒度的概念来详细说明线程级并行,粒度被定义为可以有效并行化的最小工作单元。通常,系统支持的粒度越细,程序员在并行化程序时受到的约束就越少。体系结构目标粒度的选择涉及固有的权衡。一方面,粒度更细的系统更好,因为它们为程序员提供灵活性。另一方面,线程粒度越细,线程系统开销占用的执行部分就越大。

18.3 多核组织结构

在顶层描述中,多核组织结构的主要变量如下:
        1.芯片上处理器的数量;
        2.高速缓存的级数;
        3.如何在内核中共享高速缓存;
        4.是否使用同时多线程;
        5.内核的类型;

18.3.1 高速缓存的层级

为了性能考量,L1高速缓存被分为指令和数据,而L2和更高级的缓存是统一的。随着芯片上可用高速缓存数量的不断增加,出于性能方面的考虑需要分离一个单独的共享L3高速缓存,且每个核心都有专用的L1和L2缓存。

与只依赖专用高速缓存相比,在芯片上使用共享的更高级高速缓存有以下优点

        1.结构干涉可以降低整体缺失率。如果一个内核的线程访问了一个主存位置,那么就会把包含该访问位置的数据行放入共享高速缓存。如果另一个内核上的线程随后访问相同的数据块。那么该内存位置在共享高速缓存上可用。一个相关优势是:多核共享的数据不会在共享高速缓存级别上复制。
        2.通过适当的行替换算法,分配给每个内核的共享高速缓存量是动态变化的,因此局部性更少(工作集更大)的线程就可以使用更多的缓存。
        3.通过共享内存位置,易于实现内核间的通信。
        4.使用共享高速缓存把高速缓存一致性访问限制在较低缓存级,这可能提供一些额外的性能优势。

片上只有专用的L2高速缓存的潜在优势是:每个内核都可以更快地访问其私有L2高速缓存。

随着可用存储数量和内核数量的增加,与专用大L2而无L3,或简单共享L2相比,共享L3高速缓存与每个内核的专用L2提供更好的性能。

18.3.2 同时多线程

多核系统的另一个组织设计决策是:各个内核是否将实现smt。smt可以增加多核系统支持的硬件级线程数量。在应用级上,具有4个内核和支持每个内核具有4个并发线程的smt的多核系统,与具有16个内核的多核系统看起来是一样的。随着软件被开发为能充分地利用并行资源,smt方法似乎比单纯超标量方法更具有吸引力。

18.4 异构多核组织结构

对处理器芯片上硅空间的最佳利用的追求是永无止境的。随着时钟速度和逻辑密度的增加,设计人员必须平衡许多设计元素,以实现性能最大化和功耗最小化。已使用的方法包括:
        1.增加专用高速缓存的芯片空间的百分比;
        2.增加高速缓存级数;
        3.改变指令流水线的长度和功能组件;
        4.采用同时多线程;
        5.使用多个小核代替一个大核;

为了在性能和能耗方面获得更好的结果,越来越多的设计选择了异构多核组织结构。

18.4.1 不同的指令集架构

CPU/GPU 多核:在异构多核设计方面,最突出的趋势是在同一个芯片上同时使用cpu和gpu。带来了协调和正确性的问题。如果cpu和gpu共享片上资源,比如最后一级缓存LLC、互连网络和存储器控制。最关键的是高速缓存管理器策略提供有效共享LLC的方式。CPU和GPU之间高速缓存敏感性和内存访问速率的差异给高效共享LLC带来了重大挑战。

利用新增的GPU处理器的关键是要考虑把数据块传输到GPU,对其处理,然后把结果返回给主应用程序线程所需的时间。早期是CPU显式地把数据复制到GPU内存中,GPU完成计算,然后把结果复制回CPU。由于内存是分区的,所以CPU和GPU内存的高速缓存之间不会出现高速缓存一致性问题。另一方面,来回物理传输数据会导致性能下降。

异构系统架构HSA基金会倡议
        1.整个虚存空间对CPU和GPU都是可见的。CPU和GPU可以访问并分配系统虚存空间中的任何位置。
        2.虚存系统根据需要在物理主存中使用页。
        3.一致的内存策略确保CPU和GPU高速缓存都能看到最新的数据视图。
        4.统一的编程接口,使用户能在依赖于CPU执行的程序中利用GPU的并行功能,并在OS和硬件级别进行有效地协调。

18.4.3 高速缓存一致性和moesi模型

由于CPU和GPU处理的是完全不同的任务,因此它们拥有自己的L2高速缓存是有道理的。

当存在多个高速缓存时,就需要高速缓存一致性方案来避免访问到无效数据。在缓存中包含过时数据的情况下,被缓存的副本可能会无效,当需要再次改数据时,需要从内存重新读取。当由于写回包含脏数据的高速缓存而导致内存包含了过时数据时,可以通过强制写回内存来清理高速缓存。在其他缓存中的任何其他被缓存副本必须是无效的。这种软件负担在SOC芯片消耗了太多资源,从而导致使用硬件的高速缓存一致性实现,尤其是在异构多核处理器中。

在moesi模型中,一行包含的数据可以是“共享的”或“唯一的”。“共享的“行包含的数据来自可能共享的外部存储器。“唯一的”的行包含数据来自专属拥有该缓存的内核的存储区域。“干净”或“脏”行通常意味着内存包含最新、最近更新的数据,且该缓存和只是内存的副本,“脏”意味着必须在某个阶段将其写回内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值