Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 有什么更好——有更多的块或线程?_Cuda_Nvidia - Fatal编程技术网

Cuda 有什么更好——有更多的块或线程?

Cuda 有什么更好——有更多的块或线程?,cuda,nvidia,Cuda,Nvidia,更好=更快 我一般要求,但是考虑一个案例,当我有更多的“工作者”而不是数据——它是否比每个块的最后一个线程更好的使用,或者更好地让每个网格的最后一个块不被使用? < P>你应该记住这8个块在SM(流多处理器)上运行的事实。您可以将它们视为CPU核心。每个块当前可以运行多达1024个线程,这些线程与逻辑内核相当,例如当前intel i系列的内核,无论您是否使用所有这些线程,其余的线程都将被浪费,因为您没有使用这些线程,其他人也无法使用。因此,例如,如果您的GPU上有8条SMs,您可以分配64个块,

更好=更快


我一般要求,但是考虑一个案例,当我有更多的“工作者”而不是数据——它是否比每个块的最后一个线程更好的使用,或者更好地让每个网格的最后一个块不被使用?

< P>你应该记住这8个块在SM(流多处理器)上运行的事实。您可以将它们视为CPU核心。每个块当前可以运行多达1024个线程,这些线程与逻辑内核相当,例如当前intel i系列的内核,无论您是否使用所有这些线程,其余的线程都将被浪费,因为您没有使用这些线程,其他人也无法使用。因此,例如,如果您的GPU上有8条SMs,您可以分配64个块,但不能为每个块分配1024个线程,因为每个SM的线程总数有一个限制,例如2048。(根据集线器提供的信息编辑这些线程)

您应该记住,每个8个块都在SM上运行(流式多处理器)。您可以将它们视为CPU核心。每个块当前最多可以运行1024个线程,与逻辑核心相当,例如当前intel i系列的核心,无论您是否使用所有这些线程,其余线程都将被浪费,因为您没有使用它们,其他人也无法使用。例如,如果您有8个SMs在您的GPU上,您可以分配64个块,但不能为每个块分配1024个线程,因为每个SM的线程总数有一个限制,例如2048。(根据hubs提供的信息编辑这些)

你无法给出最佳内核启动配置的一般答案。这一切都取决于寄存器、共享内存等的使用。你可以用它来了解内核配置如何使用gpu的容量。好的,我理解你的观点,但我也会理解其中的含义,最终理解需要调整的内容。因此,对于beginner和我一样,假设我有输入数组,当每个元素乘以2时,我必须生成输出数组。你不能给出最佳内核启动配置的一般答案。这取决于寄存器、共享内存等的使用。你可以用它来查看内核配置如何使用gpu的容量。好的,我明白了你的观点,但我也会理解其中所涉及的内容,最终,理解需要调整的内容。对于我这样的初学者,假设我有输入数组,当每个元素乘以2时,我必须生成输出数组。如果不受寄存器和共享内存使用的限制,每个SM最多可以并行运行8个块。你可以uld浪费了大量的gpu计算能力,如果你可以用512个线程运行8个块,但你只想运行一个块。是的,我明白你的意思,假设1024个线程和4个块与8个块和512个线程在一个SM上运行,那么哪一个更快?还是它们相同?谢谢(+1),但我想完全理解它。这是否意味着,如果我完全支持原始能力,而其他什么都不重要——我应该做这个把戏,并通过所有可能的块/线程的计算,但以这种方式,我在
k mod 8=0
block中只使用
0
thread?而让其余的空闲?如果我理解正确,我可以实现e每个SM和所有SMs将涉及的最大工作量。不是0个线程,至少一个线程,根据CUDA的示例,使用线程具有使用共享内存的优势,可能还有一些其他功能,比如它们之间的同步能力,但从技术上讲,是的,线程和块的乘法在单个SM.Edi上很重要t:也没有空闲的线程,为了充分利用它,你可以在一个SM上运行的线程总数是2048,所以你可以有2个块和1024个线程,或者你可以有4个块和512个线程,依此类推。好的,我总结一下(我希望这是正确的),我应该在SM之间分配作业,而不是线程本身,因为最终可能会有一个SM运行所有线程。如果不受寄存器和共享内存使用的限制,每个SM最多可以并行运行8个块。如果可以使用512个线程运行8个块,则会浪费大量gpu计算能力,但您只想运行一个块。是的,我明白您的意思,将1024个线程和4个块与8个线程和512个线程(假设它们在单个SM上运行)进行比较,哪一个更快?还是相同?谢谢(+1),但我想完全理解它。这是否意味着,如果我完全支持原始能力,而其他什么都不重要——我应该做这个把戏,并通过所有可能的块/线程的计算,但以这种方式,我在
k mod 8=0
block中只使用
0
thread?而让其余的空闲?如果我理解正确,我可以实现e每个SM和所有SMs将涉及的最大工作量。不是0个线程,至少一个线程,根据CUDA的示例,使用线程具有使用共享内存的优势,可能还有一些其他功能,比如它们之间的同步能力,但从技术上讲,是的,线程和块的乘法在单个SM.Edi上很重要t:也没有空闲的线程,为了充分利用它,你可以在一个SM上运行的线程总数是2048,所以你可以有2个块和1024个线程,或者你可以有4个块和512个线程,依此类推。好的,我总结一下(我希望这是正确的),我应该在SM之间分配作业,而不是线程本身,因为最终可能会有一个SM运行所有线程。