evaluacion parcial´ policontrolada y su aplicacion´ a la especializacion de...

48
UNIVERSIDAD POLIT ´ ECNICA DE MADRID FACULTAD DE INFORM ´ ATICA Evaluaci ´ on Parcial Policontrolada y su Aplicaci ´ on a la Especializaci ´ on de Programas Consciente de los Recursos (Poly-Controlled Partial Evaluation and its Application to Resource-Aware Program Specialization) Tesis Doctoral Claudio J. G. Ochoa Marzo de 2007

Upload: others

Post on 05-Apr-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

UNIVERSIDAD POLITECNICA DE MADRID

FACULTAD DE INFORMATICA

Evaluacion ParcialPolicontrolada y su Aplicacion

a la Especializacion deProgramas Consciente de los

Recursos

(Poly-Controlled Partial Evaluation and its

Application to Resource-Aware Program

Specialization)

Tesis Doctoral

Claudio J. G. OchoaMarzo de 2007

Page 2: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por
Page 3: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Tesis Doctoral

Evaluacion Parcial Policontrolada y su

Aplicacion a la Especializacion de

Programas Consciente de los Recursos

presentada en la Facultad de Informatica

de la Universidad Politecnica de Madrid

para la obtencion del tıtulo de

Doctor en Informatica

Candidato: Claudio Ochoa

Licenciado en Ciencias de la Computacion

Universidad Nacional de San Luis, Argentina

Master of Computer Science

Universidad de Illinois en Urbana-Champaign, US

Director: German Puebla

Profesor Titular de Universidad

Madrid, Marzo de 2007

Esta tesis esta bajo licencia Attribution-Share Alike 3.0 de Creative Commons. Para ver una copia de esta

licencia, visite http://creativecommons.org/licenses/by-sa/3.0/ o envıe una carta a Creative Commons, 559

Nathan Abbott Way, Stanford, California 94305, USA.

Page 4: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por
Page 5: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Sinopsis

La Evaluacion Parcial es una tecnica automatica para la optimizacion de

programas. Su objetivo principal es el de especializar un programa con respecto

a parte de sus datos de entrada, los que se conocen como datos estaticos.

La calidad del codigo generado por la evaluacion parcial de programas logi-

cos depende, en gran medida, de la estrategia de control que se haya empleado.

Desafortunadamente, aun estamos lejos de contar con una estrategia de control

suficientemente sofisticada como para comportarse de manera optima para cual-

quier programa.

La principal contribucion de esta tesis es el desarrollo de la Evaluacion Par-

cial Policontrolada, un novedoso entorno para la evaluacion parcial de programas

logicos, el cual es policontrolado en el sentido de que puede tomar en cuenta

conjuntos de reglas de control global y local, en lugar de emplear una unica com-

binacion predeterminada (como es el caso de la evaluacion parcial tradicional).

Este entorno es mas flexible que los enfoques existentes, ya que permite asig-

nar diferentes reglas de control local y global a diferentes patrones de llamada.

De este modo, es posible obtener programas especializados que no pueden ser

generados usando evaluacion parcial tradicional. En consecuencia, el entorno de

evaluacion parcial policontrolada puede generar conjuntos de programas especia-

lizados, en lugar de un unico programa. A traves de tecnicas auto-ajustables, es

posible hacer que este enfoque sea completamente automatico. Dichas tecnicas

permiten medir la calidad de los diferentes programas especializados obtenidos.

Este entorno es consciente de los recursos, en el sentido de que cada una de las

soluciones obtenidas a traves de la evaluacion parcial policontrolada es valorada

utilizando funciones de adecuacion, las que pueden tener en cuenta factores tales

como el tamano de los programas especializados, o la cantidad de memoria que

consumen, ademas de la velocidad del programa especializado que es el factor

habitualmente considerado en otros entornos de evaluacion parcial. Este entorno

de evaluacion parcial policontrolada ha sido implementado en el sistema CiaoPP,

y evaluado con numerosos programas de prueba. Los resultados experimentales

muestran que nuestra propuesta obtiene en muchos casos mejores especializacio-

nes que aquellas generadas usando la evaluacion parcial tradicional, especialmente

V

Page 6: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

cuando la especializacion es consciente de los recursos.

Otra de las principales contribuciones de esta tesis es la presentacion de una

vision unificada del problema de eliminar la polivarianza superflua en la evalua-

cion parcial y en la especializacion abstracta multiple, a traves del uso de un paso

de minimizacion, el cual agrupa versiones equivalentes de predicados. Este paso

se puede aplicar en la especializacion de cualquier programa Prolog, inclusive

aquellos que contienen llamadas a predicados predefinidos o predicados externos.

Ademas, ofrecemos la posibilidad de agrupar versiones que no sean estrictamente

equivalentes, con el proposito de obtener programas mas pequenos.

VI

Page 7: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Resumen∗

Los programadores utilizan lenguajes de programacion de alto nivel para escribir

programas en terminos de las tareas a ser ejecutadas, en lugar de preocuparse

por la maquina en particular sobre la que se ejecutara dicho programa. De esta

manera, el proceso de desarrollo es mas rapido y menos propenso a errores. Los

programas escritos en lenguajes de alto nivel son traducidos automaticamente al

lenguaje maquina por otro programa denominado compilador.

Una clase importante de lenguajes de alto nivel son los llamados lenguajes

declarativos. En los lenguajes declarativos el programador solo necesita expresar

que deberıa ser computado por el programa. Esto contrasta con los lenguajes de

alto nivel tradicionales, tales como C, Pascal, Java, etc., y que son conocidos como

lenguajes imperativos, en los que es necesario expresar como computar lo que se

desea, especificandolo de manera explıcita en el flujo de control del programa.

Entre los miembros mas prominentes de los lenguajes declarativos podemos

encontrar la programacion logica y la programacion funcional. La programacion

logica se basa en la logica de primer orden y la demostracion automatica de

teoremas, mientras que la programacion funcional tiene sus raıces en el λ-calculo.

En ambos enfoques, un programa se considera una teorıa, y su ejecucion consiste

en realizar deducciones a partir de dicha teorıa.

La Programacion Logica

El paradigma de la Programacion Logica [65, 66, 24] se caracteriza por ser apro-

piado para la representacion del conocimiento, y se ha empleado en la imple-

∗Este resumen de la Tesis Doctoral, presentada en lengua inglesa para su defensa ante untribunal internacional, es preceptivo segun la normativa de doctorado vigente en la UniversidadPolitecnica de Madrid.

VII

Page 8: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

mentacion de sistemas expertos, bases de conocimiento, agentes inteligentes, etc.

Estas aplicaciones son en general complejas y requieren un buen grado de proce-

samiento simbolico.

Entre las caracterısticas mas utiles de los lenguajes de programacion logicos

podemos mencionar:

• pueden realizar computos con datos parcialmente especificados,

• la caracterıstica de entrada/salida de los argumentos de predicados no

esta determinada de antemano,

• permiten no determinismo, lo que los convierte en lenguajes muy apropiados

para aplicaciones como analisis sintactico (parsing),

• proporcionan un manejo automatico de memoria, evitando de este modo

una fuente principal de errores presente en otros lenguajes de programacion

(especialmente en lenguajes imperativos).

La Evaluacion Parcial y la Conciencia de Recursos

La especializacion de programas es una tecnica automatica para la optimizacion de

programas. En programacion logica, dados un programa P y una entrada G para

P , el objetivo de la especializacion de programas es el de derivar un programa P ′G

que compute (de manera mas eficiente) exactamente las mismas respuestas para

cualquier instancia Gθ de G que P [42]. Entre las tecnicas de especializacion de

programas mas conocidas podemos mencionar la evaluacion parcial, la fragmen-

tacion de programas (en ingles, program slicing), entre otras tecnicas (basadas en

compilador) para la optimizacion de programas con el proposito de mejorar el

rendimiento de la ejecucion del programa.

La evaluacion parcial [59, 60, 85, 44] es una tecnica de transformacion de

programas fuente-a-fuente, en la cual, dado un programa P y conociendo parte de

los datos de entrada, se pre-computan aquellas porciones de P que solo dependen

de los datos conocidos de entrada. El programa transformado resultante (tambien

conocido como programa residual) es menos general que el programa original,

pero puede ser mucho mas eficiente. Los datos de entrada que son conocidos de

antemano reciben el nombre de datos estaticos, mientras que el resto de datos de

entrada se conocen como datos dinamicos.

VIII

Page 9: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

En general, la mayorıa de los evaluadores parciales no son conscientes de los

recursos, y se enfocan principalmente a la generacion de programas especializados

que ejecuten mas rapido que el programa original. Otros factores tales como el

tamano del programa resultante, y el espacio de memoria requerido para ejecutar

el programa especializado, son en general ignorados.

Hoy en dıa existen numerosas aplicaciones que deben ser ejecutadas en dispo-

sitivos con pocos recursos (disco, memoria, etc.), tales como telefonos moviles u

ordenadores de mano. En otros casos, existen sistemas embebidos que disponen

de pocos recursos para ejecutar. En estos casos, los evaluadores parciales actuales

no son de gran ayuda, ya que como hemos mencionado anteriormente, se enfocan

a la obtencion de programas mas eficientes en tiempo. Peor aun, en muchos ca-

sos dicha eficiencia se obtiene a traves de la generacion de numerosos predicados

especializados, lo que aumenta en muchos casos el tamano de los programas espe-

cializados. Esto nos ha llevado a buscar soluciones y alternativas a este problema,

trabajando para ello en la formalizacion e implementacion de una arquitectura

de evaluacion parcial consciente de los recursos que hemos llamado evaluacion

parcial poli-controlada, ası tambien como en otras tecnicas destinadas a reducir

el tamano de los programas obtenidos mediante evaluacion parcial sin degradar

el rendimiento de los mismos.

Objetivos de la Tesis

El objetivo principal del trabajo presentado en esta Tesis Doctoral ha sido la for-

malizacion, desarrollo, implementacion y evaluacion experimental de un evaluador

parcial poli-controlado, el cual brinda como principal aportacion la posibilidad de

generar programas especializados que son conscientes de los recursos. Un obje-

tivo relacionado ha sido el desarrollo de tecnicas para reducir el tamano de los

programas especializados sin perder su eficiencia.

Estructura del trabajo

La Tesis se estructura en cinco partes. A continuacion describimos cada una de

ellas.

IX

Page 10: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Parte I: Introduccion Tecnica

Con el objetivo de hacer que esta Tesis sea auto-contenida, en esta parte brin-

damos un breve resumen de la terminologıa de la logica de primer orden, la

programacion logica y la evaluacion parcial.

El objetivo de la evaluacion parcial es el de especializar un programa con res-

pecto a parte de los datos de entrada, que reciben el nombre de datos estaticos.

Informalmente, la evaluacion parcial de programas logicos se basa en la cons-

truccion de arboles de busqueda parciales para el patron de llamada (tambien

conocido como objetivo o atomo) a especializar, y en la extraccion del conjunto

