CUDA核心可以完全并行运行吗?还是需要上下文切换



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

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

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

CUDA INT32 Core是否可以完全并行地处理两个不同的整数指令,而无需上下文切换?

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

特定GPU是否可以并行执行两个INT32 warp,这取决于目标架构,而不是CUDA本身。在现代Nvidia GPU上,每个SM可以拆分为多个分区,每个分区可以独立于其他分区在块上执行指令。例如,AFAIK,在Pascal GP104上,有20个SM,每个SM有4个分区,能够运行SIMD指令,一次操作1个warp(32个项目(。在实践中,在较新的体系结构上,事情可能会更加复杂。你可以在这里获得更多信息。

最新更新