在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求:
- 计算密集(Computer-Intensive)型应用,如大型科学工程计算与数值模拟;
- 数据密集(Data-Intensive)型应用,如数字图书馆、数据仓库、数据挖掘和计算可视化等;
- 网络密集(Network-Intensive)型应用,如协同工作、遥控和远程医疗诊断等。
并行编程模型主要有三种:适用于共享内存的多线程编程模型,适用于分布内存的消息传递编程模型,混合编程模型。
在计算机系统中,处理器永远都是访问离自己最近的存储空间速度最快,比如L1 cache->L2->本地节点内存->远程节点内存/磁盘,而各层次的存储容量跟访问速度恰恰相反。并行计算中,并行算法的设计是决定性能的关键,有些问题天生具有良好的并行性,比如待处理数据集合可以被较好的去耦,而有些问题则需要复杂的公式推导和转换以适合并行计算。同时,还要避免计算过程中可能出现的瓶颈,任务划分要充分考虑负载均衡特别是动态负载均衡,“对等”的思想是维护负载均衡和保持可扩展性的关键之一,即在设计时尽量避免使用Master/Slave和Client/Server的模式。
1.并行机的体系
并行机的发展从SIMD到MIMD,衍生除了四种经典的体系结构模式:SMP(Symmetric Shared-Memory Multiprocessor,比如常用的多核机,可扩展性较差,处理器数目8~16个),DSM(Distributed Shared-Memory,物理存储器分布于各个处理节点,而逻辑地址空间采用统一编