Cuda 中大大厦及;扭曲

Cuda 中大大厦及;扭曲,cuda,Cuda,好的,我知道相关的问题已经被问了一遍又一遍,我读了几乎所有我发现的关于这个的东西,但是事情仍然不清楚。也可能是因为我发现和阅读的东西相互矛盾(可能是因为,他们来自不同的时代,他们指的是具有不同计算能力的设备,两者之间似乎有很大的差距)。我希望提高效率,减少执行时间,因此我需要确切地知道一次可以并行运行多少线程/扭曲/块。此外,我还考虑将其推广,仅根据我知道必须执行的操作数(对于更简单的程序)和系统规格,计算传递到内核的线程和块的最佳数量 我有一个GTX 550Ti,顺便说一句,计算能力为2.1。

好的,我知道相关的问题已经被问了一遍又一遍,我读了几乎所有我发现的关于这个的东西,但是事情仍然不清楚。也可能是因为我发现和阅读的东西相互矛盾(可能是因为,他们来自不同的时代,他们指的是具有不同计算能力的设备,两者之间似乎有很大的差距)。我希望提高效率,减少执行时间,因此我需要确切地知道一次可以并行运行多少线程/扭曲/块。此外,我还考虑将其推广,仅根据我知道必须执行的操作数(对于更简单的程序)和系统规格,计算传递到内核的线程和块的最佳数量

我有一个GTX 550Ti,顺便说一句,计算能力为2.1。 4个SMs x 48个内核=192个CUDA内核

好吧,我不清楚的是:

多处理器(SM)上是否可以同时(并行)运行多个块?我读到最多可以为一个SM分配8个块,但不知道它们是如何运行的。从每个SM的最大线程数(1536)几乎不超过每个块的最大线程数(1024)这一事实来看,我认为块不是并行运行的(可能是1.5?)。或者至少如果我有一个最大数量的线程在他们。另外,如果我将块数设置为4(我的短信数),它们会分别发送到不同的短信吗? 或者我真的无法控制所有这些是如何在硬件上分布的,然后这是一个没有意义的点,我的执行时间将根据我的设备的突发奇想而变化

其次,我知道一个块会将它的线程分成32个并行运行的线程组,称为warps。现在这些扭曲(假定它们彼此没有关系)也可以并行运行了?因为在费米体系结构中,它表示两个扭曲同时执行,从每个扭曲向一组16(?)核发送一条指令,而在其他地方,我读到每个核处理一个扭曲,这可以解释1536个最大线程(32*48),但似乎有点过分。1个CUDA核心能否同时处理32个线程

简单地说,我要问的是:(例如)如果我想在第三个向量中求和2个向量,我应该给它们多少长度(操作的nr)以及如何将它们划分为块和线程,以便我的设备在满容量(没有空闲内核或SMs)下并发(并行)工作


如果之前有人问我这个问题,我很抱歉,但我没有得到它或没有看到它。希望你能帮助我。谢谢大家!

对我来说,花了一个小时才理解的一个概念是CUDA芯片上上下文切换硬件支持的效率

因此,每次内存访问时都会发生上下文切换,允许在其他上下文等待内存访问时交替进行许多上下文的计算。GPGPU体系结构实现性能的方法之一是,除了在多核上并行化之外,还可以通过这种方式并行化

当没有任何内核在等待内存访问时,就可以实现最佳性能,并且只有足够的上下文来确保这一点

我希望提高效率,减少执行时间,因此我需要确切地知道一次可以并行运行多少线程/扭曲/块


简而言之,可以同时运行的线程/扭曲/块的数量取决于几个因素。《CUDA C最佳实践指南》中有一篇文章解释了这些因素,并提供了一些关于如何构建应用程序的推理技巧。

工作的分布和并行执行由启动配置和设备决定。启动配置说明网格维度、块维度、每个线程的寄存器和每个块的共享内存。根据此信息和设备,您可以确定可在设备上同时执行的块和扭曲的数量。在开发内核时,您通常会查看SM上可以活动的扭曲与设备每个SM的最大扭曲数之比。这就是所谓的理论占有率。可用于调查不同的发射配置

启动网格时,计算工作分发服务器将栅格化网格,并将线程块分发给SMs,SM资源将分配给线程块。如果SM有足够的资源,则可以在SM上同时执行多个线程块

为了启动扭曲,SM将扭曲分配给扭曲计划程序,并为扭曲分配寄存器。此时,该扭曲被视为活动扭曲

每个扭曲调度器管理一组扭曲(费米24个,开普勒16个)。未暂停的扭曲称为合格扭曲。在每个周期中,warp计划程序都会选择一个合格的warp并向执行单元(如int/fp单元、双精度浮点单元、特殊功能单元、分支解析单元和加载存储单元)发出用于warp的指令。执行单元是流水线的,允许许多扭曲在每个周期中有1条或多条指令。翘曲可以在指令获取、数据依赖、执行依赖、障碍等方面暂停

每个内核都有不同的最佳启动配置。NVIEW Visual Studio版本和英伟达可视化剖析器等工具可以帮助您调整启动配置。我建议您尝试以灵活的方式编写代码,以便可以尝试多种启动配置。我会首先使用一个配置,让您至少有50%的入住率,然后尝试增加和减少入住率

每个问题的答案

问:多处理器(SM)上是否可以同时(并行)运行多个块

是的,最大数量取决于设备的计算能力。以确定值。通常,启动配置会限制运行时间