GPU并行计算- 基础知识

  1. 逻辑与物理层次的区别:

    • 逻辑层次:
      • 当我们设计CUDA程序时,我们首先需要定义线程的组织结构,包括线程块(blocks)和线程网格(grids)。
      • 这种组织方式给予我们逻辑上的控制权,方便我们根据算法的需求进行设计。
    • 物理层次:
      • 尽管我们可以逻辑上定义数以万计的线程,但这并不意味着它们都会在同一时间物理上并行执行。
      • 实际的并行执行数量由GPU的硬件资源决定,尤其是流式多处理器(SM)的数量及其配置。
  2. 流式多处理器(SM)及其重要性:

    • SM是GPU内部的核心组件,负责执行我们的CUDA代码。
    • 每个SM都包含以下资源:
      • CUDA核心: 执行算术和逻辑操作。
      • 共享内存: 快速访问的内存区域,可被同一SM内的线程共享。
      • 寄存器: 用于存储线程的局部变量。
    • 当一个CUDA内核(函数)被调用时,其线程块会被分配到SM上执行。一个SM可以同时容纳多个线程块,但每个线程块只能在一个SM上运行。
  3. SIMT架构与线程束(Warp)的关系:

    • SIMT架构:
      • SIMT代表“单指令多线程”,意味着多个线程可以并行执行,但在每个特定的时刻,它们都在执行相同的指令。
    • 线程束(Warp):
      • 一个线程束通常由32个线程组成,这些线程会并行执行相同的指令序列。
      • 尽管所有线程都从同一个指令地址开始执行,但由于分支或条件语句,它们可能走不同的执行路径。这种行为称为线程分叉,可能导致效率降低。
  4. 资源限制与并发:

    • GPU资源,如共享内存、寄存器和CUDA核心,都是有限的。
    • SM上能够并发执行的线程块和线程束数量取决于这些资源的可用性和分配。
    • 如果一个线程块需要更多的共享内存或寄存器,那么SM可能会同时执行较少的线程块。
  5. 性能与配置的重要性:

    • CUDA程序的性能很大程度上取决于grid和block的配置。
    • 为了获得最佳性能,我们需要根据算法的需求和GPU的硬件特性来调整这些配置。
    • 通常建议线程块的大小为32的倍数,这是为了确保最大化线程束的利用,从而提高效率。

你可能感兴趣的:(GPU)