并行计算粒度
-
分布式并行(多主机,多进程) : MPI
-
共享存储式并行 (多线程) :OpenMP OpenCL OpenACC
-
指令级并行 CPU流水线
CPU流水线
指将一条指令的执行过程划分为多个阶段,使得在每个时钟周期内能够并行执行多条指令,从而提高 CPU 的执行效率。
即将一个完整的指令执行过程分成若干个小的执行步骤,在下一个时钟周期中,另一个指令的前一步骤正好可以开始执行,并在依次进行每一步后输出执行结果,与此同时前一条指令的下一步骤也开始执行,并在下下个时钟周期中输出结果。这样,就可以实现 CPU 在同一时刻执行多条指令,并且不需要等待一条指令的完全执行才能执行下一条指令。这种处理方式类似于工厂的装配线,因此也被称为指令流水线。
一条指令的执行步骤:
- 取指令 Instruction Fetch 从内存中读取指令到指令寄存器;
- 指令译码 Instruction Decode 解码指令,确定指令操作的数据以及地址
- 指令执行 Execute 根据指令操作的数据和地址进行运算,逻辑等操作
- 访问存储 Memory Access 如果指令需要访问内存,将操作结果或需要的数据从内存中读出或写入内存中;
- 写回 Write Back 将执行结果写回到寄存器中。
一般来讲,CPU要执行一条指令,只要顺序的按照上述步骤即可。但是现代CPU为了提升效率,都会对指令进行优化,如乱序执行,预测分支等,使得CPU对指令的执行更加复杂。
补充,上述流水线模型为五段式模型,还有六段式,八段式,十三段式等模型。
超算平台体系结构
CPU核
核内是指令级别的并行方式,一般采用流水线并行。
多核CPU
核私有L1+L2 cache + 公有L3… cache
核间采用共享存储式的并行,即多线程并行
多个CPU组成一个计算节点 NUMA架构
Non-Uniform Memory Access,非一致性内存访问
CPU之间内存独立,通信使用如MPI等机制
计算分区
如将多个芯片级别的计算单元通过高性能通信机制组织起来形成的计算系统,如包括SMP和NUMA架构的服务器,分布式计算集群。
异构并行
异构是指在同一个系统或设备中,拥有不同种类或品牌的 CPU 或处理器,可以是不同的架构、核心、频率、功耗等参数的处理器进行混合使用。
所谓异构并行,即不同处理器之间通过通信进行协调来共同完成一件事。
- 最常见的是CPU + GPU的组合方式,进行GPU加速计算
异构处理器都采用了不同的架构、计算模型和硬件实现,以满足不同领域和应用的需求,可以提升计算性能、降低能耗和实现更好的能效比。
异构处理器通信方式
- PCIE
- RDMA
- DMA
- MPI
- 网络
总结
我们可以将一个计算量超大超复杂的任务,有一个大型的计算平台:
- 我们就可以将任务进行拆解,到计算平台上的各个NUMA架构的CPU节点中,那么CPU与CPU之间进行MPI通信;
- 而对于任意一个CPU节点,又可以拆解到多个核上,进行多线程任务拆解与执行;
这样根据计算平台的体系,自上而下的进行任务拆解,直到整个任务的完成。