【GPU】CUDA、OpenCL、OpenMP、OpenACC等并行运算框架区别

CUDA版本更新很快,但仅限N卡。OpenCL跨平台,社区貌似不太活跃,更新不如CUDA。

OpenMP 主要是针对CPU,最近开始支持GPU了,OpenACC:适合需要快速将CPU代码移植到GPU上的并行计算任务

  • CUDA: NVIDIA公司开发的一种并行计算平台和编程模型(平台+API),只支持NVIDIA的GPU。
    • 关键词: 既有平台又是API
    • 语言支持: C/C++, Fortran
    • 优点:版本更行快,社区活跃, 支持GPU
    • 缺点:只支持N卡
  • OpenCL: 是一个开放的标准,用于跨平台的并行编程,支持CPU,GPU, DSPsFPGAs 等( NV GPU/Xeon Phi/Intel等品牌都支持)

在多进程方面使用 task-based 和 data-based parallelism。

    • 关键词: 平台 + API
    • 语言支持: C/C++
    • 优点: 跨好多平台啊
    • 缺点:版本更新慢
  • OpenMP: 主要是针对CPU,多线程的并行计算使用。(OpenMP委员会已经增加了GPU offloading的支持,适用于NVIDIA和AMD的GPU)
    • 关键词: API
    • 语言支持: C/C++, Fortran
    • 优点:移植改动少,支持普遍(普通的gcc都支持)
    • 缺点:只支持shared memory
  • OpenACC: 支持CPU/GPU工作,从名字Accelerator就可以推断出,主要用于CPU代码向GPU的移植(?有待考证,我在课程中主要是这么用的。。。),更新方面其实也不快,需要注意编程技巧,否则代码会变慢。
    • 关键词: API
    • 语言支持: C/C++, Fortran
    • 优点: 移植简单
    • 缺点: 编译器啊,支持PGI,看计划有支持GCC,但还不知道什么时候才能发布

是一个类似于OpenMP的编程接口,专门为加速器(如GPU)设计。它通过使用编译制导语句来简化并行计算的编程工作,让开发者能够更容易地将计算任务迁移到加速器上执行。OpenACC的目标是降低使用加速器进行高性能计算的技术门槛,使非专家也能有效地利用这些资源。

  • OpenMPI: 不是并行库,是支持分布式存储,适合大规模集群服务器。另外,需要手动管理数据的分布和消息的传递,需要重新修改代码。

对比总结

框架

硬件支持

编程语言

并行模型

优点

缺点

CUDA

NVIDIA GPU

C/C++/Python

SIMT(线程网格)

高性能、生态完善

仅限 NVIDIA

OpenCL

CPU/GPU/FPGA/DSP

C/C++

任务+数据并行

跨平台、灵活

优化困难、生态弱

OpenMP

CPU(+GPU Offload)

C/C++/Fortran

共享内存并行

简单、编译器支持广

GPU 支持较新

OpenACC

CPU/GPU

C/C++/Fortran

指令集加速

移植简单

性能依赖编译器


如何选择?

  • 深度学习 / NVIDIA GPU 优化CUDA(PyTorch/TensorFlow 底层)。
  • 跨平台 GPU/FPGA 计算OpenCL(但生态不如 CUDA)。
  • CPU 多核并行OpenMP(最简单)。
  • 快速迁移 CPU 代码到 GPUOpenACC(适合科学计算)。
  • 超算 / 分布式计算OpenMPI + OpenMP/CUDA(混合并行)。

参考:

https://www.zhihu.com/question/31760994/answer/95977121

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值