de resultantes asociado a las derivaciones que no sean de fallo. Un resultante es

una clausula cuya cabeza es el atomo en la raız del arbol (aplicandole las susti-

tuciones computadas en la derivacion), y cuyo cuerpo es el objetivo final de la

derivacion (contenido en las hojas del arbol de busqueda).

Con el proposito de que los arboles de busqueda parciales sean finitos se

introduce en el algoritmo de evaluacion parcial una regla de desplegado (unfolding

rule). Las reglas de desplegado conforman el llamado control local del algoritmo,

e intentan especializar tanto como sea posible.

Los atomos en el lado derecho de los resultantes son agregados al conjunto de

atomos a ser evaluados parcialmente, tras aplicarles un operador de abstraccion.

Este operador de abstraccion se encarga del control global, e intenta garantizar

que el numero de atomos generados sea finito, reemplazando dichos atomos por

generalizaciones de los mismos. Es decir que se pierde precision con el objetivo

de garantizar la terminacion del algoritmo. Esta fase de abstraccion produce

un nuevo conjunto de atomos, algunos de los cuales pueden a su vez necesitar

una evaluacion posterior, y de esta manera, el proceso se repite iterativamente a

medida que se introducen nuevos atomos.

En el Algoritmo 1 podemos ver un algoritmo de evaluacion parcial, donde el

control local esta representado por la funcion U , mientras que el control global

esta representado por el operador G. El operador BA extrae el conjunto S de

atomos del lado derecho de los resultantes del arbol de busqueda τ generado por

la operacion de desplegado.

El algoritmo de evaluacion parcial trata el problema de la terminacion a dos

niveles:

X

Page 11: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Algorithm 1 Algoritmo de Evaluacion ParcialInput: Programa P

Input: Objetivo G

Output: Un conjunto finito de atomos A

1: A0 = atomos de G

2: i = 0

3: repeat

4: τ = U(Ai, P )

5: S = BA(P ′)

6: Ai+1 = G(Ai, S)

7: i = i + i

8: until Ai = Ai+1

terminacion local: es el problema de garantizar que los arboles de busqueda

sean finitos, es decir, el problema de encontrar una regla de desplegado U

que garantice la terminacion.

terminacion global: es el problema de garantizar que el numero de iteraciones

del algoritmo sea finito, es decir, el problema de encontrar un operador de

abstraccion que mantenga el conjunto Ai finito.

La calidad del codigo generado por la evaluacion parcial depende en gran

medida de las estrategias de control (local y global) empleadas.

Parte II: Reduciendo el Tamano de los Programas Especia-

lizados

En esta parte, abordamos el problema de la especializacion polivariante en la eva-

luacion parcial. La especializacion polivariante permite la generacion de multiples

versiones de un predicado, los cuales pueden ser optimizados para usos diferentes.

Uno de los principales objetivos de la evaluacion parcial de programas logicos

es el de obtener codigo tan optimizado como sea posible. En general, este objetivo

se logra a traves de la aplicacion de reglas de desplegado agresivas a nivel del

control local, y usando operadores de abstraccion que generalicen lo menos posible

XI

Page 12: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

a nivel del control global, siempre y cuando no se ponga en riesgo la terminacion

del algoritmo [71].

Una heurıstica muy comun es la de producir tantas versiones diferentes de

cada predicado como sea posible (sin comprometer la terminacion del algoritmo),

con la idea de que al considerar diferentes versiones por separado se pueden

descubrir nuevas optimizaciones. Esta heurıstica tiene sentido desde el punto de

vista de la optimizacion de programas en terminos de pasos de resolucion, pero

puede producir resultados innecesariamente grandes. Estos programas son mas

rapidos que los programas originales en general, pero a veces pueden ser mas lentos

debido a efectos tales como fallos de cache (cache miss), perdidas del indexado

de clausulas, etc.

Una posible solucion a este problema consiste en introducir un paso de minimi-

zacion que identifique conjuntos de versiones equivalentes, y reemplazar todas las

ocurrencias de dichas versiones por una sola version. En este trabajo abordamos

el problema de llevar a cabo este paso de minimizacion en cualquier programa

Prolog, inclusive en aquellos que contengan predicados predefinidos, llamadas a

predicados externos definidos en otros modulos o en librerıas del lenguaje, etc.

Hasta el momento, este paso de minimizacion solo se realizaba en programas logi-

cos puros (programas sin predicados predefinidos o externos) o conteniendo un

conjunto muy limitado de predicados predefinidos seguros.

El decidir si dos versiones Ai y Aj (donde pred(Ai) = pred(Aj)) son equiva-

lentes no es simple, ya que debemos considerar no solo el codigo generado para

Ai y Aj sino tambien el codigo de todas las versiones que son alcanzables desde

ellos. Por ello, separamos la nocion de equivalencia en niveles de equivalencia local

y equivalencia global. En la primera, nos concentramos en comparar solamente el

codigo de Ai y Aj, sin preocuparnos de los predicados que son alcanzables desde

ellos, mientras que la equivalencia global tiene en cuenta ademas que todas las

versiones alcanzables desde Ai y Aj sean tambien localmente equivalentes.

El algoritmo de minimizacion consiste en dos fases:

reunion: Esta fase se ocupa de la equivalencia local, y agrupa aquellas versiones

de un mismo predicado que son consideradas localmente equivalentes (de

acuerdo a algun criterio). Para ello se produce una particion {V1, . . . , Vm} a

partir de un conjunto de atomos {A1, . . . , An}, con m ≤ n y donde ∀A, A′ ∈Vi . A ≡ A′, donde ≡ denota equivalencia local (de acuerdo a algun criterio

XII

Page 13: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

determinado). Desafortunadamente, si generamos codigo a partir de estas

versiones, obtendremos en general un programa especializado incompleto, o

en el que deberemos agregar verificaciones en tiempo de ejecucion (runtime

tests) para poder decidir que version de un predicado se debe utilizar en

cada punto de programa.

particion: Esta fase se ocupa de la equivalencia global, y particiona continua-

mente el conjunto obtenido en la fase de reunion hasta que cada particion

contiene versiones de predicados que son globalmente equivalentes. Esto ga-

rantiza que el programa obtenido no necesite de verificaciones en tiempo de

ejecucion para decidir que version de predicado utilizar en cada punto de

programa.

Un punto crucial del algoritmo es decidir si dos atomos son localmente equi-

valentes. Esta decision tiene que satisfacer dos propiedades:

1. debe producir resultados correctos

2. debe ser eficiente, basando dicha decision en condiciones locales y sintacti-

cas.

En este trabajo consideramos que dos atomos son localmente equivalentes

si sus arboles caracterısticos son isomorfos [94]. Un arbol caracterıstico es una

estructura de datos que encapsula una traza del proceso de desplegado de un

atomo [84]. Una de las aportaciones de este trabajo es la extension de la definicion

de arbol caracterıstico para que soporte procesos de desplegado de atomos en

cualquier programa Prolog, es decir, programas que pueden contener predicados

externos, o cualquier tipo de predicados predefinidos. Para ello, cada vez que

desplegamos un atomo A tal que pred(A) es un predicado externo, almacenamos

en el arbol caracterıstico un par (A, θ), donde θ es la respuesta de la ejecucion

de A. Para ello, A tiene que ser evaluable, es decir, tiene que ser bien-tipado, no

producir efectos colaterales, y terminar universalmente [106].

En esta parte, tambien abordamos la posibilidad de colapsar versiones que

no sean estrictamente equivalentes. Esto nos permite obtener programas mas pe-

quenos a costa de una disminucion en su velocidad de ejecucion. Pero en contextos

como la computacion ubicua, este intercambio de tiempo por espacio puede ser

de mucha utilidad.

XIII

Page 14: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Parte III: Fundamentos de la Evaluacion Parcial Poli-

Controlada

Como hemos mencionado anteriormente, la calidad del codigo generado por la

evaluacion parcial depende en gran medida de las estrategias de control local

y global empleadas. Desafortunadamente, la mayorıa de las reglas de control se

comportan bien para algunos programas, pero no para otros. Muchas veces, y

sobretodo en el caso de usuarios principiantes, la eleccion de determinadas reglas

de control puede ocasionar que el programa especializado sea menos eficiente que

el programa original, (ya sea porque realiza un mayor numero de subcomputacio-

nes o porque pierde el indexado de sus clausulas), o que sea considerablemente

mas grande. Pero esas mismas reglas pueden lograr, en otros casos, importantes

mejoras en la velocidad de ejecucion de los programas especializado.

Por ejemplo, consideremos el programa del Listado 1. En este programa, hay

una costosa llamada a un predicado externo computacion costosa/2. Si la regla

de desplegado que utilizamos selecciona solamente atomos que esten mas a la iz-

quierda del objetivo (leftmost unfolding), entonces no podremos desplegar una lla-

mada a p/1, ya que no disponemos del codigo fuente de computacion costosa/2.

Para poder desplegar q/1, deberıamos usar una regla de desplegado que no selec-

cione necesariamente los atomos de mas a la izquierda (non-leftmost unfolding),

es decir que podrıa seleccionar y desplegar la llamada a q/1.

Listing 1: Programa p/1

p(B):- computacion_costosa(B,C), q(C).

q(1).

q(2).

q(3).

q(4).

q(5).

q(6).

En este caso, dicho desplegado genera el codigo residual del Listado 2, el

cual es claramente menos eficiente que el codigo original, ya que las llamadas

al predicado externo computacion costosa/2 tienen que ser realizadas especu-

lativamente hasta que alguna de ellas tenga exito, si es que esto ocurre. Por

XIV

Page 15: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

ejemplo, para llamadas no exitosas a p/1, se ejecutaran 6 llamadas al predicado

computacion costosa/2, mientras que en el programa original esto ocurrirıa solo

una vez.

Listing 2: Codigo residual de p/1

p(A) :- computacion_costosa(A,1).

p(A) :- computacion_costosa(A,2).

p(A) :- computacion_costosa(A,3).

p(A) :- computacion_costosa(A,4).

p(A) :- computacion_costosa(A,5).

p(A) :- computacion_costosa(A,6).

En principio, uno podrıa pensar que el ejemplo del Listado 1 es muy artificial,

y que dicho codigo no aparecera en programas reales. Sin embargo, consideremos

por ejemplo el programa del Listado 3, el cual define un predicado en ambos/3

que tiene exito si su primer argumento es miembro de las listas pasadas en el

segundo y tercer argumentos.

Listing 3: Ejemplo en ambos/3

miembro(X,[X|T]).

miembro(X,[Y|T]) :- miembro(X,T).

en_ambos(X,L1,L2) :-

miembro(X,L1),

miembro(X,L2).

Si realizamos una evaluacion parcial respecto del atomo en ambos(a,L1,[X,Y]),

y empleamos una regla de desplegado que selecciona atomos que no esten necesa-

riamente mas a la izquierda del objetivo, entonces obtendremos el programa del

Listado 4,

Listing 4: Especializando en ambos/3

miembro(a,[a|T]).

miembro(a,[Y|T]) :- miembro(a,T).

en_ambos(a,L1 ,[a,Y]) :- miembro(a,L1).

en_ambos(a,L1 ,[X,a]) :- miembro(a,L1).

XV

Page 16: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

En este caso, si ejecutamos el programa especializado con respecto del ato-

mo en ambos(a,[h,g,f,...,a],[X,Y]), entonces el programa original ejecuta

solo una vez la costosa llamada miembro(a,[h,g,f,...,a]), mientras que el

programa especializado lo hace dos veces.

Una solucion clasica a este problema es permitir que la regla de desplegado

seleccione atomos que no esten necesariamente mas a la izquierda solo en aquellos

casos donde la aplicacion de esta regla es determinista [42, 44, 84]. Sin embargo,

en muchas situaciones es conveniente poder hacer este tipo de desplegados en

cualquier caso. Por ejemplo, consideremos el programa del Listado 5, el cual

calcula el exponencial de un numero dado.

Listing 5: Programa exp/3

exp(Base ,Exp ,Res):-

exp_ac(Exp ,Base ,1,Res).

exp_ac(Exp ,_,Res ,Res):-Exp=1.

exp_ac(Exp ,Base ,Tmp ,Res):-

Exp > 0,

Exp1 is Exp - 1,

NTmp is Tmp * Base ,

exp_ac(Exp1 ,Base ,NTmp ,Res).

Si especializamos este programa con respecto al patron de llamada exp(Base,3,Res),

las llamadas recursivas pueden ser desplegadas solo si se permite seleccionar ato-

mos que no esten necesariamente mas a la izquierda, y permitiendo que las clausu-

las con las que unifica no sean deterministas (notese que el predicado exp ac es

no determinista con relacion al atomo exp ac(Exp,Base,1,Res)). El Listado 6

muestra el codigo especializado obtenido con este tipo de desplegado, despues de

algunas simplificaciones aritmeticas.

Listing 6: Codigo residual del ejemplo exp/3

exp(A,3,B) :- B is A*A*A.

En este caso, el programa especializado es claramente mas eficiente que el

programa original. Sin embargo, si no hubieramos permitido dicho desplegado no

podrıamos haberlo obtenido. Con estos ejemplos queda claro que seleccionar una

funcion de desplegado a ser empleada en una evaluacion parcial no es algo trivial,

XVI

Page 17: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

ya que la eleccion de la misma puede hacer que en algunos casos el programa

especializado sea mas eficiente que el programa original, mientras que en otros

casos la misma regla de desplegado puede producir programas especializados mas

lentos.

Mas aun, consideremos el programa del listado 7, en el cual combinamos las

llamadas al predicado exp/3 definido en el Listado 5, y al predicado p/1 definido

en el Listado 1.

Listing 7: Un ejemplo motivador

main(A,B,C):- exp(B,2,Result), p(A).

Al especializar este programa respecto del atomo main(A,B,C), si empleamos

un desplegado de llamadas que siempre selecciona el atomo de mas a la izquierda,

obtendremos el codigo residual del Listado 8.

Listing 8: Resultado con desplegado de mas a la izquierda

main(A,B,C) :-

D is 1*B,

exp_ac_1(1,B,D,C),

p_1(A).

exp_ac_1(1,A,B,C) :-

D is B*A,

exp_ac_2(0,A,D,C).

exp_ac_2(0,_1,A,A).

p_1(A) :- computacion_costosa(A,B), q_1(B).

q_1 (1).

q_1 (2).

q_1 (3).

q_1 (4).

q_1 (5).

q_1 (6).

XVII

Page 18: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Notese que en el programa del Listado 8, ninguna de las llamadas al predicado

predefinido is/2 esta lo suficientemente instanciada como para ser ejecutada en

tiempo de especializacion. Debido a esto, los arboles de busqueda parciales no

son muy profundos, y se genera un gran numero de predicados residuales.

Por otra parte, si elegimos desplegar llamadas seleccionando atomos que no

esten necesariamente mas a la izquierda del objetivo, obtendremos el programa

del Listado 9, donde solo se ha generado un arbol de busqueda parcial, y de este

modo no se han definido predicados auxiliares.

Listing 9: Resultado con desplegado de atomos que no esten necesariamente mas

a la izquierda

main(A,B,C) :- D is 1*B, C is D*B,

computacion_costosa(A,1).

main(A,B,C) :- D is 1*B, C is D*B,

computacion_costosa(A,2).

main(A,B,C) :- D is 1*B, C is D*B,

computacion_costosa(A,3).

main(A,B,C) :- D is 1*B, C is D*B,

computacion_costosa(A,4).

main(A,B,C) :- D is 1*B, C is D*B,

computacion_costosa(A,5).

main(A,B,C) :- D is 1*B, C is D*B,

computacion_costosa(A,6).

Desafortunadamente, ninguno de estos programas especializado es optimo, ya

que para ello se debieran haber seleccionado atomos de mas a la izquierda para

el predicado p/1, y atomos que no esten necesariamente mas a la izquierda para

el predicado exp/3.

La generacion de programas especializados menos eficientes puede producir-

se ademas debido a la perdida de indexacion. Los sistemas Prolog realizan un

indexado de las clausulas de un programa de acuerdo a su primer argumento.

Esta indexacion es analoga a la de los sistemas de base de datos, y permite de-

terminar rapidamente si hay una cabeza de clausula que unifique con un atomo

dado, lo cual puede significar una mejora de rendimiento considerable en el caso

de programas con numerosas clausulas por predicado.

XVIII

Page 19: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Por ejemplo, consideremos el programa del Listado 10, en el cual tenemos una

base de datos con numerosos hechos representados por el predicado p/2. Siempre

que hagamos una llamada a este predicado con su primer argumento instanciado,

podremos beneficiarnos de la indexacion para lograr una mejora de rendimiento.

Listing 10: Ejemplo con indexacion de clausulas

index_test(f(_),Y,Z) :- p(Y,Z).

p(a,1).

p(b,2).

p(c,3).

p(d,4).

p(e,5).

p(f,6).

p(g,7).

p(h,8).

p(i,9).

p(j,10).

Sin embargo, si especializamos este programa con respecto al atomo index test(A,B,C),

entonces obtendremos el programa especializado del Listado 11, en el cual hemos

eliminado el predicado p/2, pero a la vez hemos perdido la indexacion sobre dicho

predicado, y en consecuencia, el programa especializado sera menos eficiente que

el programa original.

Listing 11: Especializacion de index test/3

index_test(f(_), a, 1).

index_test(f(_), b, 2).

index_test(f(_), c, 3).

index_test(f(_), d, 4).

index_test(f(_), e, 5).

index_test(f(_), f, 6).

index_test(f(_), g, 7).

index_test(f(_), h, 8).

index_test(f(_), i, 9).

index_test(f(_), j, 10).

XIX

Page 20: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Por otra parte, la evaluacion parcial puede ocasionar otros problemas relacio-

nados, tales como generar una explosion de codigo en el programa especializado,

lo cual en algunos casos tambien puede ocasionar que el programa especializado

sea menos eficiente debido a efectos tales como fallos de cache (cache miss). Por

ejemplo, consideremos una implementacion del programa permute, como la del

Listado 12. Este programa recibe una lista como primer argumento, y devuelve

una posible permutacion de los elementos de dicha lista en el segundo argumento

(notese que este programa tiene multiples soluciones).

Listing 12: Ejemplo permute/3

permute ([] ,[]).

permute(A,[U|V]):-

delete(U, A, Z),

permute(Z, V).

delete(A, [A|L], L).

delete(X, [A,B|L], [A|R]):-

TM = [B|L],

delete(X, TM, R).

Si realizamos una evaluacion parcial de este programa con respecto al atomo

permute([1,2,3,4|X],L), entonces obtendremos un programa con numerosas

clausulas para el predicado permute/2, como se muestra en el Listado 13.

Como podemos ver, la evaluacion parcial no siempre produce programas es-

pecializados con las propiedades esperadas, e inclusive puede producir programas

mas lentos. En general, las reglas de control elegidas estan directamente rela-

cionadas con la calidad del codigo residual generado. Lamentablemente, muchas

veces es difıcil predecir el comportamiento de la evaluacion parcial, sobretodo en

terminos del tamano del programa especializado. En esta Tesis, proponemos un

entorno llamado evaluacion parcial poli-controlada, en el cual es posible combinar

diversas reglas de control, y aplicar diferentes reglas de control a diferentes ato-

mos durante la especializacion. Este entorno es consciente de los recursos, y nos

permite especializar un programa teniendo en cuenta factores como la memoria

o el espacio en disco que dicho programa especializado ocupara.

XX

Page 21: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Listing 13: Especializacion de permute/2

permute ([1,2,3,4],[1,2,3,4]).

permute ([1,2,3,4,A|B],[1,2,3,4,A|C]) :-

permute_2(B,C) .

permute ([1,2,3,4,A,B|C],[1,2,3,4,D|E]) :-

delete_1(D,F,B,C),

permute_2 ([A|F],E) .

permute ([1,2,3,4,A|B],[1,2,3,A|C]) :-

permute_2 ([4|B],C) .

permute ([1,2,3,4,A,B|C],[1,2,3,D|E]) :-

delete_1(D,F,B,C),

permute_2 ([4,A|F],E) .

permute ([1,2,3,4],[1,2,4,3]).

permute ([1,2,3,4,A|B],[1,2,4,3,A|C]) :-

permute_2(B,C) .

permute ([1,2,3,4,A,B|C],[1,2,4,3,D|E]) :-

delete_1(D,F,B,C),

permute_2 ([A|F],E) .

permute ([1,2,3,4,A|B],[1,2,4,A|C]) :-

permute_2 ([3|B],C) .

permute ([1,2,3,4,A,B|C],[1,2,4,D|E]) :-

delete_1(D,F,B,C),

permute_2 ([3,A|F],E) .

...

Evaluacion Parcial Policontrolada

La evaluacion parcial policontrolada (PCPE, por sus siglas en Ingles) recibe como

entrada un programa logico P , un conjunto A de atomos que describen los patro-

nes de llamada iniciales, y un conjunto CS de combinaciones de reglas de control

local y global. Cada una de estas combinaciones recibe el nombre de estrategia

de especializacion. Como salida, PCPE puede generar varios programas especia-

lizados.

XXI

Page 22: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Una configuracion en el entorno de PCPE es un par 〈S, H〉 donde S es un

conjunto de atomos y H es un conjunto de tuplas de la forma 〈A, A′, 〈G, U〉〉.El conjunto S contiene aquellos atomos a ser especializados, mientras que H

guarda la historia de la especializacion: por cada atomo A que se especializa,

almacenamos, ademas de A, el resultado A′ de aplicar un operador de abstraccion

G a A, y la estrategia de especializacion 〈G, U〉 empleada.

PCPE toma una configuracion inicial 〈A, ∅〉, selecciona un atomo A ∈ A,

usando para ello una funcion llamada TakeOne, i.e., A = TakeOne(A), y ejecuta

