2014-06-25 27 views
0

如果我有一個2D向量的序列(或流),並且我想爲每個2D向量使用一個線程,我可以爲每個向量分配一個塊併爲每個塊分配一個線程?我必須先將它轉換爲一維數組嗎?或者唯一的線程可以通過blockIdx.x和blockIdx.y訪問向量元素?cuda中的每個塊有一個線程

什麼是內核啓動參數?

假設2D矢量(我想用它作爲塊數)

是這將是正確的那個VSIZE =數:

mykernel<<vsize,1>>() 

在每個載體中的計算是獨立的。 和我的設備計算能力是2.1

+0

你必須在GPU上做到這一點? Cuda速度很快,因爲所有「線程」都只是在「neihboring」數據區域執行相同的操作。 – Micka

+0

是的我知道,但我想平行我的向量不在矢量的元素 – Nada

+1

我沒有看到爲什麼每塊只使用一個線程的原因。如果你想要一個單獨的線程在不同的2D向量上工作,你仍然可以使用多個線程填充一個塊,並指定每個線程在不同的2D向量上工作。 – JackOLantern

回答

1

是的,你可以用CUDA每塊啓動一個線程。通常不是你如何從機器中獲得性能,因爲在一個線程運行時,它會使執行資源的約97%空閒。

如果要推出每塊一個線程,這是正確的語法:

mykernel<<<gridsize, 1>>>(...); 

其中gridsize是你打算推出每格的塊數。每塊使用一個線程通常用於向新程序員介紹CUDA,但通常不應用於面向性能的代碼。

在上述情況下,每個塊將以單個線程啓動,並且該線程將具有全部爲零的線索索引(threadIdx.x,threadIdx.ythreadIdx.z)。塊指數(blockIdx.x等)將由您的gridsize變量確定。

+0

感謝您的有用答案,實際上我對利用這些資源並不太感興趣,但是如果我可以更好地利用它們,這很好! 我可以問,如果我有實時輸入,並且不知道塊的數量,那麼正確的語法是什麼?或在這種情況下,我必須使用不同的方式,如流媒體?我很抱歉在這方面進行諮詢,但我仍然是CUDA的新手。 – Nada

+0

如果您知道內核啓動時的塊數,只需設置'gridsize'即可。 'gridsize'可以是一個運行時設置變量,在編譯時不需要知道它。 –

+0

非常感謝。 – Nada

相關問題