繁体   English   中英

GPGPU:用于1D线程索引的CUDA内核配置-线程,块,共享内存和寄存器

[英]GPGPU: CUDA kernel configuration for 1D thread indexing - threads, blocks, shared memory, and registers

假设我有N个任务,其中每个任务都可以由GPU上的单个线程执行。 还假设N = GPU上的线程数。

问题1:以下是启动最大大小的1D内核的适当方法吗? GPU上存在的所有N个线程都可以执行这项工作吗?

cudaDeviceProp  theProps;

dim3 mygrid(theProps.maxGridSize[0], 1, 1);
dim3 myblocks(theProps.maxThreadsDim[0], 1, 1);

mykernel<<<mygrid, myblocks>>>(...);

问题2:cudaDeviceProp::maxThreadsDim[0]相关的属性cudaDeviceProp::maxThreadsPerBlock是什么? 它们有何不同? 可以用cudaDeviceProp::maxThreadsPerBlock替换上面的cudaDeviceProp::maxThreadsDim[0]吗?

问题3:假设我想在一个块的线程之间平均分配一个块的共享内存,并且我想为每个线程使用最大数量的共享内存。 然后,我应该最大化块数,并最小化每个块的线程数,对吗?

问题4:仅在确认上述问题(回顾了有关SO的相关问题之后),在上述线性(1D)网格/块方案中,全局唯一线程索引是unsigned int tid = blockIdx.x * blockDim.x + threadIdx.x 对?

建议每个问题问一个问题。 遇到各种各样的问题使任何人都很难给出完整的答案。 因此,这实际上不是教程服务。 您应该利用现有的文档网络研讨会 ,当然还有许多其他资源可用。

以下是启动最大大小的一维内核的适当方法吗? GPU上存在的所有N个线程都可以执行这项工作吗?

当然,所有启动的线程(例如称为N)都可以执行工作,并且启动的网格大小最大(1D)。 但是,为什么仍然要这样做呢? 大多数cuda编程方法都不是以此作为目标。 网格的大小应适合算法。 如果1D网格大小似乎是一个限制器,则可以通过在内核中执行循环来处理每个线程处理多个数据元素的方法来解决,或者启动2D网格来绕过1D网格限制。 cc3.x设备的限制已扩展。

与cudaDeviceProp :: maxThreadsDim [0]相关的属性cudaDeviceProp :: maxThreadsPerBlock是什么? 它们有何不同? 可以用cudaDeviceProp :: maxThreadsPerBlock替换上面的cudaDeviceProp :: maxThreadsDim [0]吗?

第一个是多维块中总线程数的限制(即threads_x * threads_y * threads_z)。 第二个是对第一尺寸(x)大小的限制。 对于一维线程块,由于y和z尺寸为1,所以它们是可互换的。对于多维块,存在多维限制以通知用户线程块例如maxThreadsDim[0]*maxThreadsDim[1]*maxThreadsDim[2]不合法。

假设我想在块中的线程之间平均分配一个块的共享内存,并且我想为每个线程使用最多的共享内存。 然后,我应该最大化块数,并最小化每个块的线程数,对吗?

同样,我对这种方法有些怀疑。 但是可以,每个线程可能的共享内存字节的理论最大值将通过线程数量最少的线程块来实现。 但是,允许线程块使用所有可用的共享内存可能导致一次只能有一个线程块驻留在SM上。 这可能会对占用产生负面影响,可能会对性能产生负面影响。 有许多有用的建议用于选择线程块大小,以最大化性能。 我不能在这里总结它们。 但是我们要选择线程块大小作为扭曲大小的倍数,通常我们希望每个线程块有多个扭曲,并且在其他所有条件都相同的情况下,我们要启用最大占用率(这与可驻留在一个线程块上的线程块的数量有关) SM)。

只是为了确认(在检查了有关SO的相关问题之后),在上述线性(1D)网格/块方案中,全局唯一线程索引是未签名的int tid = blockIdx.x * blockDim.x + threadIdx.x。 对?

是的,对于一维线程块和网格结构,此行将提供全局唯一的线程ID:

unsigned int tid = blockIdx.x * blockDim.x + threadIdx.x;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM