如何评价CUDA、OpenCL、OpenMP、OpenACC等主流并行运算框架?

论坛 期权论坛 期权     
匿名的论坛用户   2020-12-30 07:01   10869   7
分享到 :
0 人收藏

7 个回复

倒序浏览
2#
热心的小回应  16级独孤 | 2020-12-30 07:02:00
CUDA:我当然是兹词的
OpenCL:你干爹全有亲儿子,谁管你
OpenMP:CPU多线程而已,和GPU无关,不具可比性
OpenACC:用WP的人都比用它的人多,谈何主流
3#
热心的小回应  16级独孤 | 2020-12-30 07:02:01
CUDA: 好用也挺成熟了,毕竟那么多年了。但是只支持 NV 的 GPU 这个有点麻烦。

OpenCL: 一般,也比较成熟了。这个支持的就多多了,不光是 NV GPU/Xeon Phi可以用,Intel的核芯显卡甚至Altera的FPGA都能用。也有不少开源项目在用了。

OpenMP: 没啥好比较的。OpenMP是给你处理线程并行的,不能处理 offload.

OpenACC: Cray, Nvidia 和 PGI 想来挑战 Intel 和 IBM 的?后来又加上了个 AMD,然并卵。Intel Cilk Plus 都比它好用多了而且 Intel Compiler 还有原生支持。
4#
热心的小回应  16级独孤 | 2020-12-30 07:02:02
这个学期在学习高性能计算的课程中接触到这些,所以不是很懂,只能发个浅见,主要还是谈各个库的优点(我才不会说,因为我不太懂,所以还不知道什么缺点),如有错误,欢迎指正。
  • CUDA: 貌似上面的前辈们都已经总结了优缺点了,再叙述一遍吧。N家的多线程计算平台和API,支持GPU。
    • 关键词: 既有平台又是API
    • 语言支持: C/C++, Fortran
    • 优点:版本更行快,社区活跃, 支持GPU
    • 缺点:只支持N卡
  • OpenCL: 不是很了解,搬运下wiki的内容吧。看这wiki的内容,感觉不明觉厉啊。异构平台,支持CPU,GPU, DSPs, FPGAs 等。在多进程方面使用 task-based 和 data-based parallelism。
    • 关键词: 平台 + API
    • 语言支持: C/C++
    • 优点: 跨好多平台啊
    • 缺点:版本更新慢
  • OpenMP: 这是directive-based parallelism。在写完一般的代码后,转成多线程需要改动的地方不是很大,但只能支持shared memory(共享存储?),是一个管理线程级别的库。
    • 关键词: API
    • 语言支持: C/C++, Fortran
    • 优点:移植改动少,支持普遍(普通的gcc都支持)
    • 缺点:只支持shared memory
  • OpenACC:  支持CPU/GPU工作,从名字Accelerator就可以推断出,主要用于CPU代码向GPU的移植(?有待考证,我在课程中主要是这么用的。。。),更新方面其实也不快,需要注意编程技巧,否则代码会变慢。
    • 关键词: API
    • 语言支持: C/C++, Fortran
    • 优点: 移植简单
    • 缺点: 编译器啊,支持PGI,看计划有支持GCC,但还不知道什么时候才能发布
  • OpenMPI:  消息传递接口库。支持分布式存储,适合大规模集群服务器。另外,需要手动管理数据的分布和消息的传递,需要重新修改代码。
    • 关键词: API
    • 语言支持: C/C++
    • 优点: 支持共享存储和分布式存储
    • 缺点: 模型复杂,需要重构代码。
5#
热心的小回应  16级独孤 | 2020-12-30 07:02:03
OpenCL没啥大发展的,作为一个不打算深掘或者只是做应用为主的工程师或者团队,肯定要先看一个平台的官方支持力度或者发展社区的。
CUDA牛逼多了这方面
不要在GPGPU这里扯什么跨平台,你做一个项目要多久?你也得看看你做的项目一个做多久嘛,用在哪一块嘛
对于老板当然希望用跨平台的东西来省工资了。
但关你毛事啊。。。。。。
你能用好一个平台几年时间做好一个项目,你下半辈子就OK了。。。。对吧。。。
人生短短几十年,要注意开发效率和学习曲线的呢
我不是OpenCL黑啊,CUDA肯定是优先要上手的。。。。
OpenMP我就不说了,同样有毛病,还不少。。。。。。
CUDA本身的迭代和发展快多了。。。。
6#
热心的小回应  16级独孤 | 2020-12-30 07:02:04
CUDA版本更新很快,用起来很方便很多(相比GLSL),但仅限N卡。OpenCL跨平台,社区貌似不太活跃,更新不如CUDA。OpenMP不太了解。话说OpenCL和OpenMP这些个在工业界应用多吗?我所了解的貌似都是学术界在用。CUDA貌似还是有比较不错的云平台的,比如阿里云,EC2。
7#
热心的小回应  16级独孤 | 2020-12-30 07:02:05
我也来凑个热闹。
CUDA: N卡的标配计算套件,且只能应用于N卡。NVIDIA靠着cuda筑起了宽阔的护城河,现在主流甚至可以说是所有的神经网络框架,底层都是cuda套件的身影,NVIDIA也靠着这个将显卡大卖特卖。免费的软件生态反补自身的硬件产品销售,黄教主在软件上面的投的钱真的没有白花。看似靠生态粘性卖产品,是消费端的不二选择。
缺点:只支持N卡(只是全世界都在用N卡加速,NVIDIA也就不在乎这点了)
有点:可在kernel内部进行断点调试(这一点可以秒杀OpenCL)
OpenCL:主推通用计算。是有khronos组织发布一套编程框架,由支持它的各个厂商对这套框架进行底层实现,当然各个厂家的gpu特性各有不同,底层实现也会有所不同,所以不能拿着A厂的lib去调B厂的gpu硬件。
优点:移动端设备,几乎可以不用改代码,换成对应厂家的lib,重新编译下即可。
缺点:编码过程特别繁琐,尤其是初始化环节,简直累心,调试的话,基本就靠printf大法了,在此,厚颜无耻地安利下答主新出炉的opencl简化版,为写opencl工程师减轻一点点负担
onepick/simplyOCLOpenMP:主要是针对CPU,多线程的并行计算使用,采用pragma导语式,基本就几条命令,很简单。
OpenACC:也是导语式的,没有用过,不过听说NVIDIA北京用这个的还不少,坊间传说效率能达到峰值性能的70%~80%,不置评论。不过个人认为,这个主要针对前期验证加速,上工程肯定还是要用cuda或者opencl去写kernel。
需要说明的一点是,关于kernel,其实cuda和opencl还是很像的,学会了其中一个,另一个上手还是很快的(需要学习的其实主要是gpu的并行思想)。
8#
热心的小回应  16级独孤 | 2020-12-30 07:02:06
CUDA 是NVIDA的GPU编程框架,速度可以,coding时需要考虑GPU和CPU之间的内存拷贝耗时
OPENCL 就是一个GPU通用编程的框架,听说写起来对coder不够友好。
OPENMP 我也用过, 优点是写法简单,但是缺点就是太太太耗CPU了, 还不如自己写多线程省CPU。
OPENACC   这玩意没听过。。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3118703
帖子:623848
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP