是否可以动态确定每个块的最大线程数?即向GPU询问值并将其存储在变量中的函数。谢谢你的帮助。
谢谢,我使用以下代码确定了最大线程数:
int dev = 0;
cudaDeviceProp deviceProp;
cudaGetDeviceProperties(&deviceProp, dev);
unsigned int maxThreads = deviceProp.maxThreadsPerBlock;
并使用这个数字,我用以下几行计算内核的块和线程:
unsigned int blocksNum = 1+((mSize-1)/maxThreads); // mSize is the size of array
unsigned int threadsNum = 1+((mSize-1)/blocksNum);
dim3 dimGrid(blocksNum, 1, 1);
dim3 dimBlock(threadsNum, 1, 1);
...
kernel<<<dimGrid,dimBlock>>>();
这种形式调用内核是否正确?
谢谢你的帮助。
好的,我使用的是 Nvidia 的 6 号求和内核,并使用了示例代码,它使用下一个代码确定线程和块:
unsigned int threadsNum = (mSize < maxThreads*2) ? nextPow2((mSize + 1)/ 2) : maxThreads;
unsigned int blocksNum = (mSize + (threadsNum * 2 - 1)) / (threadsNum * 2);
此代码适用于我的数组。