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

其實我本來想學平行處理語言是用Erlang。在做論文相關研究時,是要用FPGA+DSP去解電腦視覺上的問題。

結果在找資料時意外發現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.07

 

這本書吸引我的是,中文很少有專門探討指標的進階書。

但就目錄上來看,我才發現原先以為沒有指標的電腦語言竟也出現在內。

因為我本來就熟C也很清楚學會了,幾乎就等同掌控其語言的控制能力。

不過另一點的是,作者"蔡明志"之前出的書也很不錯。之前出資料結構及C語言的書都寫得不錯。

書可以看到的語言有CC++C++/CLRJavaC#Visual BASIC

那一本書看完了,不就一次會六種語言的核心了,我是這樣想。而且只需安裝Visual StudioJava二套軟體就可以玩了。

 

就書內容結構來看,仍以C語言的篇幅最大。這也是合理,因為除了C++其他語言無明顯指標。

內容以每一種語言皆使用同一種資料結構的表示法來示範如何寫。

本以為進階書會提出更深入的內容,但沒有,只是示範最基本的資料結構。大幅度的將難度降低了。

其實我覺得這樣做是合理的,因為進階書本來就不好賣,太深入恐怕讀者更少,降低難度有助於推廣。

 

對於想在程式上有進階參考的工程師,我認為這仍是一本值得看的書。

而指標已經熟悉的人,看了此書也可以一次通曉六種語言,仍是值得買來參考的。

2009年8月17日 星期一

CUDA程式設計比賽

參加nVidia舉辦GPU程式設計比賽。
http://www.nvidia.com.tw/object/cuda_contest_main_tw.html

2009年8月10日 星期一

立體視覺計算

這是之前專題的照片。主要是解雙目視覺。因為現在已改成由GPGPU來做了,就將以前實驗的成果張貼一下。
之前用Matlab做的,計算時間很久。當時只是驗證可行性。

實驗環境:


左眼照片:


右眼照片:


視差計算結果:

立體圖: