[英]one thread per block in cuda
如果我有一個2D向量序列(或流),並且想為每個2D向量使用一個線程,我可以為每個向量分配一個塊,為每個塊分配一個線程嗎? 我必須先將其轉換為一維數組嗎? 還是唯一的線程可以通過blockIdx.x和blockIdx.y訪問向量元素?
內核啟動參數是什么?
假設vsize = 2D向量的數量(我想將其用作塊數)
這是正確的嗎:
mykernel<<vsize,1>>()
每個向量的計算都是獨立的。 我的設備計算能力是2.1
是的,您可以使用CUDA在每個塊中啟動一個線程。 通常,這不是您如何從計算機中獲得性能的方法,因為當一個線程正在運行時,它將使約97%的執行資源閑置。
如果要為每個塊啟動一個線程,這是正確的語法:
mykernel<<<gridsize, 1>>>(...);
其中gridsize
是您要啟動的每個網格的塊數。 每塊使用一個線程通常被用來向新程序員介紹CUDA,但通常不應用於面向性能的代碼。
在上述情況下,每個塊都將使用單個線程啟動,並且該線程將具有全為零的線程索引( threadIdx.x
, threadIdx.y
和threadIdx.z
)。 塊索引( blockIdx.x
等)將由您的gridsize
變量確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.