完整的編譯過程,除了編譯時間(compile time)之外,另一個花費時間的編譯工作就是連結時間(linking time)。linking 的目的是將所有編譯後的目標檔 (*.obj) 組合成可執行的執行檔,因此組合的動作會隨程式的複雜度越高花費越多時間。因此是否曾思考過,那些已經被編譯過的程式以及執行檔可不需重新經過編譯與組合的程序,能有效的被重複利用。
分享函式庫 (Share Libraries)
使用 share libraries 的方法可避免重複編譯與冗長的連結時間,
2010年7月26日 星期一
[C++ 程式設計]加速編譯方法 - 分享函式庫
2010年7月8日 星期四
[C++ 程式設計]加速編譯方法 - 編譯器設定
編譯器的環境設定也是引響編譯速度的主要原因之一,而環境設定的議題可以從許多的面向討論。
最佳化設定
首先最佳化的設定,在 Visual Studio 或是 gcc 上都有相似的設定,不同的最佳化程度可能區分成 O1 、 O2 、 O3 等,而隨著最佳化的效果越好,所需要花費的編譯時間也相對越高。通成數字越大表示使用越高級的最佳化,因此在除錯或是想要快速編譯時,可以選擇較低階的最佳化設定,如 O1,或是關閉任何最佳化選項。
2010年7月7日 星期三
[C++ 程式設計]加速編譯方法 - 相依性問題
降低程式相依性
儘可能減少在 header 檔中 include 多餘的 header 檔。因為這樣會提升物件之間的相依性,當我們更動 header 檔 A.h 時,編譯器會找出所有 include "A.h" 的 header 檔,會將他們也當做更動過的檔案,所有更動過的檔案都必須重新被編譯。因此沒有妥善規劃好標頭檔的相依性,將會導致許多的程式都需要被重新編譯,這將會浪費更多的編譯時間。
2010年4月22日 星期四
2010年4月21日 星期三
2010年4月15日 星期四
ARM Mali 200 效能驗證工作 - 環境建立
這幾天接獲新任務,要驗證新的開發平台希望能取代公司舊的 2D Embedded 系統,而此 embedded 是能支援 OpenGL ES 2.0。本想 OpenGL API 還蠻熟析的,應該能很快處理完此工作,不料 embedded 的環境真的陽春很多,許多東西都要考量相依性,光是函式庫和環境的建立就花費許多的時間。
昔日的工作都過於侷限在繪圖領域,不過最近突然對各種技術都有很高的興趣。為了能順利完成此任務,在環境建立部分花了一點時間思考,也找了幾位專員討論,獨立的 linux pc 與網路連線都是一開始的想法,但身邊的資源實在太有限了,因此最後決定用 Ubuntu + VMWare ,雖然不算完美,但確實節省了很多時間。
採用 VMWare 的好處很多,包括可以讓我工作的環境部用擺放一大堆的機械,而我原本的 pc 等級也夠高,因此跑起來很流暢,在加上本機上兩個作業系統同時運作,會比透過網路遠端操控來得便利很多。
而缺點方面,最致命的缺陷應該就是硬體資源都是用軟體的方式模擬出來的,所以無法百分百發揮硬體效能,尤其這一次的工作需要較多的繪圖卡驗證工作,但 VMWare 始終只能模擬 SVGA II 的顯示晶片,我要執行的 OpenGL ES 程式是無法執行的,因為 SVGA II 只支援到 OpenGL 1.3 ,而 OpenGL ES 2.0 Emulator 的環境,再使用 ELG 一些功能時,必須要有 OpenGL 1.4 以上才可支援,因此對工作還是有一些不便利性,不過至少可以編譯 ARM 的程式,只是用 Emulator 執行時會丟出例外訊息。
另外環境上的不便利性就是仍然需要透過隨身碟傳送編液後的程式,開發端和驗證端需要不斷的傳送更新資料,因此 USB 的插拔還有繁瑣的指令,都會導致工作上的不流暢,這裡應該可以花點時間改善,應該會大大提升工作效率。
這次的工作也學習到很多西的東西,除了上述的 VMWare 系統外,也使用了 VMWare tools 這好用的工具,讓兩作業系統能直接相容複製、貼上等指令,這樣的環境讓工作方便很多。而在安裝編譯環境時,也第一次接觸到 toolchain ,而最後也比較清楚 Toolchain 指的就是一個程式開發的完整工作環境,包含了所有成是開發過程中需要使用的工具,而好的 Toolchain 可以幫你串連起整個工作流程,讓你每次在編譯或更新產品時,只要簡短的夏達幾個指令就可完成,也可透過更改些許參數就能編譯出不同版本,是將很多小程式與 makefile 具合起來的工具集。這是使用的 toolchain 是 arm-2008q3... 可在 CodeSourcery 下載。
原本 linux 的操作環境都快忘了,這次也正好可讓我在溫習一下工作環境。