2011-11-26 103 views
-1

將一部分1D分配給流很容易,我們可以將基指針指向chunk作爲內核的參數之一,但是如何在二維數組中實現同樣的事情,似乎很困難,因爲在二維數組中,塊可以是它自己的二維數組,因此如何在這種情況下管理指針?請幫助如何將二維數組的一部分分配給CUDA流?

+1

這個問題沒有多大意義。流是用於在GPU上執行同時操作(存儲器傳輸和/或內核執行)的驅動器側FIFO機制。它們與設備內存分配或尋址無關。請編輯你的問題,以澄清你問的是什麼。 – talonmies

+0

你以前是否使用過流?當我們將一部分數組分配給流「i」時,我們將基指針作爲參數傳遞給內核,這樣流將操作它的數組的一部分...這在一維數組中很容易,但是如何在二維數組中做到這一點? –

+0

什麼是(根據你的定義)「2D陣列」?它是線性內存嗎?還是它是一個指針數組? – talonmies

回答

1

首先,流與您的問題完全無關,它們與您詢問的內容無關。

如果您實際分配了一個指針設備數組,那麼您必須已經有一個包含設備行或列指針的主機數組。如果你的算法工作,以便每個內核啓動(或啓動內部的塊)處理內存在一個單一的分配(如行或列)內,那麼你可以傳遞每個行或列指針作爲參數在每次啓動。如果給定的啓動需要跨多行或多列訪問內存,唯一的解決方案是傳遞整個指針數組以及每個內核啓動時包含數組入口點的元組。

請注意,在CUDA中使用指針數組是在90%的現實應用程序中非常糟糕的主意。非平凡情況下的性能會比使用傾斜線性內存的情況差得多(對於添加到要在內核中讀取和寫入的數據的每個額外級別的指針間接,您實際上將內存訪問延遲加倍)。在內核中進行索引所需的IOP數量要少得多。使用指針數組也會使主機和設備比大多數情況下需要的複雜得多。