2009年10月28日 星期三
CUDA程式開發軟硬體環境
Bee是使用筆電為主要開發環境,主因是便於攜帶展示。
機種:ASUS M50Vm
CPU: Intel Pentium Dual CPU T3400 @2.16GHz
RAM: DDR2 667 2G*2
O.S. : Windows XP Sp3
VGA : nVidia GeForce 9600M GS, 1G RAM
CUDA Driver: cudadriver_2.2_winxp_32_185.85_notebook
開發環境:Visual Studio 2008 Professional版
函式庫:OpenCV_1.1pre1a
以下為CUDA SDK中測得之系統環境參數:
2009年10月15日 星期四
為何使用CUDA
結果在找資料時意外發現GPGPU也可以做。而GPGPU中就以CUDA最為完整。
使用CUDA在程式上並不麻煩,環境不好架是真的。不過為了可以在學校也可以展示,所以將自己的筆電換成可以執行CUDA的獨立顯卡的筆電。
沒想到換筆電並沒有解決我的問題,反而產生新的問題。
首先是Vista作業系統的問題,界面非常不習慣。而且也有許多語言無法安裝。這對程式設計師來說是不能接受的。
玩了二個多星期,剛好ASUS也出了XP的驅動程式安裝說明,我二話不說就直接換了。
再來是CUDA的驅動程式,沒想到我買的筆電原本是沒有的,這下我不是賠大了。要不是Vista搞鬼,我一直沒發現。
運氣很好的是,在我換成XP後沒二天,給筆電用的CUDA驅動程式也出了。好家在。
終於在買下筆電後一個月開始進軍CUDA。但已經離CUDA程式設計比賽報名截止已經不久了。心想還是去報名一下好了,就這樣正式用了。
比賽結果還不錯,買筆電的錢回來了快一半。
另一方面,學校教授也想用,我因為比賽的關係進度比日間部的快。
現在於CUDA上相關的程式開發我成了重要角色,這是我原先沒有想到的。
在使用CUDA上面,其實筆電是很不合適的。因為為了省電,GPU核心數目都不多。
不過我的筆電有點特別,不僅有32核心,也配有1GB的VRAM記憶體,價格上很平價。執行CUDA運作算順的。
在和其他日間部研究生的筆電比起來,我的筆電跑CUDA算是跑的很快的。只是我這款筆電也已經停產了,他們想換也沒法度了。
現在我的論文就要靠CUDA了。使用GPGPU目前對於自動控制而言是很新的。再來就看要做什麼畢業了。
2009年9月17日 星期四
LCM當機解法
最近收到LCM當機客訴。說會當機,經大陸工廠實測,機器連續運作200次會發生3次當機,但有的機器不會。
因為就是用我做的簡單多工,我自然必須去追。
問題是,當機率不高,實在不好抓。而且研發部只有一台機器,實在不容易做為代表。
我實在查不出那裡有問題,因為好像只有一個Task當,其他Task沒當掉。
所以只好在通訊解析上做了一個Buffer邊界檢查,然後請大陸工廠測。
結果很不錯,都沒當機。
這樣可以確定是通信品質有問題。
做MCU的程式,果然是一點可能發生錯誤的可能性都不行,因為實在不知電子是否有穩定。
2009年9月11日 星期五
找質數
function prime(max_value)
local value = 5;
local index = 2;
local root_index = 2;
local limit = value * value;
local p = {};
-- local count = 0;
-- initial first value start at 5
p[1]=2;
p[2]=3;
-- start find prime
while value <= max_value do
local sub_index=2;
local check_not_prime = 0;
while sub_index <= root_index do
-- count = count + 1; print(count,value,limit,index,sub_index,p[sub_index]);
if (value % p[sub_index]) == 0 then check_not_prime = 1; break; end
sub_index = sub_index + 1;
end
if check_not_prime == 0 then
index = index + 1;
p[index] = value;
end
value = value + 2;
if( value >= limit ) then
root_index = root_index + 1;
limit = p[root_index+1] * p[root_index+1];
end
end
-- print all prime
for i,j in pairs(p) do
print(i,j);
end
end
-- test
prime(100);
-- 程式結束
結果使用矩陣p{}儲存,所以要知道目前已有多少數目以index記錄。
已知只要找到現在驗證值value的開根以下的質數做驗證,所以加入root_index告知。
而現值超過上次有效質數平方limit,則要再更新。
2009年8月18日 星期二
指標的藝術,讀後感
2009年8月17日 星期一
2009年8月10日 星期一
立體視覺計算
之前用Matlab做的,計算時間很久。當時只是驗證可行性。
實驗環境:
左眼照片:
右眼照片:
視差計算結果:
立體圖:







