CUDA内核寄存器大小

CUDA内核寄存器大小,cuda,Cuda,在计算能力为1.3 GPU的cuda卡上, 我们运行以下代码 for(int i=1;i<20;++i) kernelrun<<<30,320>>>(...); for(int i=1;iNVIDIA自2007年以来一直在提供一个你可以自己回答这个问题的工具。你应该试试 但为了回答您的问题,compute 1.3设备中的每个SM每个SM有16384个寄存器,因此如果内核受寄存器限制,则每个块的线程数大约为352(16384/45四舍五入到最接近的32

在计算能力为1.3 GPU的cuda卡上, 我们运行以下代码

for(int i=1;i<20;++i)

kernelrun<<<30,320>>>(...);

for(int i=1;iNVIDIA自2007年以来一直在提供一个你可以自己回答这个问题的工具。你应该试试


但为了回答您的问题,compute 1.3设备中的每个SM每个SM有16384个寄存器,因此如果内核受寄存器限制,则每个块的线程数大约为352(16384/45四舍五入到最接近的32)还有一个登记页分配粒度要考虑。

只需指出:您有30个SM,每个SM都有8个SP。这意味着您只能同时运行240个线程。REST将被排队。Period@talonmies:为什么上面的说法完全错误?@Programmer:CUDA的工作原理类似于SIMD架构,向量大小等于扭曲大小,即32。compute 1.x设备每个SM一次发出一个warp,该架构是流水线的(大约21条指令)。因此,在任何给定时间,GT200在ALU上的每个SM可能有32个线程,以每四个时钟的最大速率退休,再加上更多的数据预取,再加上在寄存器文件上的更多。使用占用计算,在某个执行阶段,每个SMi的线程总数可能高达128个扭曲,并且发现每个块有320个线程占用率较高。但当我以循环方式执行内核时,它是在1.3计算能力上并行运行还是必须使用OMP或streams?请帮助我您的硬件一次只能运行一个内核,您无法改变这一点。如果启动10个内核,驱动程序会将它们排队,并从f开始按顺序运行第一个到最后一个。@Taulomies如果我将数据拆分为多个GPU,并按你说的顺序使用它们,会有任何性能差异吗?@Krakesh,这取决于你的内核以及需要多少内存传输来保持所有GPU上的数据一致。如果你的内核没有数据依赖性,你可以对你的pro执行分而治之的操作问题从理论上讲,您可以通过使用的GPU数量实现线性性能增益。@kronos如果我们使用费米体系结构,如何在两种情况下最好地实现内核循环:[1]一个GPU[2]多个GPU