• 沒有找到結果。

第四章 成果與分析

4.4 整體成果

51

圖 4-5 有無 Loop Recover 機制對執行時間之影響

由於 Loop Recover 機制主要是著重在針對可讀性的優化,所以對於執行速 度的影響並不是很正面。不過整體而言,Loop Recover 機制仍然可以為 Statement 數帶來平均 4%的優化。同時也會增加 0.25%的執行時間,不過相較於可讀性的 改善,這可以算是可以接受的損失。

4.4 整體成果 整體成果 整體成果 整體成果

綜合前述的轉譯優化技術,我不僅提昇了轉譯後程式碼的可讀性,對於 Statement 數以及執行速度方面也造成了不少的改善。整體而言,在啟用所有的 優化機制之後,正如同圖 4-6 以及圖 4-7 所示,平均上我能夠減少 8%的 Statement,

並且提昇 10%的執行速度。

52

圖 4-6 整體優化機制對 Statement 數之影響

圖 4-7 整體優化機制對執行時間之影響

53

4.5 Lua 後端 後端 後端與 後端 與 與 Emscripten 的比較 與 的比較 的比較 的比較

最後則是與 Emscripten 之間的比較,圖 4-8 是啟用 Loop Recovery 機制後對 Statement 數之影響。其中橫軸為 Benchmark,縱軸為 Statement 數。

圖 4-8 Lua 後端與 Emscripten 對 Statement 數之比較

由於 Emscripten 並未針對指令進行優化,而且具有完整的 System function 支援,因此 Statement 數遠較我的後端要來的多,特別是有較多運算指令的 Benchmark。

至於執行速度的部份,在實驗中,Emscripten 要比我的後端要來得快,但是 Emscripten 在轉譯時會產生一個問題,就是有許多 Benchmark 並不能正常執行。

Emscripten 轉譯出來的 JavaScript 程式碼會有錯誤,再加上執行速度會受到虛擬 機器方面很大的影響,因此無法取得兩者有效的執行速度比較資訊。

言的語法限制,有些 getelementptr 指令並不能成功的轉譯,其中最明顯的例子即 是 getelementptr 指令允許其索引值為負數,然而這在 Lua 腳本語言中,是不允許 的。因此我希望在未來,能夠處理此問題。

55

其次則是對 System function 的支援不足,由於時間有限,我尚未對 LLVM 所有能使用的 C 函式庫進行完整的轉譯,只有對目前有需要的進行處理。故在 以後會對此部分進行補完。

最後則是可讀性進一步的強化。在實作了 Loop Recovery 以及 Function Generalize 之後,程式的可讀性固然上昇不少,但是轉譯後的程式碼依然有不少 改善的空間。因此如果能夠將轉譯後的程式碼進一步優化,甚至達到接近物件導 向程式的程度,那麼對於程式的可讀性而言,無疑會有更好的改善。

IEEE Computer, March 1998.

[3] “About Lua”,http://www.lua.org/about.html [4] Wikipedia, http://en.wikipedia.org/wiki/LLVM

[5] “Writing an LLVM Backend”,http://www.lua.org/about.html

[6] Alon Zakai,"Emscripten: An LLVM-to-JavaScript Compiler", ACM, October 2011 [7] kripken/Emscripten Wiki,https://github.com/kripken/emscripten/wiki

[8] dmlap/llvm-js-backend,https://github.com/dmlap/llvm-js-backend [9] David A Roberts,LLJVM,http://da.vidr.cc/projects/lljvm/

[10] davidar/lljvm,https://github.com/davidar/lljvm

[11] LLVM API Documentation,http://llvm.org/docs/doxygen/html/index.html [12] llvm-lua,http://code.google.com/p/llvm-lua/

[13] The LLVM Target-Independent Code Generator, http://llvm.org/docs/CodeGene -rator. html #abstract-target-description

[14] ViewVC llvm-project,http://llvm.org/viewvc/llvm-project/

[15] Scala LLVM Emitter Module,http://code.google.com/p/slem/

[16] LLVM Language Reference Manual,http://llvm.org/docs/LangRef.html [17] Lua 5.2 Reference Manual,http://www.lua.org/manual/5.2/

[18] Programming in Lua,http://www.lua.org/pil/contents.html#P1 [19] lua-users.org,http://lua-users.org/

57

相關文件