是否可以动态确定每个块的最大线程数?即向GPU请求该值并将其存储在变量中的功能。谢谢你的帮助。在CUDA中动态确定最大线程数?
谢谢,我决定线程用下面的代码的最大数量:
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>>>();
这种形式是否正确地调用内核?
Thansk为您提供帮助。
好的,我使用的Nvidia的总和减少内核号码6,和所使用的样本代码,其中确定线程和块与下一个代码:
unsigned int threadsNum = (mSize < maxThreads*2) ? nextPow2((mSize + 1)/ 2) : maxThreads;
unsigned int blocksNum = (mSize + (threadsNum * 2 - 1))/(threadsNum * 2);
该代码可以使用我的阵列。
但是,我们不能保证给定的内核将在'maxThreadsPerBlock'中返回的结果启动,我假设这个问题隐含地想知道的。 – talonmies 2013-02-21 21:55:26
是的。我自己并没有明白这一点。例如,“内核”这个词不会出现在问题的任何地方。而'cudaGetDeviceProperties' *就是*“向GPU请求价值并将其存储在变量中的函数”,正是如此。但是,当然你是正确的,假设这些参数在'maxThreadsPerBlock'和其他相关参数中定义的限制内,并且假设没有其他外部的内核抑制器,内核将会正确启动启动参数中指定的线程数发射。 – 2013-02-21 22:03:39