【发布时间】:2023-03-07 16:10:01
【问题描述】:
可以动态确定每个块的最大线程数吗?即向 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);
此代码适用于我的数组。
【问题讨论】:
标签: cuda