如果我有一個2D向量的序列(或流),並且我想爲每個2D向量使用一個線程,我可以爲每個向量分配一個塊併爲每個塊分配一個線程?我必須先將它轉換爲一維數組嗎?或者唯一的線程可以通過blockIdx.x和blockIdx.y訪問向量元素?cuda中的每個塊有一個線程
什麼是內核啓動參數?
假設2D矢量(我想用它作爲塊數)
是這將是正確的那個VSIZE =數:
mykernel<<vsize,1>>()
在每個載體中的計算是獨立的。 和我的設備計算能力是2.1
如果我有一個2D向量的序列(或流),並且我想爲每個2D向量使用一個線程,我可以爲每個向量分配一個塊併爲每個塊分配一個線程?我必須先將它轉換爲一維數組嗎?或者唯一的線程可以通過blockIdx.x和blockIdx.y訪問向量元素?cuda中的每個塊有一個線程
什麼是內核啓動參數?
假設2D矢量(我想用它作爲塊數)
是這將是正確的那個VSIZE =數:
mykernel<<vsize,1>>()
在每個載體中的計算是獨立的。 和我的設備計算能力是2.1
是的,你可以用CUDA每塊啓動一個線程。通常不是你如何從機器中獲得性能,因爲在一個線程運行時,它會使執行資源的約97%空閒。
如果要推出每塊一個線程,這是正確的語法:
mykernel<<<gridsize, 1>>>(...);
其中gridsize
是你打算推出每格的塊數。每塊使用一個線程通常用於向新程序員介紹CUDA,但通常不應用於面向性能的代碼。
在上述情況下,每個塊將以單個線程啓動,並且該線程將具有全部爲零的線索索引(threadIdx.x
,threadIdx.y
和threadIdx.z
)。塊指數(blockIdx.x
等)將由您的gridsize
變量確定。
你必須在GPU上做到這一點? Cuda速度很快,因爲所有「線程」都只是在「neihboring」數據區域執行相同的操作。 – Micka
是的我知道,但我想平行我的向量不在矢量的元素 – Nada
我沒有看到爲什麼每塊只使用一個線程的原因。如果你想要一個單獨的線程在不同的2D向量上工作,你仍然可以使用多個線程填充一個塊,並指定每個線程在不同的2D向量上工作。 – JackOLantern