• 沒有找到結果。

Read Image Gray-level Smooth Global Edge-detection

Find Feature Point Line Combine Master_Slave-select

Spatial Temporal Write Image

for迴圈 if 、else條件式 乘、除法運算 檔案存取 佔用記憶體空間

(Byte)

0 1 1 8 230507

480 0 691203 0 384078

76800 307200 921601 0 76898

768000 614400 4300800 0 76886

440 771200 230400 0 212

5 150 145 0 169

2 15 0 0 52

0 3 7 0 81

1 10 3 0 117

3 240 2400 2 230503

執行時間

4.2 最佳化策略

迴圈最佳化為需要花費最多時間做相同的事情的步驟,可採用幾種方式來進 行最佳化,如程式碼調整(code motion)、消除引導變數(induction variable elimination) 和減少強度(strength reduction)。

圖4.1、程式碼調整

圖4.1 為程式碼調整後的結果,由圖中可知在宣告 if、else 迴圈條件式時,可 以先宣告在迴圈外,避免系統每次執行時皆需重新判斷一次再執行,減少存取指 令的時間

圖4.2、消除引導變數

圖 4.2 為引導變數消除的修改,由圖中可看到(a)與(b)式差別在於由靜態空間 陣列宣告改為動態空間指標宣告,目的在於節省記憶體使用的浪費,而(c)式更進 一步將(b)式中的乘法運算修改為加法運算節省 CPU 運算時間。

圖4.3、減少強度

圖4.3 為減少強度的方式,由圖中可看到,當欲進行 2 倍數的乘法運算時,可 利用資料位移的方式來達成。快取最佳化為改善存取記憶體的方式或改用較快速 度的記憶體來存取。省電最佳化為使用較好的演算法,來取代比較複雜且耗電的 運算,減少記憶體存取的動作,將會降低耗電,減少存取硬碟的動作,將可以減 少一些電流的耗費,關閉其他不使用的周邊裝置方式,或是在平常時候,讓 CPU 進入睡眠或是半睡眠模式的方式,延長系統電力時間,且適當地調整所運用的指 令。程式空間最佳化為受限於有限的硬體容量,而盡量減少佔用的記憶體空間,

方法有改善程式的風格,節省指令所佔用的空間,呼叫或宣告任何變數與空間時,

記得善用釋放將空間歸還。

4.3 最佳化範例

此處以高斯平滑處理函式為例,高斯平滑處理為影像前處理中重要的一環,

如圖4.4 所示,包含三個 for 迴圈、四個 if、else 條件式及數個變數及陣列宣告,

函式流程如圖4.5。

圖4.4、高斯平滑函式程式虛擬碼

圖4.5、高斯平滑函式流程圖

將高斯平滑函式依照前述最佳化策略後可得比較表表4.2,表中分別為最佳化

策略下去修改原函式後,並執行一百次的平均結果,其中迴圈最佳化裡可看到前 後所消耗的時間差異不大,但仍對於時間改善上有所貢獻。而快取最佳化中,由 於原函式裡並無檔案讀取函式,為突顯其差異性,故在主函式中特別增加最佳化 前採Flash Disk 存取與最佳化後採 SDRAM 存取的效果。而省電最佳化裡,由於系 統平台僅對於軟體部分進行最佳化,無法針對未用到的裝置進行硬體上的修改,

如移除硬體平台其他裝置,故最佳化前後效果並不明顯。

表4.2、最佳化策略前後比較表

相關文件