我是cuda编程的新手,正在阅读一本G80芯片,该芯片有128个SP(16个SM,每个有8个SP)来自“Programming Massively Parallel Processors - A Hands on approach”。 Intel CPU和G80芯片之间有比较。 英特尔CPU支持2到4个线程,具体取决于每个内核的机器型号。 其中G80芯片每个SM支持768个线程,这个芯片总共支持12000个线程。
我的问题是G80芯片可以同时执行768个线程吗? 如果不同时,那么Intel CPU的含义是每个内核支持2到4个线程吗?我们总是可以在操作系统安排的Intel CPU上运行许多线程/进程。
答案 0 :(得分:4)
G80同时保留每个SM 768个线程的上下文并交错执行。这是CPU和GPU之间的关键区别。 GPU是深度多线程处理器,通过其他线程的计算隐藏某些线程的内存访问。执行线程的延迟要高得多,因为CPU和GPU针对线程吞吐量而不是线程延迟进行了优化。相比之下,CPU使用无序推测执行来减少一个线程的执行延迟。 GPU使用了几种技术来减少线程调度开销。例如,GPU在较粗糙的可调度元素中将线程分组,称为wavefront的warp,并在SIMD上执行warp的线程。 GPU线程完全相同,使其成为SIMD模型的合适选择。在程序员眼中,线程以MIMD方式执行,并且它们被分组在线程块中以减少通信开销。
CPU内核中使用的线程用于通过动态调度来填充不同的执行单元。 CPU线程不一定是同一类型。这意味着一旦线程忙于浮点,其他线程可能会发现ALU空闲。因此,可以同时执行这些线程。维护每个核心的多个线程以填充不同的执行单元,有效地防止空闲单元。然而,就功率和能量消耗而言,动态调度是昂贵的。因此,制造商每个CPU核心使用几个线程。
回答问题的第二部分:GPU中的线程由硬件调度(根据SM warp调度程序),操作系统甚至驱动程序不会影响调度。
答案 1 :(得分:1)
据我所知,768是resident threads
中SM
的最大数量。并且线程在由32个线程组成的warp中执行。因此在SM中,所有768个线程不会同时执行,但它们将一次调度为32个线程的块,即一次一个warp。
答案 2 :(得分:1)
CPU上的类似技术在英特尔的营销演讲中被称为“同时多线程”(SMT)或超线程。它通常允许两个,在某些CPU上,CPU本身可以在硬件中调度四个线程。
这与操作系统可能在该软件上安排大量线程的事实不同。