una serie de pasos de PCPE que dan lugar a nuevas configuraciones. Cada paso de

PCPE selecciona una estrategia de especializacion CS ∈ CS, donde CS = 〈G, U〉,y genera una nueva configuracion T ′ = 〈S ′, H ′〉 a partir de una configuracion

T = 〈S, H〉, denotado T ;CS T ′, tal que

• S ′ = (S − {A}) ∪ {B ∈ leaves(CS(T )) | ∀ 〈C, , 〉 ∈ H . B 6≈ C}

• H ′ = H ∪ {〈A, A′, 〈G, U〉〉}, donde A′ = G(A, H)

y donde τ = CS(T ) denota que A = TakeOne(S), A′ = G(A, H) y τ = U(P, A′),

mientras la funcion leaves(τ) recolecta los atomos en los cuerpos de los resultantes

de τ .

Luego el proceso se repite iterativamente, es decir, a cada configuracion se

le aplica una serie de pasos de PCPE que dan lugar a nuevas configuraciones,

y el proceso continua hasta alcanzar un conjunto de configuraciones finales de

la forma 〈∅, H〉. Aquellas configuraciones que no sean finales son denominadas

configuraciones intermedias. Cada configuracion final da lugar a un programa

especializado PT , computado de la siguiente manera:

PT =⋃

〈Ai,A′i,〈Gi,Ui〉〉∈H rename(resultants(Ui(P, A′

i)), H)

donde Ui(P, A′i) genera un arbol SLD τi, resultants(τ) = {A′

iθ1 ← R1, . . . , A′iθn ←

Rn} tal que ← R1, . . . ,← Rn son objetivos pertenecientes a hojas de τi que no

lleven a fallo, y cada θi es una sustitucion asociada con la derivacion de ← A′i a

← Ri. Finalmente, rename es un procedimiento que asigna un nombre de predi-

cado nuevo a cada atomo A′i ∈ H y realiza renombrados en la cabeza y cuerpos de

las clausulas residuales de manera que cada punto de programa emplee la version

adecuada de cada predicado.

Los pasos de PCPE se pueden organizar en caminos de PCPE, que consisten

de una secuencia de configuraciones T0 : T1 : . . . : Tp y una secuencia de estrategias

XXII

Page 23: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

de especializacion CS1 : CS2 : . . . : CSp de manera que Ti ;CSi+1Ti+1, i = 1..p.

Un camino de PCPE T0 ;CS1 . . . ;CSp Tp es completo si y solo si T0 es una

configuracion inicial y Tp es una configuracion final. Tambien decimos que una

configuracion T ′ es alcanzable desde una configuracion T si existe un camino de

la forma T ;CS1 . . . ;CSp T ′, p ≥ 0.

Los caminos de PCPE se pueden organizar en un arbol de PCPE, donde cada

nodo corresponde a una configuracion, de manera que

• la raız del arbol corresponde a una configuracion inicial,

• las hojas del arbol corresponden a configuraciones finales, y

• existe un arco desde el nodo T al nodo T ′ si existe una estrategia de espe-

cializacion CS ∈ CS tal que T ;CS T ′.

Evaluacion Parcial Consciente de los Recursos

Como hemos visto, a partir de la configuracion inicial 〈A, ∅〉, PCPE puede al-

canzar un conjunto de configuraciones finales de la forma 〈∅, H〉, donde cada

configuracion final da lugar a un programa especializado, como hemos mencio-

nado antes. Esto ocurre si PCPE se implementa como un algoritmo basado en

busqueda. En ese caso, dicho algoritmo recorre todas las ramas del arbol de PC-

PE y obtiene un conjunto de programas especializados. Sin embargo, el proceso

de evaluacion parcial esta pensado para obtener un solo programa especializado

P ′ a partir de un programa de entrada P . Por ello, necesitamos algun mecanismo

para seleccionar uno de ellos.

Existen varios criterios que pueden ser empleados con el proposito de valorar

la calidad de un programa especializado:

Velocidad: determinar cual de los programas especializados ejecuta mas rapido

no es un problema trivial. Por ejemplo, podemos usar para ello tecnicas de

analisis estatico de costes, o se pueden medir tiempos reales de ejecucion.

Esta ultima posibilidad es mas simple de implementar pero conlleva la difi-

cultad de que el usuario necesita especificar un conjunto de casos de prueba

que sean representativos de la clase de llamadas en tiempo de ejecucion que

seran realizadas sobre dicho programa especializado.

XXIII

Page 24: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Tamano: otro factor que podrıa ser de interes al usuario es el tamano (en codi-

go de bytes) de los programas resultantes. Esta caracterıstica es bastante

simple de evaluar. Dependiendo de los recursos disponibles en la plataforma

en la que se ejecutara el codigo residual, este factor puede ser de mayor o

menor importancia. Tambien podrıa suceder que diferentes programas espe-

cializados ejecuten en tiempos similares pero que algunos sean mucho mas

grandes en tamano que otros.

Memoria: el consumo de memoria del programa especializado puede ser un fac-

tor muy importante, especialmente si el programa se ejecutara en dispositi-

vos con recursos limitados, como podrıa ser el caso de sistemas embebidos

y computacion ubicua (pervasive computing).

La arquitectura para el evaluador parcial poli-controlado propuesto en esta

Tesis es consciente de los recursos, en el sentido de que puede tomar en cuenta

los criterios antes mencionados. Ademas, el evaluador parcial poli-controlado es

completamente auto-ajustable, es decir que no requiere intervencion humana para

decidir cual de los programas especializados es el mejor. En este sentido, PCPE

emplea funciones de adecuacion (fitness) que asignan un valor numerico a cada

programa especializado, reflejando la calidad del mismo. Las funciones de fitness

tienen en cuenta uno o mas criterios, tales como velocidad, tamano en disco o en

memoria, etc.

En particular, las funciones de fitness implementadas actualmente en el eva-

luador parcial poli-controlado integrado en CiaoPP son:

speedup compara programas con respecto a su eficiencia en tiempo, midiendo

la aceleracion respecto del programa original.

bytecode compara programas con respecto a su eficiencia en espacio de disco,

midiendo su tamano en codigo de bytes respecto del programa original.

memory compara programas con respecto a su eficiencia en ocupacion de memo-

ria, midiendo su tamano en memoria (codigo + datos) respecto del programa

original.

bounded size obtiene el programa mas eficiente que tenga un tamano menor o

igual a un maximo dado. Esto es muy util cuando se tienen restricciones

fijas de disco o memoria en dispositivos con escasos recursos.

XXIV

Page 25: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

balance es una combinacion de las funciones de fitness speedup y bytecode. In-

tenta encontrar programas pequenos pero rapidos.

Ventajas de la Evaluacion Parcial Poli-controlada

Entre las principales ventajas de la evaluacion parcial poli-controlada respecto de

la evaluacion parcial tradicional podemos mencionar:

• Es un enfoque consciente de los recursos. A diferencia de la evaluacion

parcial tradicional, la cual ha sido disenada para obtener programas que

realicen menos pasos de resolucion, y que, por consiguiente, ejecuten en

general mas rapido que los programas originales, la evaluacion parcial poli-

controlada puede ademas generar programas que sean mas pequenos en

tamano de disco, o que ocupen menos memoria, o que sean pequenos y

rapidos a la vez, etc.

• Puede generar mejores soluciones que la evaluacion parcial tradicional.

Como hemos explicado anteriormente, muchas veces es mejor aplicar di-

ferentes reglas de control a atomos diferentes. Las evaluaciones experimen-

tales realizadas en esta Tesis muestran que las soluciones generadas por la

evaluacion parcial poli-controlada son en muchos casos mejores que las ob-

tenidas por evaluacion parcial tradicional, y por la naturaleza del algoritmo

basado en busqueda empleado para encontrar dichas soluciones, garantiza

que estas no sean en ningun caso de peor calidad.

• No es una nueva estrategia de control, sino por el contrario, es una arqui-

tectura flexible que permite la convivencia de multiples reglas de control,

y que se beneficia de la investigacion y desarrollo de nuevas reglas de con-

trol, las que son automaticamente integradas en el entorno, y pueden ser

combinadas con cualquiera de las reglas existentes.

• Es mas amigable con el usuario. Los evaluadores parciales actuales propor-

cionan un considerable numero de parametros, incluyendo reglas de control

local y global, arboles globales, reglas de seleccion, filtrado de argumentos,

etc. Estos parametros afectan la calidad del codigo de la solucion obtenida.

Para un usuario principiante, es realmente complicado descubrir cual es la

XXV

Page 26: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

combinacion adecuada para lograr un resultado determinado. Inclusive en

el caso de usuarios con mas experiencia, resulta complicado predecir el com-

portamiento de la evaluacion parcial cuando estos parametros interactuan,

especialmente en terminos de eficiencia en tamano. La evaluacion parcial

poli-controlada permite que los usuarios experimenten simultaneamente con

diferentes combinaciones de parametros con el proposito de obtener un pro-

grama especializado de acuerdo a sus necesidades.

Parte IV: Evaluacion Parcial Poli-controlada en la Practica

Como hemos mencionado anteriormente, un algoritmo basado en busqueda que

implemente PCPE recorre todo el arbol de PCPE. La ramificacion de cada nodo

esta determinada por el numero de estrategias de especializacion dadas como en-

trada al algoritmo de PCPE en el conjunto CS. En otras palabras, cada configu-

racion intermedia tiene | CS | hijos. Esto representa un crecimiento exponencial

del espacio de busqueda, e imposibilita su aplicacion practica. Por ello, es im-

prescindible optimizar el algoritmo base controlando el tamano de su espacio de

busqueda, de manera que pueda ser empleado con programas del mundo real. En

esta parte de la Tesis exploramos diferentes tecnicas para reducir el espacio de

busqueda del algoritmo de evaluacion parcial poli-controlada, intentando obtener

soluciones de calidad similar que el algoritmo original.

Una primera optimizacion que puede hacerse al algoritmo base es la de eli-

minar las configuraciones hermanas (es decir, que desciendan directamente del

mismo nodo) que sean equivalentes. Esta optimizacion es simple de implementar

y logra una drastica reduccion del espacio de busqueda.

Otra manera de reducir el tamano del espacio de busqueda es a traves del uso

de heurısticas. Por ejemplo, podemos considerar solamente aquellas estrategias

de control que sean consistentes con las decisiones tomadas en configuraciones

previas.

Una primera nocion de consistencia que podemos considerar es la de usar

la misma estrategia de control para todos aquellos atomos que correspondan al

mismo predicado. Aquellas configuraciones que satisfacen esta restriccion reciben

el nombre de consistentes por predicados, mientras que el resto de configuraciones

reciben el nombre de inconsistentes por predicados.

Esta restriccion reducira en general de manera significativa el tamano del

XXVI

Page 27: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

espacio de busqueda ya que, una vez que consideramos un atomo de un predicado

dado, el resto de atomos del mismo predicado que procesemos a continuacion

tendran siempre una sola configuracion sucesora.

Aunque esta alternativa puede parecer bastante restrictiva en principio, la

