我想分析一些我在網上找到的代碼,並且不斷思考自己到了一個角落。我正在看一個直方圖內核推出與以下參數瞭解此CUDA內核啓動參數
histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...);
我知道參數是網格,塊,共享內存大小。
那麼這是否意味着每個線程有numBins
個線程的2500個塊,每個塊還有一個numBins * sizeof(unsigned int)
塊的共享內存可用於其線程?
另外,在內核本身內部有__syncthreads()
的調用,那麼在內核調用的過程中,有沒有2500組調用__syncthreads()
?
第一個問題:是的。第二個問題:這些2500塊內的線程獨立於其他塊中的線程,將進入'__syncthreads()'點,直到塊中的所有線程完成對共享內存的更新直到該點到達,並且然後繼續執行更多指令。塊內的所有線程都必須看到'__syncthreads()',所以你可以說有'2500個'numBins'對'__syncthreads()'*的調用,但它與通常的函數調用不同。這是塊內線程同步的屏障程序。 – Farzad 2014-11-06 06:31:03