并行计算架构基础

并行计算最主要的目标是提升计算的速度,从纯计算的角度来看,并行计算可以被定义为一种同时执行多个运算的计算形式,其核心原理在于:复杂的大型问题通常能够被分解为若干较小的子问题,这些子问题随后可通过并行处理的方式协同解决。实际应用中,并行计算主要涉及两大核心技术领域:计算机架构和并行编程架构

计算机架构(硬件层面)

计算机架构主要关注在架构层面支持并行。计算机体系结构存在多种分类方式,一种广泛采用的分类方法是‌弗林分类法(Flynn’s Taxonomy)‌,其根据指令流(instruction stream)与数据流(data stream)在计算核心间的流动模式,通常将架构划分为四类 :

单指令流单数据流 (SISD): 采用单一指令流按顺序处理单一数据流,是传统单核处理器的基本架构‌。
  • 特点‌
    • 指令与数据严格串行执行,不支持并行处理‌。
    • 可通过指令流水线技术提升执行效率(如多模块交叉存储器)‌。
单指令流多数据流 (SIMD):单一指令流同时操作多个数据流,属于数据级并行技术‌。
  • ‌特点‌:
    • 通过重复设置处理单元(如GPU的CUDA核心)实现数据并行‌。
    • 对数组循环操作效率高,但对条件分支(如switch语句)效率低‌。
多指令流单数据流 (MISD):多个指令流对同一数据流进行不同处理,无实际商业实现‌。
  • 特点‌: 理论上允许多指令并行处理同一数据,但存在逻辑冲突问题‌。
多指令流多数据流 (MIMD) ‌:多指令流并行处理多数据流,支持线程级及以上并行‌。

多数多指令多数据流(MIMD)架构会融合单指令多数据流(SIMD)执行子单元。此类混合架构通过SIMD子单元加速数据并行任务(如矩阵运算),同时利用MIMD主架构处理控制密集型任务,实现指令级与数据级并行的协同优化。

这四种计算机架构可总结为下表:

类型 指令流 数据流 并行类型 典型场景
SISD 无(顺序执行) 传统单核程序‌
SIMD 数据级并行 向量运算‌
MISD 理论模型 无实际应用‌
MIMD 线程/进程级并行 分布式系统‌

在架构层面上所作的努力其实都是为了提升以下3个目标:

1. 减少延迟
  • 定义‌:操作从启动到完成所需的时间,计量单位通常为‌微秒(μs)
  • 技术特征‌:反映系统响应速度,直接影响实时性任务性能(如高频交易系统要求延迟<100μs)
2. 增加带宽
  • 定义‌:单位时间内可处理的数据量,标准单位为‌兆字节/秒(MB/s)或‌ 千兆字节/秒(GB/s)
  • 技术特征‌:表征数据传输能力,决定大数据处理效率(如PCIe 4.0 x16带宽达31.5GB/s)
3.增加吞吐
  • 定义‌:单位时间内完成的操作数量,常用‌十亿次浮点运算/秒(GFLOPs)计量
  • 技术特征‌:体现计算密集型任务处理能力(如NVIDIA A100 GPU峰值吞吐量19.5TFLOPs)

此外计算机体系结构还可根据其内存组织形式进一步细分为以下两种类型:

多节点分布式内存架构

在多节点系统中,大规模计算引擎通过由网络互连的多个处理器构建而成。每个处理器都拥有独立的本地内存,且各处理器之间可通过网络进行通信,共享各自本地内存中的数据。图1-7展示了一个典型的分布式内存多节点系统。此类系统通常被称为‌集群‌(Cluster)‌

并行计算架构基础_第1张图片

多处理器共享内存架构

‌‌多处理器架构的规模通常涵盖‌双处理器‌至‌数十或数百个处理器‌。这些处理器要么物理连接到同一内存(如图1-8所示),要么通过低延迟链路(如PCI-Express或PCIe)互联。尽管共享内存意味着共享地址空间,但这并不等同于所有处理器必须使用单一物理内存。此类多处理器系统既包括单芯片上集成多个核心的‌多核(Multicore)架构‌,也包含由多芯片组成的计算机系统(每个芯片可能本身采用多核设计)。多核架构已彻底取代单核架构,成为主流。术语‌众核(Many-core)‌通常用于描述核心数量极高(数十至数百个)的多核架构。近年来,计算机体系结构正逐步从‌多核‌向‌众核‌方向演进‌
并行计算架构基础_第2张图片

GPU(图形处理器) 是众核架构的典型代表,几乎涵盖了前文提及的所有并行计算类型:

  • 多线程(Multithreading)
  • 多指令多数据(MIMD)
  • 单指令多数据(SIMD)
  • 指令级并行(Instruction-Level Parallelism)

NVIDIA为此类架构创造了‌单指令多线程(SIMT,Single Instruction Multiple Thread)”这一术语。GPU与CPU并无共同的起源。‌GPU最初是专用于图形加速的硬件,直到近年来才发展为:

  • 高性能通用计算处理器
  • 支持完全可编程的任务与数据并行
  • 专为大规模并行计算问题优化

例如,现代GPU(如NVIDIA的CUDA架构)已广泛用于人工智能、科学计算和高性能计算领域,其并行能力远超传统多核CPU‌

并行编程架构(软件层面)

并行编程架构是为了充分利用多核处理器、分布式系统或异构计算资源而设计的软件和硬件体系。

1. 任务并行

‌任务并行‌是一种并行计算范式,其核心思想是‌将复杂任务分解为多个独立或弱依赖的子任务,由不同的计算单元(如CPU核心、分布式节点)并行执行这些子任务‌,最终通过协调与同步完成整体目标。其处理步骤如下:
1‌)任务分解‌: 将程序逻辑拆分为多个‌独立的任务‌(Task 1, Task 2, Task 3),每个任务执行不同的操作。
2‌)任务调度器‌: 动态分配任务到可用计算资源(如CPU核心、GPU线程、分布式节点)。
3‌)并行执行单元‌: 多核CPU、GPU线程、分布式节点等物理资源执行分配的任务。每个执行单元独立完成任务,无需与其他任务通信(或仅在必要时同步)。
4‌)同步与结果合并‌: 使用‌同步原语‌(如Barrier、Future/Promise)等待所有任务完成。合并任务结果(如归约操作、数据聚合)。

2. 数据并行

数据并行‌是一种并行计算范式,其核心思想是‌将大规模数据集分割为多个子集,并分配给不同的计算单元(如CPU核心、GPU线程、分布式节点),使每个单元对不同的数据子集执行相同的操作‌,最终合并所有结果以实现整体任务加速。

设计数据并行程序的第一步是将数据划分到多个线程中,‌每个线程处理其中一部分数据‌。通常,数据划分有两种方式:‌块划分(Block Partitioning)‌和‌循环划分(Cyclic Partitioning)‌。

‌块划分‌: 将数据的多个连续元素组合成一个数据块,每个数据块以任意顺序分配给单个线程,且‌每个线程通常一次仅处理一个数据块‌。
块划分:每个线程处理一个数据块‌
块划分:每个线程处理一个数据块‌

‌循环划分‌: 将少量数据元素组合成一个数据块,‌相邻的线程被分配相邻的数据块‌,且每个线程可处理多个数据块。当线程需处理新数据块时,需‌跳过与线程数量相等的数据块数‌。
在这里插入图片描述
循环划分(Cyclic Partition):每个线程处理多个数据块

你可能感兴趣的:(架构,大数据)