intuicion detras de esta idea es que, en el contexto de un programa dado, pueden

existir estrategias de control que se comporten bien para todos los atomos que

corresponden al mismo predicado.

Una posible mejora a la tecnica de consistencia por predicados, es definir la

consistencia al nivel de modos de un predicado. Es decir que dos atomos usaran las

misma reglas de control local y global solo si tienen el mismo nivel de instanciacion

en sus argumentos. En este sentido, mientras mas preciso sea el dominio de modos,

menos restrictivas seran las simplificaciones realizadas, produciendose de este

modo un mayor numero de soluciones candidatas.

En cierto modo, este enfoque es similar a los tipos de enlace usados en el

analisis de tiempo de enlace de la evaluacion parcial offline [59]. En este analisis,

cada argumento de un predicado es anotado con un tipo de enlace que proporciona

informacion acerca del estado de instanciacion de un argumento en tiempo de

especializacion.

Las ventajas de usar tecnicas de poda del espacio de busqueda basadas en

heurısticas son que, en general, estas son simples de implementar, y logran una

reduccion significativa del tamano del espacio de busqueda. La desventaja princi-

pal es que, en determinadas ocasiones, las tecnicas basadas en heurısticas pueden

podar la solucion de maximo fitness.

Otra posibilidad para podar el espacio de busqueda del algoritmo de evalua-

cion parcial poli-controlada es la de emplear tecnicas de ramificacion y poda, las

cuales garantizan la preservacion de la solucion de maximo fitness. Para imple-

mentar un algoritmo de evaluacion parcial poli-controlada basado en tecnicas de

ramificacion y poda necesitamos:

• disenar un mecanismo para computar una cota superior del valor de fitness

de una configuracion intermedia. Esta cota superior estara compuesta de

dos valores, uno actual (la parte de la configuracion que ha sido procesada y

que compondra la solucion final), y uno estimado, que maximiza el posible

valor de la configuracion una vez que esta este completa.

XXVII

Page 28: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

• recorrer el espacio de busqueda de manera primero en profundidad, ya que

de este modo encontraremos configuraciones finales mas rapidamente, y

podremos comparar y actualizar el valor de fitness de la mejor solucion

encontrada hasta el momento. Esto hara que la poda sea mas efectiva.

• decidir la frecuencia con la cual evaluaremos configuraciones intermedias,

con la intencion de podarlas si no son mejores que la mejor solucion encon-

trada hasta el momento. Claramente, si evaluamos muy a menudo, entonces

podaremos mas, pero introduciremos un mayor coste asociado al computo

del valor de fitness de dichas configuraciones.

La estimacion del valor de fitness de las configuraciones intermedias esta liga-

da ıntimamente a la funcion de fitness empleada. En el caso de que la funcion de

fitness tenga en cuenta el tamano del programa especializado, dada una configu-

racion conf =〈S, H〉 entonces podemos tomar como componente actual el tamano

de los resultantes de cada atomo en H, y como componente estimado el valor 0

(cero) para los atomos de S. Si el tamano del programa incompleto compilado re-

sultante de dicha configuracion intermedia ya es mayor que el de la mejor solucion

actual, entonces podemos podar dicho nodo, y a la vez, todos sus descendientes,

ya que sera imposible obtener un programa que contenga los atomos visitados en

H, y que tenga un tamano menor al de la mejor solucion.

En aquellos casos en los que la funcion de fitness tiene en cuenta el tiempo de

ejecucion del programa especializado, entonces podemos hacer uso de un profiler

para aproximar el valor del componente estimado. Un profiler divide el tiempo

de ejecucion total del programa entre todos sus predicados. Cuando se asocia un

centro de coste a un predicado q, se acumula el tiempo de ejecucion total para

q, incluyendo todas las llamadas a otros predicados que no tengan un centro de

coste asociado, y que sean generadas desde q.

El principal problema que encontraremos al implementar esta tecnica es el

hecho de que el profiler necesita programas completos como entrada, mientras

que el algoritmo de evaluacion parcial no esta disenado de modo que sea posi-

ble obtener programas completos a partir de cualquier conjunto de atomos. Es

decir que a partir de una configuracion intermedia obtendremos un programa in-

completo en general. Una solucion simple y elegante es, dada una configuracion

intermedia 〈S, H〉, utilizar la definicion original para todos aquellos predicados

XXVIII

Page 29: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

que pertenezcan a S, ya que aun no se ha generado una version especializada

para ellos. Esto posibilitara la ejecucion de programas incompletos. Sin embargo,

el tiempo de ejecucion obtenido de este modo no sera una cota inferior del tiempo

de ejecucion de las configuraciones finales descendientes de dicha configuracion.

Para solucionar este segundo problema, proponemos asociar un centro de coste a

cada predicado del programa original, y otro centro de coste a la entrada princi-

pal del programa. De este modo, al ejecutar el programa especializado, el tiempo

obtenido por el profiler para aquellos predicados pertenecientes a H no incluira el

tiempo empleado en llamadas a predicados que no pertenezcan a H.

De este modo, el tiempo de ejecucion obtenido por el profiler para la entrada

principal sera una cota inferior del tiempo de ejecucion de cualquier solucion

alcanzable desde la configuracion actual, ya que estamos usando 0 como valor

estimado para la ejecucion de todos los atomos de Si. De este modo, si el tiempo

obtenido por el profiler para una configuracion intermedia ya es mayor que el

tiempo de la mejor solucion obtenida hasta el momento, podemos podar dicha

configuracion (y de este modo sus potenciales configuraciones sucesoras).

Notese que esta tecnica de ramificacion y poda se puede combinar con las

heurısticas descritas anteriormente. En este caso, obtendremos una solucion con

un valor de fitness el cual sera maximo entre aquellas configuraciones finales

consistentes con la abstraccion empleada.

Finalmente, en esta parte abordamos tambien la implementacion de un al-

goritmo voraz de evaluacion parcial poli-controlada, llamado evaluacion parcial

poli-controlada basada en oraculo, el cual recorre solo un camino del arbol de

PCPE. Para ello, dada una configuracion intermedia, un oraculo se ocupa de

determinar cual de las estrategias de especializacion del conjunto CS es la mas

apropiada para aplicarsele a dicha configuracion.

Este algoritmo tiene varias ventajas sobre el algoritmo basado en busqueda

descrito anteriormente. Por una parte, dado que recorremos solo un camino del

arbol, se genera solo un programa especializado, y de este modo, al igual que en

la evaluacion parcial tradicional, no es necesario el uso de un paso de evaluacion

para elegir uno de los programas especializados resultantes, como en el caso del

algoritmo basado en busqueda. Usualmente, este paso de evaluacion es la etapa

mas costosa del algoritmo. Por otra parte, el consumo de memoria es considerable-

mente menor que en el caso del algoritmo basado en busqueda, siendo equiparable

XXIX

Page 30: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

al consumo de memoria del algoritmo de evaluacion parcial tradicional. La des-

ventaja principal de este enfoque basado en oraculo es que no garantiza que el

programa especializado resultante sea un programa de fitness maximo.

Note sin embargo, que este enfoque solo es util en la practica si el oraculo toma

buenas decisiones, ya que algunos de los programas especializados obtenidos por

PCPE son mejores que los obtenidos por la evaluacion parcial tradicional, pero

otros son peores. Para ello, en esta tesis presentamos un oraculo empırico, cuyos

parametros son aproximados a partir de un conjunto de datos de entrenamiento.

Dichos datos son recolectados a partir de un conjunto de ejemplos de calibracion,

y convertidos en un programa logico con restricciones.

La idea basica del algoritmo es tomar una configuracion intermedia, generar

todos los posibles hijos de dicha configuracion a traves de la aplicacion de todas

las estrategias de especializacion del conjunto CS, y elegir el hijo mas prometedor

de acuerdo a un oraculo que emplea la informacion recolectada durante el proceso

de especializacion que da lugar a cada hijo para tomar dicha decision. Entre la

informacion recolectada podemos mencionar:

D: los pasos de derivacion que se han ejecutado durante el proceso de desple-

gado, y que no se ejecutaran por lo tanto en tiempo de ejecucion,

E: el numero de llamadas a predicados predefinidos y externos que han sido

evaluados durante el desplegado,

N: el numero de atomos cuya computacion es replicada en varias clausulas

como resultado de desplegados no deterministas y que seleccionan atomos

que no esten necesariamente mas a la izquierda,

C: una estimacion del crecimiento del codigo residual, computado como un

cociente entre el tamano del codigo especializado para el atomo seleccionado

A y el tamano de la definicion original del predicado pred(A),

S: una estimacion del tamano del codigo de aquellos atomos agregados a S en

el ultimo paso de PCPE, computado a partir de sus definiciones originales

en P .

La mayorıa de las estrategias de especializacion existentes, las cuales se enfo-

can en obtener programas especializados mas eficientes en tiempo de ejecucion,

XXX

Page 31: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

no tienen en cuenta los factores C y S, e intentan maximizar D y E, manteniendo

N en 0.

El oraculo empleado en este trabajo esta basado en una funcion lineal, i.e.,

Q = kD ∗ D + kE ∗ E + kN ∗ N + kC ∗ C + kS ∗ S, donde Q es una estimacion

de la calidad de cada una de las configuraciones hijas de la configuracion actual.

Aquel hijo cuyo valor Q sea mayor que el de sus hermanos, es seleccionado por el

oraculo como el hijo mas prometedor.

Con el proposito de calibrar los valores de las constantes ki que asignan un

peso especıfico a cada uno de los factores considerados durante el proceso de espe-

cializacion, hemos tomado un conjunto de programas de calibracion, construido

sus arboles de PCPE completos, y anotado cada nodo del arbol con el maximo

valor de fitness (mvf) correspondiente a los programas especializados que son

alcanzables desde cada configuracion. A partir de este arbol, hemos construido

un programa logico con restricciones, donde cada restriccion esta dada por las

relaciones entre los mvf de los hijos de cada configuracion. Como en general la

cantidad de restricciones que pueden ser generadas a partir un arbol de PCPE

es muy grande, hemos considerado un modelo mas simple que tiene en cuenta

solamente aquellas restricciones existentes en un camino de PCPE que lleve a un

programa especializado de fitness maximo. Luego, a traves del uso de un resolutor

de programas logicos con restricciones, hemos determinado los valores optimos de

las constantes ki para cada programa de calibracion. A continuacion hemos nor-

malizado dichos valores, forzando a que el valor absoluto de una de las constantes

sea 1, y finalmente hemos obtenido valores para cada constante a traves de la

media aritmetica de los valores normalizados de dichas constantes.

Los resultados experimentales muestran que, para funciones de fitness cons-

ciente de los recursos, este enfoque permite obtener programas especializados de

mucha mayor calidad que la evaluacion parcial tradicional, a un coste que es

un factor constante con respecto a la evaluacion parcial, a diferencia del coste

exponencial en el caso del algoritmo basado en busqueda.

XXXI

Page 32: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Parte V: Implementacion de la Evaluacion Parcial Poli-

