2012-08-06 72 views
0

我用cudaMalloc分配尺寸100的整數數組,即總我有CUDA:全球總存儲器使用

int_total_bytes=100*sizeof(int), 

和分配大小1000的雙打的陣列,即,總的I有

db_total_bytes=1000*sizeof(double),... 

我可以肯定的說總的GPU使用的全局內存將

int_total_bytes+db_total_bytes? 

的感謝!

+0

http://stackoverflow.com/q/8684770/681865,http://stackoverflow.com/q/8905949/681865 – talonmies 2012-08-06 23:51:26

回答

1

由於添加了填充以實現最佳地址對齊或最小塊大小,有幾種情況會使分配的內存實際大小大於計算的大小。

對於您給出的兩個示例,數據大小與自然對齊大小和邊界兼容,因此您可能看不到計算內存和實際內存之間的差異。不過,如果cudaMalloc使用suballocator - 如果它從OS(或設備)分配一個大塊,然後將該大塊細分爲更小的塊以填充cudaMalloc()請求,則可能仍會有一些變化。

如果涉及到suballocator,那麼操作系統將顯示實際的內存使用量遠遠大於您的計算使用量,但實際使用情況將保持穩定,即使您的應用程序進行多次小分配(可以從已分配的大塊)。

類似地,硬件通常具有通常與存儲器頁面大小相同的最小分配大小。如果可以從硬件分配的最小內存塊是64K,那麼當你要求3k時,你已經分配了61K但是沒有被使用。這是一個suballocator會很有用的地方,以確保您儘可能多地使用您分配的內存塊。

0

除了dthorpe說的內容,您可以使用nvidia-smi命令檢查進程的GPU內存使用情況。

+0

或在代碼中使用[NVML](http://developer.nvidia.com/cuda/nvidia-management-library-nvml)使用'nvmlDeviceGetMemoryInfo'函數。 – 2012-09-20 13:38:05