高性能计算 · 交互式可视化

探索 并行与高性能计算 的核心原理

从 MPI 通信到 CUDA 线程层次,从 Amdahl 定律到 Cache 局部性——8 个交互模块,用动画拆解 HPC 的关键概念。

8
可视化模块
0
外部依赖
SVG
矢量渲染
RAF
动画驱动
01 / MPI

⇄MPI 并行通信

消息传递接口(MPI)是分布式并行计算的核心编程模型。本模块可视化点对点通信 Send/Recv 与集合通信 Broadcast、Reduce、Scatter、Gather 的数据流。

Root (Rank 0) Worker Rank 消息包
通信模式
进程数 8
速度 1.0×
点对点通信:Root 通过 MPI_Send 将数据发给目标进程,对方用 MPI_Recv 接收。集合通信:所有进程共同参与——MPI_Bcast 广播根节点数据,MPI_Reduce 将各进程数据归约到根节点。
0
消息数
0 B
传输量
0 µs
延迟
0 MB/s
带宽
02 / CUDA

▦CUDA GPU 编程

CUDA 采用 Grid → Block → Thread 三级线程层次。本模块展示线程层次结构与 Warp 分化现象——同一 Warp 内的线程因分支条件而部分执行。

活跃线程 闲置(分化) Warp 边界
线程配置
Grid 尺寸 4×3
Block 尺寸 8×8
分化阈值 50%
GPU 以 Warp(32 线程)为调度单位执行。当线程遇到 if/else 分支时,未命中分支的线程会被禁用(Warp 分化),导致 SIMT 利用率下降。Block 尺寸建议为 32 的倍数。
0
总线程
0
Block 数
0
Warp 数
0%
SIMT 利用率
03 / OpenMP

⑂OpenMP Fork-Join

OpenMP 基于 Fork-Join 模型:主线程在并行区域创建(fork)一组工作线程,结束后汇合(join)。本模块展示线程时序与数据作用域。

主线程 工作线程 shared 变量 private 变量
并行配置
线程数 4
并行比例 70%
速度 1.0×
#pragma omp parallel 创建并行区域,主线程 fork 出工作线程。变量可用 shared(所有线程共享)或 private(每线程独立副本)限定。#pragma omp for 将循环迭代分配给各线程。
0
线程数
0 ms
并行耗时
0 ms
串行耗时
1.0×
加速比
04 / MapReduce

≣MapReduce 流水线

MapReduce 将大数据处理拆分为 Map(映射)、Shuffle(洗牌)、Reduce(归约)三阶段。本模块动画演示键值对在各阶段间的流动与重组。

Map 输出 Shuffle 传输 Reduce 输出
作业配置
Mapper 数 4
Reducer 数 3
速度 1.0×
Map:每个 Mapper 处理输入分片,输出 <key, value> 对。Shuffle:按 key 分区并排序,将相同 key 发往同一 Reducer。Reduce:对每组 key 的 values 执行归约函数(如求和、计数),输出最终结果。
0
键值对
0
Shuffle 量
0 ms
作业耗时
0 rec/s
吞吐率
05 / Amdahl

↗Amdahl 定律

Amdahl 定律揭示了并行计算的加速上限:即使无限增加处理器,串行部分仍制约整体加速比。本模块可视化加速比曲线与并行比例 p 的影响。

当前 p 加速比 理论曲线族 理想线性
参数调节
并行比例 p 0.80
处理器数 N 16
加速比公式:S = 1 / ((1-p) + p/N),其中 p 为可并行比例,N 为处理器数。当 N→∞ 时,最大加速比 S_max = 1/(1-p)——串行部分 1-p 是加速比的不可逾越上限。
1.0×
当前加速比
5.0×
最大加速比
0%
并行效率
20%
串行瓶颈
06 / Cache

▦Cache 优化

矩阵遍历的访问模式直接影响 Cache 命中率。本模块对比逐行遍历(空间局部性好)与逐列遍历(局部性差),并展示 Tiling/Blocking 分块如何提升复用。

已访问 当前 Cache Line Tile 块 Cache Miss
访问模式
矩阵大小 8×8
Tile 大小 4
CPU 按 Cache Line(通常 64B)加载内存。行主序遍历连续访问,命中率高;列遍历跨行跳跃,每次访问触发 Miss。Tiling 将矩阵分成小块,使每块完全驻留 Cache,大幅提升空间与时间局部性。
0
Cache 命中
0
Cache Miss
0%
命中率
0
访问周期
07 / SIMD

⫼向量化 SIMD

单指令多数据(SIMD)用一条指令同时处理多个数据元素。本模块对比标量循环与 AVX/NEON 向量循环的吞吐差异,展示向量化循环展开。

已处理 当前向量 标量(逐元素)
向量化配置
数组长度 32
速度 1.0×
SSE(128 位 / 4 单精度)、AVX2(256 位 / 8)、AVX-512(512 位 / 16)一条指令处理多个元素。#pragma omp simd 或编译器自动向量化可将标量循环展开为向量指令,吞吐成倍提升。
0
标量指令
0
向量指令
0
总周期
1.0×
加速比
08 / COMM

⇆通信优化

并行程序的性能瓶颈常在通信。本模块展示延迟隐藏(计算与通信重叠)与不同集合通信拓扑(Ring / Tree / Mesh)对延迟与带宽的影响。

计算 通信 重叠区域 空闲
优化选项
节点数 8
通信占比 40%
延迟隐藏:用非阻塞通信(MPI_Isend/Irecv)将通信与计算重叠,掩盖网络延迟。Ring 拓扑带宽最优,Tree 延迟最优(O(log N)),Mesh 适合高维近邻通信。
0 µs
总延迟
0%
重叠率
0 ms
执行时间
1.0×
重叠加速比