📜  CUDA 编程简介

📅  最后修改于: 2022-05-13 01:56:11.941000             🧑  作者: Mango

CUDA 编程简介

在本文中,我们将介绍 CUDA 编程的概述,主要关注 CUDA 需求的概念,我们还将讨论 CUDA 的执行模型。最后,我们将看到应用程序。让我们一一讨论。

CUDA 代表计算统一设备架构。它是 C/C++ 编程的扩展。 CUDA 是一种使用图形处理单元 (GPU) 的编程语言。它是一个并行计算平台和 API(应用程序编程接口)模型,Compute Unified Device Architecture 由 Nvidia 开发。这允许并行执行计算,同时提供良好的速度。使用 CUDA,可以利用 Nvidia GPU 的强大功能来执行常见的计算任务,例如处理矩阵和其他线性代数运算,而不是简单地执行图形计算。

为什么我们需要 CUDA?

  • GPU 旨在执行高速并行计算以显示游戏等图形。
  • 使用可用的 CUDA 资源。已经部署了超过 1 亿个 GPU。
  • 对于某些应用,它比其他微处理器提供 30-100 倍的加速。
  • 与稍大的 CPU 相比,GPU 具有非常小的算术逻辑单元 (ALU)。这允许许多并行计算,例如计算屏幕上每个像素的颜色等。

CUDA的架构

  • 16 个流式多处理器 (SM) 图如上图所示。
  • 每个流式多处理器有 8 个流式处理器 (SP),即我们总共有 128 个流式处理器 (SP)。
  • 现在,每个 Streaming 处理器都有一个 MAD 单元(乘法和加法单元)和一个附加的 MU(乘法单元)。
  • GT200 拥有 240 个流处理器 (SP),以及超过 1 TFLOP 的处理能力。
  • 每个流处理器都有优雅的线程,每个应用程序可以运行数千个线程。
  • G80 卡支持每个流式多处理器 768 个线程(注意:不是每个 SP)。
  • 最终,在每个 Streaming Multiprocessor 有 8 个 SP 之后,每个 SP 最多支持 96 个线程。可以运行的总线程数 – 128 * 96 = 12,228 次。
  • 因此这些处理器被称为大规模并行。
  • G80 芯片的内存带宽为 86.4GB/s。
  • 它还具有与 CPU 的 8GB/s 通信通道(4GB/s 用于上传到 CPU RAM,4GB/s 用于从 CPU RAM 下载)。

CUDA 是如何工作的?

  • GPU 一次运行一个内核(一组任务)。
  • 每个内核由块组成,这些块是独立的 ALU 组。
  • 每个块都包含线程,它们是计算级别。
  • 每个块中的线程通常一起工作以计算一个值。
  • 同一块中的线程可以共享内存。
  • 在 CUDA 中,从 CPU 向 GPU 发送信息通常是计算中最典型的部分。
  • 对于每个线程,本地内存是最快的,其次是共享内存,全局内存、静态内存和纹理内存最慢。

工作如何分配?

  • 每个线程“知道”它所在块的 x 和 y 坐标,以及它在块中的坐标。
  • 这些位置可用于计算每个线程的唯一线程 ID。
  • 完成的计算工作将取决于线程 ID 的值。

例如,线程 ID 对应于一组矩阵元素。

CUDA 应用程序

CUDA 应用程序必须对大量数据运行并行操作,并且是处理密集型的。

  1. 计算金融
  2. 气候、天气和海洋建模
  3. 数据科学与分析
  4. 深度学习和机器学习
  5. 国防和情报
  6. 制造/AEC
  7. 媒体和娱乐
  8. 医学影像
  9. 油和气
  10. 研究
  11. 安全和安保
  12. 工具和管理

CUDA 的好处

与具有图形 API 的传统通用图形处理器 (GPU) 计算机相比,CUDA 具有以下几个优势:

  • 集成内存(CUDA 6.0 或更高版本)和集成虚拟内存(CUDA 4.0 或更高版本)。
  • 共享内存为 CUDA 线程提供了一个快速的共享内存区域。它可以用作缓存机制,并提供比纹理查找更多的带宽。
  • 可以从内存中的任何地址读取分散的读取代码。
  • 改进了下载和读取的性能,这在 GPU 和 GPU 上运行良好。
  • CUDA 完全支持按位和整数运算。

CUDA 的局限性

  • CUDA 源代码在主机或 GPU 上给出,由 C++ 语法规则定义。 CUDA 的长期版本使用 C 语法规则,这意味着最新的 CUDA 源代码可能会也可能不会按要求工作。
  • CUDA 与 OpenGL 等转让语言具有单方面的互操作性(计算机系统或软件交换和利用信息的能力)。 OpenGL 可以访问 CUDA 注册内存,但 CUDA 不能访问 OpenGL 内存。
  • CUDA 的后续版本不为旧版本提供模拟器或回退支持。
  • CUDA 仅支持 NVIDIA 硬件。