controlada

Finalmente, en esta parte exploramos la implementacion actual del evaluador

parcial poli-controlado en Ciao, y su integracion en CiaoPP [55].

Para ello, mostramos una guıa de uso de la evaluacion parcial poli-controlada

en CiaoPP, comentando las diferentes opciones disponibles para usuarios prin-

cipiantes y expertos. Los usuarios principiantes solo necesitan especificar unos

pocos parametros a traves de una interfaz grafica con menus. Entre estos parame-

tros podemos mencionar la funcion de fitness a ser empleada (con el objetivo de

obtener programas especializados que sean eficientes de acuerdo a determinados

criterios), el tipo de algoritmo a ser empleado, y la agresividad deseada. Muchas

veces, una mayor agresividad proporcionara mejores resultados pero en algunos

casos se generara un mayor numero de soluciones candidatas, poniendo en peligro

la terminacion del algoritmo.

En el caso de los usuarios expertos, mostramos las opciones disponibles tam-

bien a traves de la interfaz grafica, y explicamos como ejecutar el algoritmo de

evaluacion parcial poli-controlada desde el interprete de comandos de Ciao, con-

figurando y combinando los multiples parametros disponibles en esta implemen-

tacion.

XXXII

Page 33: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Bibliografıa

[1] E. Albert, M. Hanus, and G. Vidal. A Practical Partial Evaluation Scheme

for Multi-Paradigm Declarative Languages. Journal of Functional and Logic

Programming, 2002(1), 2002.

[2] E. Albert, G. Puebla, and J. Gallagher. Non-Leftmost Unfolding in Partial

Evaluation of Logic Programs with Impure Predicates. In Proceedings of

the 15th International Symposium on Logic-based Program Synthesis and

Transformation (LOPSTR’05), number 3901 in Lecture Notes in Computer

Science. Springer-Verlag, April 2006.

[3] E. Albert and G. Vidal. The Narrowing-Driven Approach to Functional Lo-

gic Program Specialization. New Generation Computing, 20(1):3–26, 2002.

[4] M. Alpuente, M. Falaschi, and G. Vidal. Narrowing-driven Partial Eva-

luation of Functional Logic Programs. In H.R. Nielson, editor, Proceedings

of the European Symposium on Programming (ESOP’96), volume 1058 of

Lecture Notes in Computer Science, pages 45–61. Springer-Verlag, Berlin,

1996.

[5] Lars Ole Andersen. Partial Evaluation of C and Automatic Compiler Ge-

neration. In U. Kastens and P. Pfahler, editors, Proceedings of Compiler

Construction. 4th International Conference, volume 641 of Lecture Notes

in Computer Science, pages 251–257, Paderborn, Germany, 1992. Springer-

Verlag.

[6] Lars Ole Andersen. Program Analysis and Specialization for the C Pro-

gramming Language. PhD thesis, DIKU, University of Copenhagen, May

1994.

XXXIII

Page 34: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[7] K.R. Apt. Introduction to Logic Programming. In J. van Leeuwen, edi-

tor, Handbook of Theoretical Computer Science, volume B: Formal Model

and Semantics, pages 495–574. Elsevier, Amsterdam and The MIT Press,

Cambridge, 1990.

[8] K.R. Apt and R. Bol. Logic Programming and Negation: A Survey. Journal

of Logic Programming, 19&20, 1994.

[9] K. Benkerimi and P.M. Hill. Supporting Transformation for the Partial Eva-

luation of Logic Programs. In Journal of Logic and Computation, volume

3(5), pages 469–486, October 1993.

[10] Andrew Berlin and Daniel Weise. Compiling Scientific Code Using Partial

Evaluation. IEEE Computer, 23(12):25–37, 1990.

[11] R. Bol. Loop Checking in Partial Deduction. Journal of Logic Programming,

16(1&2):25–46, 1993.

[12] Anders Bondorf. A Self-Applicable Partial Evaluator for Term Rewriting

Systems. In J. Dıaz and F. Orejas, editors, Proceedings of the International

Joint Conference on Theory and Practice of Software Development (TAP-

SOFT’89), volume 352 of Lecture Notes in Computer Science, pages 81–95,

Barcelona, Spain, 1989. Springer-Verlag.

[13] Anders Bondorf. Automatic Autoprojection of Higher Order Recursive

Equations. Science of Computer Programming, 17(1-3):3–34, 1991.

[14] Antony F. Bowers and Corin A. Gurr. Towards Fast and Declarative Meta-

Programming. In K. R. Apt and F. Turini, editors, Meta-logics and Logic

Programming, pages 137–166. MIT Press, 1995.

[15] M. Bruynooghe. A Practical Framework for the Abstract Interpretation of

Logic Programs. Journal of Logic Programming, 10:91–124, 1991.

[16] M. Bruynooghe, D. De Schreye, and B. Martens. A General Criterion for

Avoiding Infinite Unfolding during Partial Deduction. New Generation

Computing, 1(11):47–79, 1992.

XXXIV

Page 35: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[17] F. Bueno, D. Cabeza, M. Carro, M. Hermenegildo, P. Lopez-Garcıa, and

G. Puebla. The Ciao Prolog System. Reference Manual. The Ciao System

Documentation Series–TR CLIP3/97.1, School of Computer Science, Tech-

nical University of Madrid (UPM), August 1997. System and on-line version

of the manual available at http://clip.dia.fi.upm.es/Software/Ciao/.

[18] F. Bueno, D. Cabeza, M. Hermenegildo, and G. Puebla. Global Analysis

of Standard Prolog Programs. In Proceedings of the European Symposium

on Programming (ESOP’96), number 1058 in Lecture Notes in Computer

Science, pages 108–124, Sweden, April 1996. Springer-Verlag.

[19] F. Bueno, P. Lopez-Garcıa, G. Puebla, and M. Hermenegildo. A Tutorial

on Program Development and Optimization using the Ciao Preprocessor.

Technical Report CLIP2/06, School of Computer Science, Technical Univer-

sity of Madrid (UPM), 28660 Boadilla del Monte, Madrid, Spain, January

2006.

[20] F. Bueno, P. Lopez-Garcıa, G. Puebla, and M. Hermenegildo. The Ciao Pro-

log Preprocessor. Technical Report CLIP1/06, School of Computer Science,

Technical University of Madrid (UPM), 28660 Boadilla del Monte, Madrid,

Spain, January 2006.

[21] B. Le Charlier, S. Rossi, and P. Van Hentenryck. Sequence Based Abs-

tract Interpretation of Prolog. Theory and Practice of Logic Programming,

2(1):25–84, 2002.

[22] B. Le Charlier and P. Van Hentenryck. Experimental Evaluation of a Ge-

neric Abstract Interpretation Algorithm for Prolog. ACM Transactions on

Programming Languages and Systems, 16(1):35–101, 1994.

[23] D. Cohen, M. Cooper, P. Jeavons, and A. Krokhin. Identifying Efficiently

Solvable Cases of Max CSP. Proceedings of the 21st Symposium on Theore-

tical Aspects of Computer Science (STACS’04) pages 152–163, Le Corum,

Montpellier, France, 2004.

[24] A. Colmerauer. Opening the Prolog-III Universe. In BYTE Magazine,

August 1987.

XXXV

Page 36: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[25] Charles Consel. A Tour of Schism: a Partial Evaluation System for Higher-

Order Applicative Languages. In Proceedings of the Symposium on Partial

Evaluation and Semantics-Based Program Manipulation (PEPM’93), pages

145–154, Copenhagen, Denmark, 1993. ACM Press.

[26] P. Cousot and R. Cousot. Abstract Interpretation: a Unified Lattice Mo-

del for Static Analysis of Programs by Construction or Approximation of

Fixpoints. In Fourth ACM Symposium on Principles of Programming Lan-

guages, pages 238–252, 1977.

[27] Stephen-John Craig and Michael Leuschel. Self-Tuning Resource Aware

Specialisation for Prolog. In Proceedings of the 7th ACM SIGPLAN Inter-

national Conference on Principles and Practice of Declarative Programming

(PPDP’05), pages 23–34, New York, NY, USA, 2005. ACM Press.

[28] O. Danvy, N. Hentze, and K. Malmkjær. Resource-Bounded Partial Eva-

luation. ACM Computing Surveys, 28(2):244–247, June 1996.

[29] M. Garcıa de la Banda, M. Hermenegildo, M. Bruynooghe, V. Dumor-

tier, G. Janssens, and W. Simoens. Global Analysis of Constraint Logic

Programs. ACM Transactions on Programming Languages and Systems,

18(5):564–615, September 1996.

[30] D. De Schreye, R. Gluck, J. Jørgensen, M. Leuschel, B. Martens, and

M.H. Sørensen. Conjunctive Partial Deduction: Foundations, Control, Algo-

rihtms, and Experiments. Journal of Logic Programming, 41(2&3):231–277,

1999.

[31] D. A. de Waal and J.P. Gallagher. Specialisation of a Unification Algo-

rithm. In T.P. Clement and K.-K. Lau, editors, Proceedings of the 1st

International Symposium on Logic-based Program Synthesis and Transfor-

mation (LOPSTR’91), pages 205–220, Manchester, UK, 1991.

[32] Saumya K. Debray. Profiling prolog programs. Software Practice and Ex-

perience, 18(9):821–839, 1983.

XXXVI

Page 37: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[33] S. K. Debray and N. W. Lin. Cost analysis of logic programs. ACM Tran-

sactions on Programming Languages and Systems, 15(5):826–875, Novem-

ber 1993.

[34] Saumya K. Debray. Resource-Bounded Partial Evaluation. In Proceedings

of the ACM Sigplan Symposium on Partial Evaluation and Semantics-Based

Program Manipulation (PEPM’97), pages 179–192. Amsterdam, The Net-

herlands, 1997. ACM Press.

[35] P. Deransart, A. Ed-Dbali, and L. Cervoni. Prolog: The Standard. Springer-

Verlag, 1996.

[36] N. Dershowitz and J.P. Jouannaud. Rewrite Systems In J. van Leeuwen,

editor, Handbook of Theoretical Computer Science, Vol. B, pages 243–320.

Elsevier, MIT Press, 1990.

[37] N. Dershowitz and J.P. Jouannaud. Rewrite Systems In J. van Leeuwen,

editor, Handbook of Theoretical Computer Science, Vol. B, pages 243–320.

Elsevier, MIT Press, 1990.

[38] Andrei P. Ershov. Mixed Computation: Potential applications and Pro-

blems for Study. Theoretical Computer Science, 18:41–67, 1982.

[39] J. Ferrante, K.J. Ottenstein, and J.D. Warren. The Program Dependence

Graph and Its Use in Optimization. ACM Transactions on Programming

Languages and Systems, 9(3):319–349, 1987.

[40] J. Gallagher. A System for Specialising Logic Programs. Technical Report

TR-91-32, University of Bristol, November 1991.

[41] J. Gallagher and M. Bruynooghe. Some Low-Level Transformations for

Logic Programs. In M. Bruynooghe, editor, Meta90 Workshop on Meta

