提高Prolog到C的編譯(No.5-1)---未完成

http://clip.dia.fi.upm.es/papers/morales03:p-to-c-ciclops.pdf

提高Prolog到C的編譯——使用類型和確定性的詳細信息:初步結果


J. Moralesy *
[email protected]

M. Carroy *
[email protected]

M. Hermenegildoy * #
[email protected]

摘要

我們描述了目前的狀況和提供的Prolog到C的編譯器初步性能測試結果。編譯器是新穎的,當它被設計爲接受不同種類高層次信息(通常通過最初的Prolog程序分析,並用標準化的確定語言表達),並使用此信息來優化生成的C代碼,然後進一步加工的現成的C編譯器。基本翻譯過程中使用基本上是關於Prolog程序相應特定字節碼,模仿展開一個C編碼的字節碼模擬器。然後優化應用此展開程序。這是促使更放逐化設計的字節碼指令和他們的較低級組件。這種方法可以重複使用的相當數量的機械字節碼模擬器:配套件的C代碼,數據定義,內存管理例程和區域等,以及混合字節碼模擬與相對簡單方式的原生編譯代碼。我們報告由當前系統的版本編譯的程序性能,附帶或不附帶分析信息。

1.引言
自從Colmerauer和Roussel[Col93]開發的原始的解釋器,已設計了許多技術以實施Prolog,其中許多旨在實現更高的速度。一在[Van94]可以找到有關此項工作重要部分的優秀調查。以下是粗略分類的Prolog(事實上,同樣適用於其他很多語言):

× 翻譯器(如C-Prolog[Per87]和其他),輕型預處理或翻譯可能在程序執行前完成,但大量的工作是運行時由翻譯完成。

× 字節碼的編譯器和他們的翻譯器(通常被稱爲仿真器)。編譯器用一個特殊用途的語言產生相對較低水平的代碼。這種低級代碼的翻譯器仍然是需要的。目前大多數模擬器是基於Warren抽象機(WAM)[War83, AK91],但存在其他建議[Tay91,KB95]。

× 一個低級語言的編譯器,通常是(本地)機器代碼。這種情況下輸出執行需要很少或根本沒有額外的支持。一種解決方案是爲編譯器直接生成機器代碼。這方面的例子是Aquarius系統[VD92],SICSus Prolog的版本[Swe99]一些體系,BIM-Prolog編譯器[Mar93]和Gnu Prolog編譯器[DC01]。另一種方法是生成一個(低級)的語言,例如,C-[JRR99]或C,其中一臺機器代碼編譯器是現成的,後者是由wamcc所採取的方法[CD95]。

每種方法都有優點和不足:

可執行性能與可執行文件的大小和編譯速度:編譯下級代碼可以實現更快的程序,消除了解釋的開銷和執行低級優化。在一般情況下,儘可能多地在編譯時工作,以避免運行時的開銷,在編譯階段使用更多資源的花費帶來的更快執行速度,並可能產生更大的可執行文件。在一般情況下,編譯器更復雜,比翻譯器需要更長的時間來預處理程序。作爲編譯過程的一部分,代碼分析的複雜形式差異越來越大。這可能會影響開發時間,雖然複雜的分析可以在開發過程中關閉,並只在產生代碼時提供。反之,翻譯器可能有更小的負載/編譯時間,當速度不是個優先事項時,由於其簡單往往是一個很好的解決方案。模擬器在複雜度和花費方面處於中間點。高度優化的模擬器 [Qui86, SCDRA00, DN00, Swe99, BCC+02] 提供了非常好的性能和減少程序的大小(因爲單字節指令對應多個機器代碼指令)這可能是一個非常大程序和符號數據集的關鍵問題。

--------------------------------------------------------------------------------

注:這項工作由西班牙MCYT項目TIC 2002-0055 CUBICO部分支持,歐盟IST項目2001-34717Amos和IST-2001-38059 ASAP,新墨西哥州大學信息科技學院主席Asturias王子的支持。歐洲社會基金的共同資助MCYT基金也支持J.Morales。

* 西班牙馬德里技術大學,Boadilla del Monte,E-28660
# 新墨西哥大學計算機科學系、電子系、計算機工程系

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章