假设我有 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
. 正确的?