CUDA中為什麼要有Grid的概念?

時間 2021-06-02 03:26:25

1樓:

最主要的原因是,由於硬體設計的原因,乙個block裡能容納的thread數目有限(到目前為止,CC7.5,這個數目都是1024)。對於大多數應用來說,僅僅1024個thread肯定是不夠的,所以要在block上面再加一層thread結構。

針對你的問題,「為什麼要把blocks組成Grid?」

為什麼不呢,自己管理索引不容易,而grid提供了索引grid裡block的方法。再者,NV也沒有提供API讓你自己assign block to SM。

舉個例子,乙個1024x1024的矩陣,每個block是32x32大小,那麼用乙個32x32的grid就可以很容易地把thread對映到每乙個矩陣元素上,參考下圖

2樓:朱葛

Gird是一組block。並沒有把乙個任務分成多個gird這種要求。

但是,總要有個名字來描述「一組block」這個概念吧。

所以就有了寫cuda程式常用的變數:

GirdDim,表示gird裡面有幾個block但是並沒有GirdId,因為就乙個grid啊gird可以是一維二維三維,你可以認為是為了寫索引方便吧。就像你非要用一維陣列實現二維陣列,自己算索引也是沒問題的。

C 中為什麼要有allocator類?

Wu Jarvis 我是這麼理解的 其實你只要分清vector中resize,reserve的關係就能明白了,resize時,當元素數量 capacity時不但會分配空間,而且會初始化元素 reserve只會做分配空間的事情,不會做初始化,這樣就把分配空間和初始化的事情分開來了,如果不分開的話,那麼...

簡歷中為什麼要有年齡?

三無谷主 HR當然想要看到年齡,不僅如此,他們還希望知道你的性別 婚姻狀況 有沒有孩子,甚至父母是否健全,這樣才能判斷這個人能不能996。但是作為求職者,幹嘛主動提供這些助力職場歧視是資料呢?理想情況下,不管是男是女,八十還是十八,只要能力能夠勝任職位要求,就應該錄取啊 雖然這只是理想情況 但也沒必...

為什麼Google選擇CUDA而不是OpenCL作為TensorFlow的後端?

saturnman 主要是利益問題,OPENCL如果相容各種異構裝置,要同時高效能利用裝置的效能,那麼必然是天量的裝置相關識別和優化,簡直是費力不討好,甚至裝置購買成本都沒辦法搞定。CUDA就好多了,只有英偉達自己家的產品,他們會細緻優化不斷配合不同版本硬體和驅動程式。個人嚴重不看好OPENCL,但...