2010年8月24日 星期二

最近CUDA程式上的進展

最新主要是改寫別人的CUDA程式。Open Source前幾版真是Bug百出,想找要好改的還要各方比較。

改寫除了解Bug外,也有一些問題要解決。

1.資源調度

  最常拿到的是CUDA硬體1.3版的程式,剛好Bee又想用筆電跑,就要改成硬體1.1版。

  這種狀況就要會做資源調度的程式改寫了。


2.改C++程式

  Bee是C的使用者,C++不熟。不過遇到的算是原本CPU程式轉成CUDA之後造成的問題。

  今天抓一個CUDA記憶體取用爆炸問題。追出來問題是長這樣:

  原先使用物件只有建構函式,改寫為CUDA時,要在建構函式中取用CUDA記憶體,將資料轉到CUDA去。

  後面也有其他函式使用CUDA上的資料運算。

  處理單張照片時沒事,放到Webcam執行時,就產生記憶體不足。Bee也感到奇怪,1G的記憶體不夠用。

  拿GPU-Z來看,真的用了1G。主要是每次處理照片,就會多出一些記憶體,是累積到爆的。

  看程式還看不出問題,後來才發現,原來是建構時取用的CUDA記憶體沒釋放。

  因為C++在物件使用完畢後,會自己釋放掉記憶體,所以很多人不寫解構函式。

  可是改寫CUDA時,一樣在建構時取用CUDA的記憶體,自動解構時只會釋放CPU側。

  而且相關的指標會釋放,在CUDA取用內的記憶體就變成沒人管的記憶體。

  Bee加入解構,其內釋放CUDA記憶體,就這樣解決了。

  CUDA還是用C的記憶體操作,不會自動回收。直接使用C++程式移植來的,這點還是要注意。


沒有留言:

張貼留言