首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于每个SM执行的CUDA线程数的说明

关于每个SM执行的CUDA线程数的说明
EN

Stack Overflow用户
提问于 2012-09-17 15:52:34
回答 3查看 564关注 0票数 4

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-17 22:21:03

G80同时为每个SM的768个线程保留上下文,并交错执行它们。这是CPU和GPU之间的关键区别。GPU是一种深度多线程处理器,它通过其他线程的计算来隐藏某些线程的内存访问。执行线程的延迟比CPU和GPU针对线程吞吐量而不是线程延迟优化的延迟要高得多。相比之下,CPU使用无序的推测性执行来减少一个线程的执行延迟。GPU使用几种技术来减少线程调度开销。例如,GPU将线程分组在称为warp of wavefront的粗糙可调度元素中,并在SIMD上执行warp的线程。GPU线程是完全相同的,这使得它们适合SIMD模型。在程序员看来,线程是以MIMD方式执行的,它们被分组在线程块中,以减少通信开销。

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

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

票数 5
EN

Stack Overflow用户

发布于 2012-09-17 16:05:08

据我所知,768是SMresident threads的最大数量。并且线程在由32个线程组成的warps中执行。因此,在SM中,不会同时执行所有768个线程,但它们将在每次32个线程的块中进行调度,即一次一个偏差。

票数 1
EN

Stack Overflow用户

发布于 2012-09-18 00:40:29

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

这与操作系统可以在软件中调度更多数量的线程的事实不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12455119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档