2011-09-19 100 views
1

我正在測試CUDA應用程序,並且遇到了奇怪的內存問題:ImageMagick的顯示GPU「內存泄漏」?

我的程序執行一些圖像操作並使用ImageMagick的顯示程序顯示它。 問題是,我每次運行該IM的顯示器時,都會獲得更多的GPU內存使用量,因此GPU計算的內存會更少。

我使用即時消息的顯示,因爲我找不到任何顯示管道輸入圖像。有什麼建議麼?

無論如何,爲什麼即時消息顯示需要這麼多的GPU內存,爲什麼它沒有被釋放?

+0

顯示圖像的大小是多少?你什麼時候關閉'display'程序? – osgx

+0

圖片相當大:它的'8bit 3872x2592。但它顯示和處理得很好。我使用'popen'來寫入'display'過程。然後我通常按ESC關閉顯示程序,然後主機程序也關閉。 – szamil

回答

0

我知道它已經很老了,但我們發現使用管道(popen())會在內存中複製程序的高級副本,還會導致複製最終程序指令或任何被調用的內容......所以當我關閉程序時與popen我還完成了所有通常在「後臺」中釋放的CUDA相關上下文,當程序結束時。所以清理CUDA內存後,我關閉popen應用程序將無法正常工作,而我這裏的事情是我的內存泄漏和一般主程序錯誤。

我希望有人會覺得它有用。

2

根據你的問題,你試圖在執行一系列GPU密集型操作之後,使用與Bash不同的shell來按順序顯示一系列文件。您好奇爲什麼在每次後續調用ImageMagick display時都會消耗更多的GPU內存,在每次操作結束後似乎都會成功關閉。

我們可能會進一步推理您至少在某些處理中使用ImageMagick的OpenCL支持。儘管我們沒有足夠的信息來確定通過display完成每次渲染時GPU的紋理緩衝區的外觀,但我推測您的GPU不能快速釋放紋理,導致內存緩慢爬升。

我不會繼續圍繞這個假設建立猜想,而是推薦一個工具來調試您的問題:gDEBugger。這應該允許您詢問您的視頻卡,以確定事情發生速度的原因。

祝您的應用程序好運。