2012-03-20 83 views
1

我需要動態地執行cudaMalloc來爲動態擴展數組分配內存,其大小可以在很大範圍內變化。這個數組表示兩個表上的聯接操作的結果,所以它可以是零大小或達到最大數據量(在表中包含完全相似的數據的情況下)。如何動態創建cudaMalloc

如果我的表的數據幾乎是類似分配內存由於期望,我能得到這不是在所有

所以使用的內存量巨大,有一些方法與CUDA進行動態內存分配使內存使用效率更高?

+0

我不明白這個問題。 cudaMalloc *是動態的,運行時內存分配。你是在問在內核中運行內存分配,還是其他的東西? – talonmies 2012-03-20 21:28:31

+0

你是否想知道cudaMalloc會自動爲你的陣列預留額外的內存空間,你是否需要擴展它? – Bart 2012-03-20 21:46:47

+0

我的意思是在運行內核之前首先以最小的大小分配數組,但在內核運行時可以擴展(額外的內存分配) – dmdkv 2012-03-20 21:49:00

回答

2

無法在內核中動態擴展以前分配的內存。費米最接近的是'新'和'刪除'。但是那些分配新的塊,他們不擴展你現有的塊。但是,我沒有看到任何嘗試在內核中擴展已分配內存的要點。只需預先分配內核可以使用的最大內存量。如果這意味着您沒有足夠的內存來完成後續的數據處理,那麼無論如何,如果您能夠動態擴展內存,程序將無法處理該情況。另外,如果您不斷擴展分配的內存以保存新結果,則需要線程之間進行大量的通信(因爲所有線程都必須知道當前找到了多少結果)。相反,不要嘗試創建沒有空白的結果集。讓連接的結果存儲在與線程索引對應的位置的整個分配區域中。然後,用第二個內核或Thrust掃描結果以將結果收集在一起。