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++程式移植來的,這點還是要注意。


2010年8月17日 星期二

新寵物:蚯蚓

家中的寵物有二隻貓、二隻鳥以及一隻兔子。
最近Bee則買了蚯蚓來養。
一定會有人問,已有這麼多動物,為何要養蚯蚓?
因為Bee的如意算盤是:利用兔子糞養蚯蚓,產生有機土。若是蚯蚓過剩,則變成鳥的點心。
而貓糞則可能含有可傳染人的病源,所以不予利用。

結果進行了一個月,終於進行到投餵兔子糞的階段了。為何搞了一個月,就看以下報告了。
當初要養蚯蚓,也有想要將廚餘轉成堆肥。所以養殖箱和蚯蚓一到,馬上將家中廚餘全倒進養殖箱中裝滿。
這是錯的!後面災難就來了。
晚上蚯蚓大逃亡,結果白天就要揀蚯蚓。這才發現蚯蚓不喜臭味。
解決方法是加入新土,看看是不是增加活動空間可以解。
這招有點用,但箱子八分以上滿。不太能再放東西了。
接下來,另一個災難出現了,長了一堆蛆。
Bee不想養蠅蛆,因為它不會產生土壤。而且搶食能力大於蚯蚓,養料都被蛆吃掉了。
然後每天晚上帶著手電筒及筷子去夾蛆丟棄。

一個月後,找到了飼養箱製造商,買了新箱子,決定分箱養,順便除掉蛆。
滿箱的土,Bee弄了一下午沒弄完,最後變成三箱。
一箱是使用培養土做為基土,一箱是黏土加培養土,原始的箱子還有剩,就成了第三箱。

剛換土又是一次大逃亡,後來就穩定不逃了。
現在則是每天加料再蓋上新培養土,果然不再長蛆,但在分箱時仍有少量蛆。等長大點再除掉。
新箱中基土少多了,所以開始實驗投入不同種類及重量的食物。
果然開始照Bee的預期可以使用兔子糞了。