[英]CUDA - How to return results of unknown size
我正在將一個大型2D陣列(在C中)傳遞給設備並確定所有可能的組合。 例如:
A =
id val1 val2
1 100 200
2 400 800
Combination =
id1 id2 sumval1 sumval2
1 2 500 1000
由於原始陣列的大小,存儲和返回所有可能的組合是不可能的。 我想返回sumval1> 500和sumval2> 1000的所有組合。
如何將這個組合子集返回給要寫入文件的主機; 鑒於我不知道有多少組合滿足條件?
一些可能的方法:
malloc
在設備上根據需要動態分配空間。 在組合創建完成時,將所有單個組合收集到使用malloc
創建的單個緩沖區中。 然后將此緩沖區的總大小和指向此緩沖區的指針傳遞回主機。 然后主機分配一個大小使用的一個新的緩沖區cudaMalloc
,並啟動一個內核將數據從創建的緩沖區拷貝malloc
與創建緩沖區cudaMalloc
。 完成此復制內核后,主機可以從使用cudaMalloc
創建的緩沖區將數據傳輸回主機。 我建議1可能是最好的方法而不知道你想要做什么。 在內核中, malloc
在分配大量小分配時並不是特別快。 此外,在使用內核malloc
,請注意可以增加的默認大小限制(8MB)。
您可以分頁結果:
創建一個修復結果數組(假設是Z項)。
不僅返回結果,還返回您停止的點(last_id1,last_id2)。
在下一個調用中,根據您的上一個結果傳遞一個新的起點(start_id1,start_id2)。
您可以使用流來保持GPU加載。
基於此,您甚至可以使用多個GPU分配計算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.