2014-01-28 102 views
-1

我使用推力與cuda 5.5進行整數向量排序。 。 排序100 * 1024 * 1024 INT的應分配400MB存儲器,但NVIDIA-SMI節目總是 「存儲器使用的105MB/1023MB」(我的測試GPU是GTX260M)如何獲得最大的數組大小適合gpu內存?

排序150 * 1024 * 1024給出分配錯誤:

GPU memory usage: used = 105.273682, free = 918.038818 MB, total = 1023.312500 MB

我可以查看可用最大內存爲我整型數組GPU開始分析之前:

terminate called after throwing an instance of 'thrust::system::detail::bad_alloc' 
    what(): std::bad_alloc: out of memory 
Aborted (core dumped) 

數組分配之前,我使用cudaMemGetInfo它返回檢查內存?

編輯:

好吧,之前我的排序內存使用量大約是這個。 GPU內存使用情況:used = 545.273682,free = 478.038818 MB,total = 1023.312500 MB

對我來說排序算法需要一些額外的內存。

+0

我想你的GetInfo有問題。正如你所說的,你先分配了400MB,然後再分配另一個600MB,這對你的略小於1000MB的設備來說非常重要。 – LumpN

+0

好的,我檢查了nvidia-smi沒有顯示正確的用法。 – Arman

回答

1

推力分選操作require significant extra temporary storage

nvidia-smi在不同時間有效地對內存使用情況進行採樣,並且採樣點使用的內存量可能不會反映應用程序使用(或需要)的最大內存量。正如你發現cudaMemGetInfo可能更有用。

我一般發現推力能夠將陣列排序高達GPU的大約40%的內存。但沒有指定的號碼,您可能需要通過反覆試驗來確定。

不要忘記CUDA使用一些開銷內存,如果您的GPU託管一個顯示器,那也會消耗額外的內存。

+0

是的,這是一個麻煩。我檢查了特斯拉w/o顯示器,我從3GB中獲得2.8GB。在筆記本電腦上我總是使用150Mb,但不知何故。在特斯拉nvidia-smi顯示正確的內存使用情況,但不是在筆記本電腦上;(。 – Arman