CUDA,OpenCL,Metal GPU加速有什么区别,求解?
CUDA是计算通用设备架构,是英伟达专有的给计算加速卡或者GPU进行计算用程序设计的底层API,一般使用C语言编程,主要特点是分主程序(Host)还有设备程序(Device)两部分,内存部分分开,一般无法进行图形渲染。OpenCL是一种可以在CPU,GPU,而且不分品牌的跨平台计算用编程API。主要特点是你要把真正的要在设备上运行的代码作为字符串写在程序的源码中,如同俄罗斯套娃,然后在编译的时候选一个目标(GPU或者CPU)进行编译,一般无法进行图形渲染。
Metal是苹果推出的,苹果专有的,兼顾图形还有计算的,面向底层的程序设计API。一般采用C++编程,或者使用Metal的高端API(xxKit),只能在苹果设备上使用,但是它既能面向计算,也能面向图形(Shader)进行编程。 CUDA是计算通用设备架构,是英伟达专有的给计算加速卡或者GPU进行计算用程序设计的底层API,一般使用C语言编程,主要特点是分主程序(Host)还有设备程序(Device)两部分,内存部分分开,一般无法进行图形渲染。
OpenCL是一种可以在CPU,GPU,而且不分品牌的跨平台计算用编程API。主要特点是你要把真正的要在设备上运行的代码作为字符串写在程序的源码中,如同俄罗斯套娃,然后在编译的时候选一个目标(GPU或者CPU)进行编译,一般无法进行图形渲染。
Metal是苹果推出的,苹果专有的,兼顾图形还有计算的,面向底层的程序设计API。一般采用C++编程,或者使用Metal的高端API(xxKit),只能在苹果设备上使用,但是它既能面向计算,也能面向图形(Shader)进行编程。 OpenCL和Metal其实只相当于CUDA RUNTIME,提供了一些API和编译工具来进行GPU编程,但是CUDA还有包含众多CUDA Library和tools的CUDA TOOLKIT,我们平常下载安装的包也都是CUDA TOOLKIT。
Tools方面主要有Nsight Compute, nvprof, CUPTI, Compute Sanitizer, CUDA sight Eclipse Plugin 和CUDA GDB,主要用来进行GPU的性能调优。
Library方面有图中这些,提供了大量科学计算、人工智能、图像处理等方面的API。
这些工具和库的存在,使得CUDA编程的效率比OpenCL和Metal高得多,毕竟你C代码写得再好也没有NVIDIA汇编级优化的效率高。 1、cuda是英伟达公司的,metal是苹果公司的,使用这两个api加速的应用一般只能跑在这两家公司的产品上
2、opencl是一套标准接口,只要按照这个标准实现了驱动的硬件,使用opencl加速的应用原则上都能跑
3、cuda和metal是针对自家产品设计的专用api,有比较完善的调试分析工具,易于开发
4、opencl的优点是兼容性好,但是尽量要少用一些偏门的用法,很容易出现不兼容
5、gpu加速除了这几个api,还可以关注下vulkan,vulkan也是一套标准接口。
6、cuda,metal,opencl,vulkan从宏观看,开发思想比较类似,都是api+kernel的思路。对于gpu加速一般也就是任务并行+算法的并行实现。vulkan和metal除了通用计算,还能做渲染;cuda和opencl一样比较注重通用计算
7、额外的,cuda不仅支持gpu加速,还支持tensor core的加速,后者在矩阵运算上有特别明显的优势 CUDA是通用计算,简单理解就是用gpu做一些以前cpu做的计算工作,提升效率。
OpenCL和CUDA用处差不多,只不过OpenCL是开源方案,CUDA是封闭的只能用在老黄家自己的产品上。
微软的DX是一套图形API,侧重于图形绘制的一套标准接口,用在win平台和xbox平台。与之对应的是跨平台的开源方案OpenGL(现在已被新的vulkan逐渐取代)
Metal是苹果家的,用在ios和mac平台的一套gpu接口,可以理解成苹果的CUDA+DX
页:
[1]