❶ 并行体系结构出现的原因是
并行体系结构出现主要因为随着各个领域对高性能计算的要求越来越高,尤其是多媒体领域大数据量高实时性的需求,使得传统的单处理器体系结构已经很难适应大规模并行计算的需求,于是多处理器并行体系结构逐渐成为研究的热点。
并行结构一般是指并行体系结构和软件架构采取并行编程。主要目的是使更多任务或数据同时运行。并行体系结构是指许多指令能同时进行的体系结构;并行编程一般有以下模式:共享内存模式;消息传递模式;数据并行模式。
在数据库中,为了提高存取和查询速率,会同时采用以上两种并行结构。并行性有两种解释,同时性:两个或两个以上的事件在同一时刻发生。并发性:两个或两个以上的事件在同一时间间隔发生。
从处理数据的角度看,并行性等级从低到高可分为四类。字串位串:同时只对一个字的一位进行处理。这是最基本的串行处理方式,不存在并行性。字串位并:同时对一个字的全部位进行处理,不同字之间是串行的。这里已开始出现并行性。
字并位串:同时对许多字的同一位进行处理。这种方式有较高的并行性。全并行:同时对许多字的全部位进行处理。这是最高一级的并行。在数据库中,并行结构主要是处理数据来分析的,具体采用哪一级并行性,主要与数据规模、机器设备和程序架构有关。
并行体系结构:
1、数据级并行它的出现是因为可以同时操作许多数据项。
2、任务级并行它的出现是因为创建了一些能够单独处理但大量采用并行方式执行的工作任务。
3、指令级并行在编译器的帮助下,利用流水线之类的思想适度开发数据级并行,利用推理执行之类的思想以中等水平开发数据级并行。
4、向量体系结构和图形处理器将单条指令并行应用于一个数据集,以开发数据级并行。
5、线程级并行在一种紧耦合硬件模型中开发数据级并行或任务级并行,这种模型允许在并行线程之间进行交互。
6、请求级并行在程序员或操作系统指定的大量去耦合任务之间开发并行。
❷ CUDA/SIMD/SIMT/DSA 关系
实现并行的编程方式
一共有三种不同的编程模型:串行(SISD)、数据并行(SIMD)和多线程(MIMD/SPMD)。
选择合适的并行计算模型可以更好地利用硬件资源,提高程序的性能和效率。
串行执行与 SISD(Single Instruction, Single Data)类似,每次 for 循环(Iter.i)都要执行一次向量 A 和向量 B 相加之后得到向量 C 的操作。在 CPU 中经常使用这种方式。
流水执行 PPE 是流水执行中的一种处理器架构,指令被分成多个阶段,每个阶段由一个专门的处理单元负责执行,从而实现指令的并行处理。
乱序执行 OOE 中,处理器可以在不改变程序语义的情况下,通过重新排序指令的执行顺序来提高指令级并行度和性能。
超长指令集 VLIW 架构是一条指令可以同时包含多个操作,这些操作可以在同一时钟周期内并行执行。
数据并行主要通过循环中的每个迭代独立实现,在硬件层面通过提供 SIMD 较宽的 ALU 执行单元。
多线程 SPMD 指的是在 SPMD 模型中使用多个线程来执行并行计算任务,每个线程处理不同的数据。
GPU 的 SIMT 实际上是具体硬件执行 SIMD 指令,采用并行编程模式使用 SPMD 来控制线程的方式。
NVIDIA 公司于 2007 年发布了 CUDA,支持编程人员利用更为通用的方式对 GPU 进行编程。
SIMD 是单顺序的指令流执行,每条指令多个数据输入并同时执行。
SIMT 是标量指令的多个指令流,可以动态地把线程按 wrap 分组执行。
英伟达 GPU 采用了 SIMT 的指令执行模式,给相关产品带来以下优势:通过细粒度的多线程调度将处理器的执行流水线细分为更小的单元,使得不同线程的指令可以交错执行,减少指令执行的等待时间和资源浪费,实现访存和计算并行。
Warp 是在不同地址数据下,执行相同指令的线程集合,所有线程执行相同的代码,可以看到 Thread Warp 中有很多个 Thread,多个 Warp 组成 SIMD Pipeline 执行对应的操作。
在 GPU 宏观架构层面,GDDR 里面的数据通过内存控制器传输到片内总线,然后分发到具体的核心,在每个执行核心中会有 SIMD 执行单元,实现并行计算。
AMD 的显卡也有大量的计算单元和计算核心,但采用的是 GCN 架构,搭载 GCN 系列架构的产品在游戏机等场景获得较高市场份额,但在数据中心市场并未取得显著成果,这与其性能表现有关。目前 AMD 将其 GPU 架构开发分为单独的 CDNA 和 RDNA 线路,分别专门用于计算和图形。
NVIDIA 推出 CUDA 并遵循自定义的 SIMT 架构,实现了对通用计算的高效支持,构建了用户易于实现的 SPMD 编程模型。如今整个科学计算、HPC 和 AI 的软件生态大多构建在 CUDA 的基础之上。