提高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
# 新墨西哥大学计算机科学系、电子系、计算机工程系

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