是否可以動態確定每個塊的最大線程數?即向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