Programming in Logic, pages 229–244, 1990.

[42] J. Gallagher and M. Bruynooghe. The Derivation of an Algorithm for Pro-

gram Specialisation. New Generation Computing, 9(1991):305–333, 1991.

XXXVII

Page 38: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[43] J. Gallagher and L. Lafave. Regular Approximation of Computation Paths

in Logic and Functional Languages. In O. Danvy, R. Gluck, and P. Thie-

mann, editors, Partial Evaluation, volume 1110, pages 115 – 136. Springer

Verlag Lecture Notes in Computer Science, 1996.

[44] J.P. Gallagher. Tutorial on Specialisation of Logic Programs. In Procee-

dings of the ACM Sigplan Symposium on Partial Evaluation and Semantics-

Based Program Manipulation (PEPM’93), pages 88–98.Copenhagen, Den-

mark, 1993. ACM Press.

[45] J.P. Gallagher and D.A. de Waal. Fast and Precise Regular Approxima-

tions of Logic Programs. In Pascal Van Hentenryck, editor, Proceedings of

the 11th International Conference on Logic Programming (ICLP’94), pages

599–613. MIT Press, 1994.

[46] R. Gluck, J. Jorgensen, B. Martens, and M.H. Sorensen. Controlling Con-

junctive Partial Deduction of Definite Logic Programs. Technical Report

CW 226, Departement Computerwetenschappen, K.U. Leuven, Belgium,

May 1996.

[47] V. Gouranton. Deriving Analysers by Folding/Unfolding of Natural Seman-

tics and a Case Study: Slicing. In Proceedings of the International Static

Analysis Symposium (SAS’98), pages 115–133, 1998.

[48] C. A. Gurr. A Self-Applicable Partial Evaluator for the Logic Programming

Language Godel. PhD thesis, Department of Computer Science, University

of Bristol, January 1994.

[49] C. A. Gurr. Specialising the Ground Representation in the Logic Program-

ming Language Godel. In Y. Deville, editor, Logic Program Synthesis and

Transformation. Proceedings of the 3rd International Symposium on Logic-

based Program Synthesis and Transformation (LOPSTR’93), Workshops in

Computing, pages 124–140, Louvain-La-Neuve, Belgium, 1994. Springer-

Verlag.

[50] Michael Hanus. The Integration of Functions into Logic Programming:

From Theory to Practice. Journal of Logic Programming, 19&20:583–628,

1994.

XXXVIII

Page 39: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[51] Michael Hanus. A Unified Computation Model for Functional and Logic

Programming. In Proceedings of the ACM Symposium on Principles of

Programming Languages (POPL’97), pages 80–93. ACM, 1997.

[52] Michael Hanus. Curry: An Integrated Functional Logic Language. Available

at:

http://www.informatik.uni-kiel.de/~curry/, 2000.

[53] M. Harman and R.M. Hierons. An Overview of Program Slicing. Software

Focus, 2(3):85–92, 2001.

[54] M. Hermenegildo, F. Bueno, G. Puebla, and P. Lopez-Garcıa. Program

Analysis, Debugging and Optimization Using the Ciao System Preproces-

sor. In Proceedings of the International Conference on Logic Programming

(ICLP’99), pages 52–66, Cambridge, MA, November 1999. MIT Press.

[55] Manuel V. Hermenegildo, German Puebla, Francisco Bueno, and Pedro

Lopez-Garcıa. Integrated Program Debugging, Verification, and Optimiza-

tion Using Abstract Interpretation (and The Ciao System Preprocessor).

Science of Computer Programming, 58(1–2):115–140, October 2005.

[56] Patricia Hill and John Gallagher. Meta-Programming in Logic Program-

ming. In Handbook of Logic in Artificial Intelligence and Logic Program-

ming, Vol. 5. Oxford Science Publications, Oxford University Press.

[57] J. E. Hopcroft and J. D. Ullman. Introduction to Automata Theory, Lan-

guages and Computation. Addison-Wesley, 1979.

[58] T. Horvath. Experiments in Partial Deduction. Master’s thesis, Departe-

ment Computerwetenschappen, K.U. Leuven, Belgium, 1993.

[59] N.D. Jones, C.K. Gomard, and P. Sestoft. Partial Evaluation and Automa-

tic Program Generation. Prentice Hall, New York, 1993.

[60] Neil D. Jones. Special Issue on Partial Evaluation. Journal of Functional

Programming, 3(3):251–387, 1993.

[61] Neil D. Jones. An Introduction to Partial Evaluation. ACM Computing

Surveys, Vol. 28(No. 3), September 1996.

XXXIX

Page 40: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[62] J. Komorowski. An Introduction to Partial Deduction. In A. Pettorossi,

editor, Meta92 Workshop on Meta Programming in Logic, Lecture Notes in

Computer Science 649, pages 49–69. Springer-Verlag, 1992.

[63] Eleftherios Koutsofios and Stephen C. North Drawing graphs with dot.

AT&T Bell Laboratories, October 1993. Revised version available at

http://www.graphviz.org/Documentation/dotguide.pdf.

[64] R. Kowalski and D. Kuehner. Linear Resolution with Selection Function.

Artificial Intelligence, 2:227–260, 1971.

[65] R. A. Kowalski. Predicate Logic as a Programming Language. In Jack

L. Rosenfeld, editor,Proceedings of the Sixth IFIP Congress (Information

Processing 74), pages 569–574, North-Holland, 1974.

[66] R. A. Kowalski. Logic as a computer language. In Proceedings Infotec State

of the Art Conference, Software Development: Management, June 1980.

[67] J.B. Kruskal. Well-Quasi-Ordering, the Tree Theorem, and Vazsonyi’s Con-

jecture. Transactions of the American Mathematical Society, 95:210–225,

1960.

[68] D.J. Kuck, R.H. Kuhn, D.A. Padua, B. Leasure, and M. Wolfe. Dependence

Graphs and Compiler Optimization. In Proceedings of ACM Symposium on

Principles of Programming Languages (POPL’81), pages 207–218. ACM

Press, 1981.

[69] J. Lam and Kusalik A. A Comparative Analysis of Partial Deductors for

Pure Prolog. Technical report, Department of Computational Science, Uni-

versity of Saskatchewan, Canada, May 1991. Revised April 1991.

[70] A.H. Land and A.G. Doig. An Automatic Method for Solving Discrete

Programming Problems. Econometrica, 28:497–520, 1960.

[71] M. Leuschel and M. Bruynooghe. Logic Program Specialisation Through

Partial Deduction: Control Issues. Theory and Practice of Logic Program-

ming, 2(4 & 5):461–515, July & September 2002.

XL

Page 41: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[72] M. Leuschel and S. Gruner. Abstract Conjunctive Partial Deduction Using

Regular Types and its Application to Model Checking. In Proceedings of

the 11th International Symposium on Logic-based Program Synthesis and

Transformation (LOPSTR’01), number 2372 in Lecture Notes in Computer

Science. Springer, 2001.

[73] M. Leuschel and B. Martens. Partial Deduction of the Ground Represen-

tation and its Application to Integrity Checking. In John Lloyd, editor,

Proceedings of ILPS’95, the International Logic Programming Symposium,

Portland, USA, December 1995. MIT Press. Extended version as Technical

Report CW 210, K.U. Leuven.

[74] M. Leuschel and B. Martens. Global Control for Partial Deduction Through

Characteristic Atoms and Global Trees. In Olivier Danvy, Robert Gluck,

and Peter Thiemann, editors, Proceedings of the 1996 Dagstuhl Seminar on

Partial Evaluation, Lecture Notes in Computer Science 1110, pages 263–

283, Schloß Dagstuhl, 1996.

[75] M. Leuschel and De Schreye. Logic Program Specialisation: How to be

More Specific. In Proceedings of the International Symposium on Program-

ming Languages, Implementations, Logics and Programs (PLILP’96), Lec-

ture Notes in Computer Science 1140, pages 137–151, 1996.

[76] M. Leuschel and M.H. Sørensen. Redundant Argument Filtering of Logic

Programs. In Proceedings of the 6th International Symposium on Logic-

based Program Synthesis and Transformation (LOPSTR’96), pages 83–103.

Lecture Notes in Computer Science 1207 83–103, 1996.

[77] M. Leuschel and G. Vidal. Forward Slicing by Conjunctive Partial Deduc-

tion and Argument Filtering. In Proceedings of the European Symposium on

Programming (ESOP’05), Lecture Notes in Computer Science 3444, pages

61–76. Springer-Verlag, Berlin, 2005.

[78] Michael Leuschel. Ecological Partial Deduction: Preserving Characteristic

Trees Without Constraints. In Maurizio Proietti, editor, Proceedings of

the 5th International Symposium on Logic-based Program Synthesis and

XLI

Page 42: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

Transformation (LOPSTR’95), Lecture Notes in Computer Science 1048,

pages 1–16, Utrecht, The Netherlands, September 1995. Springer-Verlag.

[79] Michael Leuschel. The ECCE Partial Deduction System

and the DPPD Library of Benchmarks. Obtainable via

http://www.ecs.soton.ac.uk/~mal, 1996-2002.

[80] Michael Leuschel. Advanced Techniques for Logic Program Specialisation.

PhD thesis, K.U. Leuven, May 1997.

[81] Michael Leuschel. On the Power of Homeomorphic Embedding for Online

Termination. In Giorgio Levi, editor, Proceedings of the International Static

Analysis Symposium (SAS’98), Lecture Notes in Computer Science 1503,

pages 230–245, Pisa, Italy, September 1998. Springer-Verlag.

[82] Michael Leuschel and Danny De Schreye. Towards Creating Specialised In-

tegrity Checks Through Partial Evaluation of Meta-Interpreters. In Procee-

dings of the ACM Sigplan Symposium on Partial Evaluation and Semantics-

Based Program Manipulation (PEPM’95), pages 253–263, La Jolla, Califor-

nia, June 1995. ACM Press.

[83] Michael Leuschel and Danny De Schreye. Constrained Partial Deduction

and the Preservation of Characteristic Trees. New Generation Computing,

16:283–342, 1998.

[84] Michael Leuschel, Bern Martens, and Danny De Schreye. Controlling Gene-

ralisation and Polyvariance in Partial Deduction of Normal Logic Programs.

ACM Transactions on Programming Languages and Systems, 20(1):208–

258, January 1998.

[85] J. W. Lloyd and J. C. Shepherdson. Partial Evaluation in Logic Program-

ming. The Journal of Logic Programming, 11:217–242, 1991.

[86] J.W. Lloyd. Foundations of Logic Programming. Springer, second, extended

edition, 1987.

[87] F. Lopez-Fraguas and J. Sanchez-Hernandez. TOY: A Multiparadigm De-

clarative System. In P.Narendran and M. Rusinowitch, editors, Proceedings

XLII

Page 43: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

of the 10th International Conference on Rewriting Techniques and Applica-

tions (RTA’99), pages 244–247. Springer Lecture Notes in Computer Scien-

ce 1631, 1999.

