Artificial Intelligence Programming Lab(AIPLab) 討論區

Please login or register.

請輸入帳號, 密碼以及預計登入時間

新聞:

[開學]106學年第1學期的課程看版開張了 歡迎同學問問題-20170917

作者 主題: [期末報告]-escape analysis 95441154  (閱讀 27646 次)

keet

  • Newbie
  • *
  • 文章: 4
    • 檢視個人資料
[期末報告]-escape analysis 95441154
« 於: 十二月 29, 2008, 09:21:14 pm »
資工3C      學號:95441154      姓名:賴宇晨
逃逸分析(escape analysis)
          逃逸分析是一種可以有效減少Java 程式中同步負載和記憶體堆分配壓力的跨函數全域資料流程分析演算法。此前絕大多數逃逸分析的實現都基於一個所謂“封閉世界(closed world)”的前提:所有可能被執行的方法在做逃逸分析前都已經得知,並且,程式的實際運行不會改變它們之間的調用關係.但當真實的Java 程式運行時,這樣的假設並不成立。Java 程式擁有的許多特性,例如動態類載入、調用本地函數以及反射程式調用等等,都將打破所謂“封閉世界”的約定.這樣的真實運行環境被稱為“開放世界”。
             在開放世界中,實現逃逸分析將面臨許多重要的問題,例如,能否正確、全面地捕捉動態載入的類和方法,並分析它們與原有程式的關係;逃逸分析演算法的複雜性是否能夠得以控制,以保證即時編譯器的重新分析時間不會過長,等等.提出一個新的逃逸分析架構,它可以有效地處理上述開放世界所面臨的問題。該分析架構將增量分析Java 程式,動態捕獲新載入和調用的類及方法,同時,在複雜性和精度之間進行權衡,正確、有效地降低程式的運行負載.該分析架構已經在Intel 的開放式Java 虛擬機器系統ORP中實現,經過實際測試,可以有效地消除一些主要基準測試程式,SPECjbb2000 和SPECjvm98 的db 中70%~94%的同步操作,大幅度地提高15%~31%的程式的運行速度。
            Java 提供了語言級的併發程式設計手段,例如同步的方法和區塊(synchronized method and block)[1],程式設計者可以方便地使用這些手段對執行序和共用資料進行有效控制.在現代多處理器系統中,如對稱多處理器SMP 架構上,此類同步運算的最終實現通常依靠上鎖和解鎖指令集來完成.以X86 Xeon 體系結構為例,對某一記憶體區域的上鎖操作即便不會造成多個執行緒對同一信號量的爭奪,也會導致相關的緩存區域被刷新;兩者都會造成程式運行時較大的開銷.逃逸分析是針對這一問題而提出的一種跨函數(inter-procedure)全域資料流程分析演算法。它通過分析每個物件及其域可能被訪問的範圍,判斷出:1) 一個物件是否僅被創建它的執行緒訪問,從而可以合法地忽略作用在這個物件之上的同步操作;2) 一個物件是否僅被創建它的方法以及被該方法調用的子方法訪問,從而可以合法地將此物件分配在程式運行棧,而不是記憶體堆上。這樣可以有效地減少記憶體收集模組(garbagecollector)的負載,提高程式的運行效率。
          此前,許多與逃逸分析有關的工作以及其他類似的跨函數資料流程分析優化對被分析的Java 程式都有一個前提約束條件,那就是被分析程式需要符合“封閉世界”的要求,即所有相關的程式資訊在做逃逸分析之前都可以獲知,並且這些資訊在Java 程式運行時仍是全面和正確的。
同時,由於此前的逃逸分析都是在一個靜態編譯器中實現,不需要對Java 程式進行動態分析,因此,對演算法複雜性也不存在特殊要求。但是,真實的Java 程式在運行時,通常都會動態載入並調用一些類和方法以及本地函數,而一旦這樣的情況發生,此前關於封閉世界的假設前提便失去意義,逃逸分析結果的正確性也就無法保證,其後果將導致整個程式運行出錯。 近年來,已有一些相關的研究工作開始討論開放世界(與封閉世界相反)的問題。



