4

我是 cuda 编程的新手,正在阅读“编程大规模并行处理器 - 动手方法”一书中的 G80 芯片,它有 128 个 SP(16 个 SM,每个 8 个 SP)。英特尔 CPU 和 G80 芯片之间有一个比较。Intel CPU 支持 2 到 4 个线程,具体取决于机器型号,每个内核。其中 G80 芯片支持每个 SM 768 个线程,该芯片总计 12000 个线程。

我的问题是G80芯片可以同时执行768个线程吗?如果不是同时,那么英特尔 CPU 支持每个内核 2 到 4 个线程是什么意思?我们总是可以在操作系统调度的 Intel CPU 上运行许多线程/进程。

4

3 回答 3

5

G80 同时为每个 SM 保留 768 个线程的上下文并交错执行。这是 CPU 和 GPU 之间的主要区别。GPU 是深度多线程处理器,通过其他线程的计算隐藏了某些线程的内存访问。执行线程的延迟要高得多,CPU 和 GPU 针对线程吞吐量而不是线程延迟进行了优化。相比之下,CPU使用乱序推测执行来减少一个线程的执行延迟。GPU 使用多种技术来减少线程调度开销。例如,GPU 将线程分组在称为波前扭曲的更粗略的可调度元素中,并在 SIMD 上执行扭曲的线程。GPU 线程是相同的,因此它们是 SIMD 模型的合适选择。在程序员眼里,

CPU内核中使用的线程通过动态调度来填充不同的执行单元。CPU 线程不一定属于同一类型。这意味着一旦一个线程忙于浮点,其他线程可能会发现 ALU 空闲。因此,这些线程的执行可以同时进行。维护每个内核的多个线程以填充不同的执行单元,从而有效地防止空闲单元。然而,动态调度在功率和能源消耗方面是昂贵的。因此,制造商在每个 CPU 内核中使用几个线程。

回答您问题的第二部分:GPU 中的线程由硬件(每个 SM 扭曲调度程序)调度,操作系统甚至驱动程序都不会影响调度。

于 2012-09-17T14:21:03.213 回答
1

据我所知,768resident threadsSM. 线程在由 32 个线程组成的 warp 中执行。所以在一个 SM 中,所有 768 个线程不会同时执行,而是一次以 32 个线程的块调度,即一次一个 warp。

于 2012-09-17T08:05:07.500 回答
1

CPU 上的类似技术称为“同时多线程”(SMT),或英特尔营销演讲中的超线程。它通常允许两个,在某些 CPU 上,四个线程由 CPU 本身在硬件中调度。

这与操作系统可能在该之上调度软件中的大量线程这一事实不同。

于 2012-09-17T16:40:29.290 回答