2014-11-08 59 views
-1

當我使用cudaMalloc(100)時,它保留了100多個B(根據一些用戶在這裏,這是由於粒度問題和家務管理信息造成的)有沒有辦法知道cudaMalloc要保留多少空間?

是否有可能確定這個空間有多大將基於字節I需要保留

謝謝你這麼多

編輯:?我會解釋爲什麼我需要知道

我想申請在GPU上的巨大圖像卷積算法來做到這一點。 ,因爲GPU上沒有足夠的內存來保存它,所以我需要分割b中的圖像行的多次調用內核幾次。

事實上,我需要發送2個圖像,OnlyRead矩陣和Results矩陣。

我想根據可用內存的大小先驗地計算出可以發送到設備的最大行數。

第一個cudaMalloc成功執行,但是在嘗試執行第二個CudaMalloc時出現問題,因爲第一個預留佔用了比預期更多的Bytes。

我在做什麼,現在正在考慮的可用內存數量比它是什麼少10%......但是這僅僅是從哪兒來一個神奇的數字..

+5

[This](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#device-memory-accesses)可能是有益的:「任何駐留在全球的變量的地址內存或由驅動程序或運行時API的內存分配例程之一返回的內存總是至少與256字節對齊。「因此,我希望任何分配請求至少「用盡」到下一個更高的256個字節的倍數。話雖如此,AFAIK對你的問題的答案沒有明確說明,所以試圖發現它是什麼,然後依賴它可能是有風險的。 – 2014-11-08 17:53:24

+1

@RobertCrovella我知道爲什麼「甚至是256個字節的倍數」?爲什麼不至少使用256的下一個倍數? – Farzad 2014-11-08 18:01:38

+0

此[此帖子](http://stackoverflow.com/questions/14082964/cuda-alignment-256bytes-seriously)是相關的。 – Farzad 2014-11-08 18:01:59

回答

1

「有沒有辦法知道cudaMalloc將要保留多少空間?「

不違反CUDA的平臺保證,沒有。 cudaMalloc()返回一個指向所請求的內存量的指針。您不能對所請求的數量結束後發生的有效內存數量做出任何假設 - CUDA分配器已經使用子分配器,並且與基於CPU的內存分配器不同,用於跟蹤空閒列表的數據結構等不與分配的內存交錯。因此,舉例來說,假設CUDA運行時對返回指針對齊的保證意味着除返回指針之外的任何內容都將具有一定對齊,這是不明智的。

如果您研究CUDA運行時的行爲,這將揭示該特定CUDA運行時的行爲,但行爲可能會隨未來版本而改變並破壞您的代碼。

相關問題