參考資料:
http://www.jos.org.cn/1000-9825/19/522.pdf

加分題:
◎軟體說明
Ruby,一種為簡單快捷,為了物件導向而創的腳本語言,由日本人松本行弘(外號matz)開發,遵守 Ruby License。

Ruby 的作者於1993年2月24日開始編寫 Ruby,直至 1995 年 12 月才正式公開發佈於 fj(新聞群組)。
之所以稱為 Ruby,是因為 Perl 的發音與 6 月的誕生石 pearl(珍珠)相同,因此 Ruby 以 7 月的誕生石 ruby(紅寶石)
命名。Ruby 的作者認為 Ruby (Smalltalk + Perl) / 2,表示 Ruby 是一個語法像 Smalltalk 一樣完全物件導向、腳本執行、
又有 Perl 強大的文字處理功能的程式語言。

主要特色是簡單易懂,方便好學,一切以人為本。減少程式設計時候的不必要的瑣碎時間,令程式設計師高興,
是設計 Ruby 語言的 Matz 的一個首要的考慮;其次是良好的界面設計。他強調系統設計必須強調
人性化,而不是
一味從機器的角度設想。

人們特別是電腦工程師們,常常從機器著想。他們認為:「這樣做,機器就能運行的更快;這樣做,機器運行效
率更高;這樣做,機器就會怎樣怎樣怎樣。」實際上,我們需要從人的角度考慮問題,人們怎樣編寫程序或者怎
樣使用機器上應用程序。我們是主人,他們是僕人。

遵循上述的理念,Ruby 語言通常非常直觀,按照人認為它應該的方式運行。
◎特點
1.   完全物件導向:在Ruby語言中,任何東西都是對象,包括其他語言中的基本數據類型,比如整數
2.   變數沒有類型:Ruby的變數可以保有任何類型的數據。不需要宣告即可使用。
3.   任何東西都有值: 不管是數學或者邏輯表達式還是一個語句,都有值
4.   命名規則: Ruby的變數有一定的規則,以$開頭的一定是全局變數,以@開頭的都是實例變>數,而以@@開頭的是類變數。常數則以大寫字母開頭,方便大家不看前文,也可以了解這個變數大概的型態
5.   已經定義的類可以在運行時修改 :Ruby是動態語言,你可以在程序中修改先前定義過的類>。 也可以在某個類的實例中定義該實例特有的方法,這叫做單立方法。
6.   自動化的記憶體管理:擁有自動化的garbage collection,使人們不需要花心思在記憶體管理上
Ruby on Rails 參考書籍:

Agile Web Development with Rails 第二版,這本書是學習 Ruby on Rails 的第一本書,程度由淺入深。

所以在此推薦 Ruby For Rails,這本書講解的是 Ruby ,但是他只限定在跟 Rails 有關的 Ruby ,你在裡面可以學到所有 Rails 用的到的 Ruby 語法,並且解釋的相當清楚(好啦,有些人覺得太過繁瑣),可以很清楚的學習 Rails 用的上的 Ruby 語法。

推薦 Rails Recipes,這裡有許許多多的 Rails Tips,當你在工作時遇到一些小問題,在聖經本找不到解答時,可以考慮翻翻這本書,很多時候你會發現你所遇到的問題,其實大家都有遇到,而且在這本書可以找到很好的解法。

資料來源:
http://lightyror.thegiive.net/
http://ossacc.moe.edu.tw/
« 最後編輯時間: 一月 08, 2009, 04:35:31 pm 由 keet »
已記錄

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1752
    • 檢視個人資料
回覆: [期末報告]-escape analysis 95441154
« 回覆文章 #1 於: 一月 15, 2009, 02:32:01 pm »
OK! 15
已記錄
 

SimplePortal Classic 2.0.5