有多种不同的方法可以对计算机架构进行分类。一个广泛使用的分类方法是弗林分类法(Flynn’s Taxonomy),它根据指令和数据进入CPU的方式,将计算机架构分为4种不同的类型(如下图所示)。

 

  • 单指令单数据(SISD)
  • 单指令多数据(SIMD)
  • 多指令单数据(MISD)
  • 多指令多数据(MIMD)

 

计算机架构-编程知识网

       SISD指的是传统计算机:一种串行架构。在这种计算机上只有一个核心。在任何时间点上只有一个指令流在处理一个数据流。
       SIMD是一种并行架构类型。在这种计算机上有多个核心。在任何时间点上所有的核心只有一个指令流处理不同的数据流。向量机是一种典型的SIMD类型的计算机,现在大多数计算机都采用了SIMD架构。SIMD最大的优势或许就是,在CPU上编写代码时,程序员可以继续按串行逻辑思考但对并行数据操作实现并行加速,而其他细节则由编译器来负
责。
       MISD类架构比较少见,在这种架构中,每个核心通过使用多个指令流处理同一个数据流。
       MIMD是一种并行架构,在这种架构中,多个核心使用多个指令流来异步处理多个数据流,从而实现空间上的并行性。许多MIMD架构还包括SIMD执行的子组件。
为了实现以下目的,在架构层次上已经取得了许多进展。

  • 降低延迟
  • 提高带宽
  • 提高吞吐量

        延迟是一个操作从开始到完成所需要的时间,常用微秒来表示。带宽是单位时间内可处理的数据量,通常表示为MB/s或GB/s。吞吐量是单位时间内成功处理的运算数量,通常表示为gflops(即每秒十亿次的浮点运算数量),特别是在重点使用浮点          计算的科学计算领域经常用到。延迟用来衡量完成一次操作的时间,而吞吐量用来衡量在给定的单位时间内处理的操作量。
计算机架构也能根据内存组织方式进行进一步划分,一般可以分成下面两种类型。

  • 分布式内存的多节点系统
  • 共享内存的多处理器系统

        在多节点系统中,大型计算引擎是由许多网络连接的处理器构成的。每个处理器有自己的本地内存,而且处理器之间可以通过网络进行通信。下图所示为一个典型的分布式内存的多节点系统,这种系统常被称作集群。

计算机架构-编程知识网

        多处理器架构的大小通常是从双处理器到几十个或几百个处理器之间。这些处理器要么是与同一个物理内存相关联(如图1-8所示),要么共用一个低延迟的链路(如PCI-Express或PCIe)。尽管共享内存意味着共享地址空间,但并不意味着它就是一个独立的物理内存。这样的多处理器不仅包括由多个核心组成的单片机系统,即所谓的多核系统,而且还包括由多个芯片组成的计算机系统,其中每一个芯片都可能是多核的。目前,多核架构已经永久地取代了单核架构。

计算机架构-编程知识网

        “众核”(many-core)通常是指有很多核心(几十或几百个)的多核架构。近年来,计算机架构正在从多核转向众核。
        GPU代表了一种众核架构,几乎包括了前文描述的所有并行结构:多线程、MIMD(多指令多数据)、SIMD(单指令多数据),以及指令级并行。NVIDIA公司称这种架构为SIMT(单指令多线程)。
        GPU和CPU的来源并不相同。历史上,GPU是图形加速器。直到最近,GPU才演化成一个强大的、多用途的、完全可编程的,以及任务和数据并行的处理器,它非常适合解决
大规模的并行计算问题。

GPU核心和CPU核心

      尽管可以使用多核和众核来区分CPU和GPU的架构,但这两种核心是完全不同的。
      CPU核心比较重,用来处理非常复杂的控制逻辑,以优化串行程序执行。
      GPU核心较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量。