【发布时间】:2013-05-27 13:28:32
【问题描述】:
假设我有 N 个任务,每个任务都可以由 GPU 上的单个线程执行。还假设 N = GPU 上的线程数。
问题 1: 以下是启动 最大 大小的一维内核的合适方法吗? GPU 上存在的所有 N 个线程都会执行这项工作吗?
cudaDeviceProp theProps;
dim3 mygrid(theProps.maxGridSize[0], 1, 1);
dim3 myblocks(theProps.maxThreadsDim[0], 1, 1);
mykernel<<<mygrid, myblocks>>>(...);
问题 2:
cudaDeviceProp::maxThreadsPerBlock 相对于 cudaDeviceProp::maxThreadsDim[0] 的属性是什么?它们有何不同? cudaDeviceProp::maxThreadsPerBlock可以代替上面的cudaDeviceProp::maxThreadsDim[0]吗?
问题 3: 假设我想在块中的线程之间平均分配块的共享内存,并且我想要每个线程可用的最大共享内存量。那么我应该最大化块的数量,并最小化每个块的线程数,对吗?
问题 4:
只是为了确认(在查看了关于 SO 的相关问题之后),在上面的线性(1D)网格/块方案中,全局唯一线程索引是unsigned int tid = blockIdx.x * blockDim.x + threadIdx.x。对吧?
【问题讨论】: