并行计算模型 分类 | 并行计算模型/框架 | 出现时间 | 支持硬件 | 并行粒度 | 内存访问模型 | 性能优势 | 不足 | 适用场景 | 面向多核处理器的并行计算模型 | 多线程(以OpenMP为例) | 1997 | CPU、MIC | 细粒度 | 共享内存 | 实现简单,并行效率高,可移植性强 | 只适用SMP等并行环境,不适合集群,扩展性较差 | 简单处理算法级的并行与优化 | 面向众核处理器的并行计算模型 | CUDA | 2007 | GPU | 细粒度 | 共享内存 | 基于C语言,有强大的并行浮点计算能力 | 仅能在GPU硬件上使用,通用性较弱 | 适合大规模数据密集型并行计算 | OpenCL | 2008 | CPU、GPU、FPGA等 | 细粒度 | 共享内存 | 支持跨平台和硬件体系结构编程,可移植性强 | 开发环境完善性较差,API设计缺乏一致性 | 适合异构平台计算 | 面向分布式集群的并行计算模型 | MPI | 1992 | CPU、MIC | 细/粗粒度 | 分布式内存 | 适用于集群环境,并行算法扩展性强 | 编程模型复杂,容错性差 | 计算密集型应用 | MapReduce | 2004 | CPU | 粗粒度 | 分布式内存 | 编程实现简单,容错性好,计算能力较强 | 模型单一,适合批处理模式,但中间结果要写入磁盘,不适合迭代运算 | 数据密集型应用、分布式数据处理 | Spark | 2010 | CPU | 粗粒度 | 分布式内存 | 丰富的API,减少磁盘I/O,适合迭代算法 | 内存消耗较大 | 适合图计算、迭代计算和交互式数据分析 |
|