[88] B. Martens and D. De Schreye. Automatic Finite Unfolding Using Well-

Founded Measures. Journal of Logic Programming, 28(2):89–146, 1996.

Abridged and revised version of Technical Report CW180, Departement

Computerwetenschappen, K.U.Leuven, October 1993.

[89] John McCarthy, M. L. Minsky, N. Rochester, and C. E. Shannon. A Propo-

sal for the Dartmouth Summer Research Project on Artificial Intelligence.

Report, manuscript, MITAI, Cambridge, MA, August 1955.

[90] E. Mera. Development of a prolog profiler. Technical Report

CLIP13/2004.1, Technical University of Madrid, School of Computer Scien-

ce, UPM, September 2004.

[91] K. Muthukumar and M. Hermenegildo. Compile-time Derivation of Variable

Dependency Using Abstract Interpretation. Journal of Logic Programming,

13(2/3):315–347, July 1992.

[92] Claudio Ochoa and German Puebla. A Study on the Practicality of Poly-

Controlled Partial Evaluation. In Proceedings of the 15th Workshop on

Functional and (Constraint) Logic Programming(WFLP 2006), pages 123–

136. Madrid, Spain, November 2006.

[93] Claudio Ochoa and German Puebla. Poly-Controlled Partial Evaluation in

Practice. In Proceedings of the ACM Symposium on Partial Evaluation and

Program Manipulation (PEPM’07), pages 164–173. Nice, France, January

2007. ACM Press.

[94] C. Ochoa, G. Puebla, and M. Hermenegildo. Removing Superfluous Ver-

sions in Polyvariant Specialization of Prolog Programs. In Proceedings of

the 15th International Symposium on Logic-based Program Synthesis and

Transformation (LOPSTR’05), pages 80–97, number 3901 in Lecture Notes

in Computer Science. London, UK, April 2006. Springer-Verlag.

XLIII

Page 44: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[95] C. Ochoa, J. Silva, and G. Vidal. A Lightweight Approach to Program Spe-

cialization. In Proceedings of the IV Jornadas de Programacion y Lenguajes

(PROLE’04), pages 41–54. Malaga, Spain, 2004.

[96] C. Ochoa, J. Silva, and G. Vidal. Dynamic Slicing Based on Redex Trails. In

Proceedings of the ACM SIGPLAN 2004 Symposium on Partial Evaluation

and Program Manipulation (PEPM’04), pages 123–134. Verona, Italy, 2004.

ACM Press.

[97] C. Ochoa, J. Silva, and G. Vidal. Program Specialization Based on Dynamic

Slicing. In Proceedings of Workshop on Software Analysis and Development

for Pervasive Systems (SONDA’04), pages 20–31. Verona, Italy, 2004.

[98] Claudio Ochoa and German Puebla. A Study on the Practicality of Poly-

Controlled Partial Evaluation. In Proceedings of the 15th Workshop on

Functional and (Constraint) Logic Programming (WFLP’06), Electronic

Notes in Theoretical Computer Science. Elsevier, 2007. To appear.

[99] C. Ochoa, J. Silva, and G. Vidal. Lightweight Program Specialization via

Dynamic Slicing. In Proceedings of the Workshop on Curry and Functional

Logic Programming (WCFLP 2005), pages 1–7. ACM Press, 2005.

[100] C. Ochoa, J. Silva, and G. Vidal. A Slicing Tool for Lazy Functional Logic

Programs. In Proceedings of the 10th European Conference on Logics in

Artificial Intelligence (JELIA’06), pages 498–501. Springer Lecture Notes

in Computer Science 4160, 2006.

[101] Alberto Pettorossi and Maurizio Proietti. Transformation of Logic Pro-

grams: Foundations and Techniques. Journal of Logic Programming,

19/20:261–320, 1994.

[102] Alberto Pettorossi, Maurizio Proietti, and Sophie Renault. Enhancing Par-

tial Deduction by Unfold/Fold Rules. In John Gallagher, editor, Proceedings

of the 6th International Symposium on Logic-based Program Synthesis and

Transformation (LOPSTR’96), Lecture Notes in Computer Science 1207,

pages 146–168, Stockholm, Sweden, August 1996. Springer-Verlag.

XLIV

Page 45: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[103] Alberto Pettorossi, Maurizio Proietti, and Sophie Renault. Reducing Non-

determinism While Specializing Logic Programs. In Neil D. Jones, editor,

Proceedings of ACM Symposium on Principles of Programming Languages

(POPL’97), pages 414–427, Paris, France, January 1997.

[104] Steven Prestwich. The PADDY Partial Deduction System. Technical Re-

port ECRC-92-6, ECRC, Munich, Germany, 1992.

[105] Maurizio Proietti and Alberto Pettorossi. Unfolding — Definition — Fol-

ding, in this Order, for Avoiding Unnecessary Variables in Logic Programs.

In J. Maluszynski and M. Wirsing, editors, Proceedings of the Internatio-

nal Symposium on Programming Languages, Implementations, Logics and

Programs (PLILP’91), pages 347–g358, Passau, Germany, August 1991.

Springer-Verlag, Lecture Notes in Computer Science 528.

[106] G. Puebla, E. Albert, and M. Hermenegildo. Efficient Local Unfolding

with Ancestor Stacks for Full Prolog. In Proceedings of the 14th Interna-

tional Symposium on Logic-based Program Synthesis and Transformation

(LOPSTR’04), number 3573 in Lecture Notes in Computer Science, pages

149–165. Springer-Verlag, 2005.

[107] G. Puebla, F. Bueno, and M. Hermenegildo. An Assertion Language for

Constraint Logic Programs. In P. Deransart, M. Hermenegildo, and J. Ma-

luszynski, editors, Analysis and Visualization Tools for Constraint Pro-

gramming, number 1870 in Lecture Notes in Computer Science, pages 23–

61. Springer-Verlag, September 2000.

[108] G. Puebla and M. Hermenegildo. Implementation of Multiple Specialization

in Logic Programs. In Proceedings ACM SIGPLAN Symposium on Partial

Evaluation and Semantics Based Program Manipulation (PEPM’95), pages

77–87. ACM Press, June 1995.

[109] G. Puebla and M. Hermenegildo. Abstract Multiple Specialization and

its Application to Program Parallelization. Journal of Logic Programming.

Special Issue on Synthesis, Transformation and Analysis of Logic Programs,

41(2&3):279–316, November 1999.

XLV

Page 46: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[110] German Puebla and Claudio Ochoa. Poly-Controlled Partial Evaluation. In

Proceedings of the 8th ACM-SIGPLAN International Symposium on Prin-

ciples and Practice of Declarative Programming (PPDP’06). ACM Press,

July 2006.

[111] T. Reps and T. Turnidge. Program Specialization via Program Slicing. In

O. Danvy, R. Gluck, and P. Thiemann, editors, Partial Evaluation. Dagstuhl

Castle, Germany, February 1996, pages 409–429. Springer Lecture Notes in

Computer Science 1110, 1996.

[112] J. A. Robinson. A Machine Oriented Logic Based on the Resolution Prin-

ciple. Journal of the ACM, 12(23):23–41, January 1965.

[113] S. Russell and P. Norvig. Artificial Intelligence: A Modern Approach. Pren-

tice Hall, Englewood Cliffs, New Jersey, 1995.

[114] D. Sahlin. The Mixtus Approach to the Automatic Evaluation of Full

Prolog. In Proceedings of the North American Conference on Logic Pro-

gramming, pages 377–398. MIT Press, October 1990.

[115] D. Sahlin. Mixtus: An Automatic Partial Evaluator for Full Prolog. New

Generation Computing, 12(1):7–51, 1993.

[116] S. Schoenig and M. Ducasse. A Backward Slicing Algorithm for Prolog.

In Proceedings of the International Static Analysis Symposium (SAS’96),

pages 317–331. Springer Lecture Notes in Computer Science 1145, 1996.

[117] M.H. Sørensen and R. Gluck. An Algorithm of Generalization in Positive

Supercompilation. In Proceedings of the International Logic Programming

Symposium (ILPS’95), pages 465–479. The MIT Press, 1995.

[118] L. Sterling and E. Shapiro The Art of Prolog. MIT Press, 1986.

[119] G. Szilagyi, T. Gyimothy, and J. Maluszynski. Static and Dynamic Slicing

of Constraint Logic Programs. Journal Automated Software Engineering,

9(1):41–65, 2002.

[120] Frank Tip. A Survey of Program Slicing Techniques. Journal of Program-

ming Languages, 3:121–189, 1995.

XLVI

Page 47: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[121] Raf Venken and Bart Demoen. A Partial Evaluation System for Prolog:

Theoretical and Practical Considerations. New Generation Computing, 6(2

& 3):279–290, 1988.

[122] German Vidal. Forward Slicing of Multi-Paradigm Declarative Programs

Based on Partial Evaluation. In Proceedings of the 12th International Sym-

posium on Logic-based Program Synthesis and Transformation (LOPSTR

2002), pages 219–237. Springer Lecture Notes in Computer Science 2664,

2003.

[123] Philip Wadler. Deforestation: Transforming Programs to Eliminate Trees.

In H. Ganzinger, editor, Proceedings of European Symposium on Program-

ming (ESOP’88), volume 300 of Lecture Notes in Computer Science, pages

344–358, Nancy, France, 1988. Springer-Verlag.

[124] P.L. Wadler. Deforestation: Transforming Programs to Eliminate Interme-

diate Trees. Theoretical Computer Science, 73:231–248, 1990.

[125] D.H.D. Warren. Higher-Order Extensions to Prolog: Are They Needed? In

J.E. Hayes, Donald Michie, and Y-H. Pao, editors, Machine Intelligence 10,

pages 441–454. Ellis Horwood Ltd., Chicester, England, 1982.

[126] Daniel Weise, Roland Conybeare, Erik Ruf, and Scott Seligman. Automa-

tic online partial evaluation. In J. Hughes, editor, Functional Programming

Languages and Computer Architecture. Proceedings, volume 523 of Lectu-

re Notes in Computer Science, pages 165–191, Harvard University, 1991.

Springer-Verlag.

[127] M.D. Weiser. Program Slices: Formal, Psychological, and Practical Inves-

tigations of an Automatic Program Abstraction Method. PhD thesis, The

University of Michigan, 1979.

[128] M.D. Weiser. Program Slicing. IEEE Transactions on Software Enginee-

ring, 10(4):352–357, 1984.

[129] Thomas Williams and Colin Kelley gnuplot - An Interactive Plotting Pro-

gram. Available at http://www.gnuplot.info/docs/gnuplot.html

XLVII

Page 48: Evaluacion Parcial´ Policontrolada y su Aplicacion´ a la Especializacion de ...cliplab.org/~cochoa/pdf/thesis-cochoa-sp.pdf · 2007-03-26 · La calidad del c´odigo generado por

[130] W. Winsborough. Multiple Specialization Using Minimal-Function Graph

Semantics. Journal of Logic Programming, 13(2 and 3):259–290, July 1992.

XLVIII