硬件中多层次的并行性介绍

208 阅读6分钟

在多核危机震撼了整个行业之后,计算机架构师不再试图让芯片变得更加智能和快速,而是开始增加硬件组件的并行性。这代表着从依赖更高的时钟速度(这需要更高的功耗)到更节能的并行方法的转变,这导致了硬件中多层次的并行性。

中央处理器



一个CPU是由大量的电路(ALU)组成的,可以进行基本的算术运算(如加法或乘法)。由于CPU有许多算术单元,它可以将复杂的数学运算分解,使运算的子部分同时在不同的算术单元上运行,同时。这就是所谓的指令级并行。有时,这种类型的并行被带到一个更深的并行层次--位级并行。

开发者很少考虑到这个层次。而且这样做也没有什么意义。将指令以最方便的顺序安排给处理器的工作是由编译器完成的。只有一小部分试图从处理器或编译器开发者那里榨取所有可能的权力的工程师才会对这个层次感兴趣。

多处理器

创造并行硬件的另一个简单想法是,我们可以在计算机系统中安装一个以上的芯片--只要完全复制处理器。就像我们雇了第二个细木工在车间工作一样。这就是所谓的多处理器--就是你可以把任何有一个以上处理器的计算机系统称为多处理器,这些处理器通过互连网络连接在一起。

多核处理器

多核处理器是一种特殊的多核处理器 - 唯一的区别是所有处理器都在同一个芯片上。每个内核可以独立工作,操作系统将每个内核视为一个独立的处理器。这两种方法之间有细微的差别,表现在处理器的工作速度和访问内存的方式上,但现在,我们将把它们视为一样的。



另外,在并行硬件中,经常使用一个矢量处理器。它是一种专门的处理器,使用一组矢量指令,在一个处理器周期内提供对大型一维数据阵列的操作执行。这种类型的一个典型代表是GPU。

并行计算机的分类法

Flynn的分类法是最广泛使用的多处理器架构分类系统之一。它根据指令和数据流这两个独立的维度区分了四类计算机架构。

第一类是单指令单数据或SISD。SISD处理一条指令并处理一个数据块。因此,它首先处理一条指令,然后是第二条,然后是第三条,以此类推,连续进行。当然,这里没有并行化,所以我们将跳过这个类别。

第二类是多指令单数据或MISD。在这种方法中,我们仍然用一个数据块工作,但同时执行几个指令。与前一类一样,这也与并发系统无关,在此只是作为参考。

第三类是单指令多数据或SIMD。这类处理资源在多个核心之间有共享的控制单元。这种设计定义了它的特点。这类计算资源的几个核心有共同的控制单元,这决定了它的特点。其中一个主要特点是能够在所有可用的处理资源上同时执行一条指令。因此,同一指令可以利用所有可用的处理资源同时对大量的数据元素进行执行。同时,所有的处理资源在SIMD机器中不是通用的--这种机器的指令集非常有限,所以SIMD-系统通常用于解决特定的问题,这些问题通常对灵活性和通用性的要求低于实际计算能力。

第四类是多指令多数据或MIMD。在这里,每个处理资源都有一个独立的控制单元。所以它对指令的类型没有限制,它在一个单独的数据块上独立执行不同的指令。因此,它包括具有多个内核、多个CPU、甚至多个机器的架构,所以不同的任务实际上可以同时在几个不同的设备上执行。



MIMD有更广泛的指令集,单个处理资源比SIMD中的更通用。这就是为什么MIMD是弗林分类法中最常用的架构,从多核PC到分布式集群,你都能看到它。

CPU与GPU

CPU和GPU(又称图形处理单元)非常相似,它们都由大量的晶体管组成,每秒可以处理大量的指令。但是,计算机系统的这两个重要组成部分究竟有什么不同,以及什么时候应该使用其中一个?

标准的CPU是使用MIMD架构构建的。一个现代的CPU之所以强大,是因为工程师在其中实现了各种各样的指令。而一个计算机系统之所以能够完成一项任务,是因为它的CPU有能力完成该任务。

GPU是一种基于类似于SIMD架构的专门类型的处理器,针对非常有限的指令集进行优化。GPU以低于CPU的时钟速度运行,但有大量的内核,数百甚至数千个内核同时运行。这意味着它以令人难以置信的速度执行大量的简单指令,这是由于大规模的并行性。

例如,Nvidia GTX 1080显卡有2560个内核,时钟速度为1607 Mhz。由于这些核心的存在,Nvidia GTX 1080可以在每个时钟周期执行2560条指令。如果你想让图片的亮度提高1%,GPU将毫无困难地应对这个问题。但3.2GHz的新苹果M1 CPU每时钟周期只能执行8条指令。

尽管基于CPU时钟速度,单个CPU内核的速度更快,并且有广泛的指令集,但GPU内核的数量和它们提供的大规模并行性足以弥补CPU内核时钟速度和有限指令集的差异。



CPU更适合于复杂的线性任务:

GPU最适合重复性和高度并行的计算任务,如视频和图像处理、机器学习、金融模拟和许多其他类型的科学计算。你可以想象,使用GPU很容易进行矩阵加法和乘法等操作,因为矩阵单元中的这些操作大多是相互独立的,性质相似,因此可以并行化。

硬件架构变化很大,会影响程序在不同系统之间的可移植性,以及程序本身有时会因运行地点不同而有不同的内在加速。例如,许多图形程序在GPU资源上运行得更好、更快,而具有混合逻辑的普通程序在CPU上运行是有意义的。

这篇文章就写到这里,谢谢你的阅读。请查看Grokking Concurrency ,了解更多内容。