繁体   English   中英

CUDA 内核可以绝对并行运行,还是需要上下文切换?

[英]Can CUDA cores run things absolutely parallel or do they need context switching?

CUDA INT32 核心可以完全并行处理两个不同的 integer 指令,而无需上下文切换吗? 我知道这在 CPU 上是不可能的,但在 NVIDIA GPU 上是不可能的? 我知道 SM 可以运行扭曲,如果核心必须等待一些信息,那么它会从调度单元获取另一个线程。

我知道这在 CPU 上是不可能的,但在 NVIDIA GPU 上是不可能的?

这种断言在现代主流 CPU 上是错误的(例如,从 Intel Skylake 或 AMD Zen 2 开始,几乎所有 x86-64 处理器至少十年以来)。 实际上,现代 x86-64 Intel/AMD 处理器通常可以并行计算 2 个(256 AVX)SIMD 向量,因为通常有 2 个 SIMD 单元。 像英特尔 Skylake 这样的处理器也有 4 个 ALU 单元,能够在每个周期并行计算 4 种基本算术运算(例如,加法、减法和异或)。 像除法这样的一些指令要昂贵得多,并且尽管流水线很好,但不能在这种架构上并行运行。 指令可以来自相同逻辑核心上的相同线程,或者可能来自调度在 2 个逻辑核心上的 2 个线程(可能有 2 个不同的进程),而无需任何上下文切换。 请注意,最近的高端 ARM 处理器也可以做到这一点(甚至一些移动处理器)。

CUDA INT32 核心可以完全并行处理两个不同的 integer 指令,而无需上下文切换吗?

NVIDIA GPU 以SIMT (单指令多线程)方式执行称为 warp 的线程组。 因此,1 条指令并行操作 32 个项目(尽管从理论上讲,硬件可以自由地不完全并行地执行此操作)。 一个 kernel 执行基本上包含许多块并且块被调度到 SM。 一个 SM 可以同时对许多块进行操作,因此有大量可用的并行性。

特定的 GPU 是否可以并行执行两个 INT32 扭曲取决于目标架构,而不是 CUDA 本身。 在现代 Nvidia GPU 上,每个 SM 可以分成多个分区,每个分区可以独立于其他分区执行块上的指令。 例如,AFAIK,在 Pascal GP104 上,有 20 个 SM,每个 SM 有 4 个分区,能够运行 SIMD 指令,同时在 1 个 warp(32 个项目)上运行。 在实践中,在较新的架构上事情可能会更复杂一些。 您可以在此处获得更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM