![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3233f238b1f6aa3be771b14dcd2daa36.png)
1、硬件层面
图形加速器的三大制造商是:NVIDIA、AMD 和 Intel。
英伟达目前在市场上占据主导地位,占有最大份额。NVIDIA 为移动图形处理器 (Tegra)、笔记本电脑 GPU (GeForce GT)、台式机 GPU (GeForce GTX) 和 GPU 服务器(Quadro 和 Tesla)提供全面的计算和处理解决方案。
这种广泛的 NVIDIA 硬件可以与 CUDA 和 OpenCL 一起使用,但 CUDA 在 NVIDIA 上的性能更高,因为它是在设计时考虑到了 NVIDIA 硬件。
相关内容:阅读我们关于 NVIDIA CUDA的深入指南
AMD为嵌入式解决方案和移动系统、笔记本电脑和台式机创建 Radeon GPU,并为服务器创建 Radeon Instinct GPU。OpenCL 是用于在 AMD GPU 上运行图形处理的主要语言。
英特尔提供集成到其 CPU 中的 GPU。OpenCL 可以在这些 GPU 上运行,但对于笔记本电脑来说已经足够了,但它在通用计算方面却没有竞争力。
除了 GPU,您还可以在 CPU 和 FPGA / ASIC 上运行 OpenCL 代码。这是在集成解决方案中使用 OpenCL 时的主要趋势。
2、操作系统
CUDA可以在 Windows、Linux 和 MacOS 上运行,但只能在 NVIDIA 硬件上运行。
OpenCL应用程序几乎可以在任何操作系统上运行,并且可以在大多数类型的硬件上运行,包括 FPGA 和 ASIC。
3、软件和社区
NVIDIA致力于 CUDA 平台的商业化和开发。NVIDIA 开发了包括CUDA Toolkit、NVIDIA Performance Primitives (NPP)、Video SDK 和 Visual Profiler 在内的工具,并与 Microsoft Visual Studio 和其他流行平台进行了集成。CUDA 拥有广泛的第三方工具和库生态系统。CUDA 工具包可快速支持最新的 NVIDIA 硬件功能。
AMD 的社区活动更加有限。AMD 构建了CodeXL Toolkit,它提供了全系列的 OpenCL 编程工具。
4、编程模型
CUDA不是一种语言或 API。它是并行计算的平台和编程模型,它使用 GPU 加速通用计算。开发人员仍然可以使用 C 或 C++ 编写软件,并使用 CUDA 关键字包括并行化。
OpenCL不允许使用 C++ 编写代码,但您可以在类似于 C 编程语言的环境中工作,并直接使用 GPU 资源。
5、CUDA 的优点和局限性
优点
与具有图形 API 的传统通用图形处理器 (GPGPU) 计算机相比,CUDA 具有以下几个优势:
统一内存(在 CUDA 6.0 或更高版本中)和统一虚拟内存(在 CUDA 4.0 或更高版本中)
共享内存——为 CUDA 线程提供更快的共享内存区域。它可以用作缓存机制,并提供比纹理查找更多的带宽。
分散读取:可以从内存中的任何地址读取代码。
改进的下载和读取性能,在 GPU 和 GPU 之间运行良好
完全支持按位和整数运算
限制
CUDA 源代码在主机或 GPU 上提供,由 C++ 语法规则定义。较早版本的 CUDA 使用 C 语法规则,这意味着更新的 CUDA 源代码可能会也可能不会按预期工作。
CUDA 与 OpenGL 等渲染语言具有单向互操作性。OpenGL 可以访问 CUDA 注册的内存,但 CUDA 不能访问 OpenGL 内存。
更高版本的 CUDA 不为旧版本提供模拟器或回退支持。
CUDA 仅支持 NVIDIA 硬件。
6、OpenCL 的优点和限制
优点
由于其运行时执行模型,OpenCL 提供了抽象内存和可移植性。
OpenCL 内核可以在任何支持的软件实现上运行。
OpenCL 支持异构系统架构,可使用 C++ 17 原子实现 GPU 和处理器之间的高效通信。
限制
开发人员无法在不牺牲可移植性的情况下直接在 NVIDIA GPU 上实现专有硬件技术,例如内联并行线程执行 (PTX)。
一项在 NVIDIA GPU 上直接比较 CUDA 程序与 OpenCL 的研究表明,CUDA 比 OpenCL 快 30%。
OpenCL 很少用于机器学习。因此,社区很小,可用的库和教程很少。
使用 Run:AI 大规模运行 CUDA 和 OpenCL
Run:AI 自动化机器学习基础设施的资源管理和编排。借助 Run:AI,您可以根据需要自动运行尽可能多的计算密集型实验,并结合 CUDA 和/或 OpenCL。
以下是您在使用 Run:AI 时获得的一些功能:
高级可见性——通过汇集 GPU 计算资源来创建高效的资源共享管道。
不再有瓶颈——您可以设置 GPU 资源的保证配额,以避免瓶颈并优化计费。
更高级别的控制——Run:AI 使您能够动态更改资源分配,确保每个作业在任何给定时间都能获得所需的资源。
Run:AI 简化了机器学习基础设施管道,帮助数据科学家提高生产力和模型质量。
7、补充一点
CUDA 的竞争对手OpenCL于 2009 年推出,试图为异构计算提供一个全新的行业技术标准,不仅仅限于带有 NVIDIA GPU 的 Intel/AMD CPU的计算平台。虽然OpenCL因其通用性听起来很有吸引力,但它在 NVIDIA GPU 上的性能不如 CUDA,而且许多深度学习框架要么不支持OpenCL,要么仅在其 CUDA 支持发布后才支持它。
转载文章:https://www.run.ai/guides/nvidia-cuda-basics-and-best-practices/cuda-vs-opencl
参考
https://nvidianews.nvidia.com/
https://www.infoworld.com/article/3299703/what-is-cuda-parallel-programming-for-gpus.html