• No se han encontrado resultados

Sistemas de Relaciones de Coste

9. El Sistema C OSTA

9.4. Sistemas de Relaciones de Coste

La siguiente fase en COSTAtransforma el programa ACR en un CRS, com- puesto por ecuaciones de la forma

C ( ¯x) = e + D1( ¯y1) + ··· + Dr( ¯yr) ,ϕ

donde C , D1, . . . , Dr son símbolos de relación (como los nombres de procedi-

miento); ¯x, ¯y1, . . . , ¯yr son variables;ϕ es una conjunción (escrita como conjun-

to) de restricciones lineales sobre esas variables; y e es una expresión de coste formada a partir de la siguiente gramática:

Expresión de Coste exp ::=bexp | oexp

Expresión Básica bexp ::= q | nat(l ) | logm(nat(l )+1) | mnat(l )−1

Expresión Compuesta oexp ::=exp+exp | exp∗exp | m´ax(exp1, . . . ,expn) donde q ∈ Q+, m > 1 ∈ Z+, l es una expresión lineal sobre las variables de la ecuación, ynat(l ) = m´ax(l ,0). Intuitivamente, esta ecuación indica que el cos- te de C , para la entrada ¯x, es e más el coste de cada Di para la entrada ¯yi. La

restricciónϕ especifica para qué valores de ¯x es aplicable la ecuación y qué relación hay entre las variables. Dado que un CRS se genera a partir de un pro- grama ACR, se puede pensar en C , D1, . . . , Dr como si fueran procedimientos no

deterministas y decir que C llama a D1, . . . , Dr.

Las ecuaciones con el mismo lado izquierdo C ( ¯x) definen una relación C ( ¯x),

a la que llamamos relación de coste (Cost Relation o CR). Así, un CRS contiene varias CRs. Si una CR solo usa un símbolo de relación, Di= C para 1 ≤ i ≤ r , se

dice que es una CR aislada.

La transformación de la ACR en el CRS proyecta cada procedimiento p( ¯x, ¯y)

de la ACR a una CR p( ¯x) en el CRS, la cual tiene las mismas entradas ¯x, pero sin

las salidas ¯y. Esto se hace transformando cada regla ACR “p( ¯x, ¯y) ← a1, . . . , an

en una ecuación “p( ¯x) = e + q1( ¯w1) + ··· + qn( ¯wn),ϕ”, donde:

1. la expresión de coste e es la suma de todas las expresiones eique aparecen

en las anotacionesacquire(e) de la regla ACR;

2. cada llamada qj( ¯wj, ¯zj) en la regla ACR rule se transforma en una llamada

qj( ¯wj) en la ecuación, con las mismas entradas pero sin las salidas; y

3. ϕ contiene todas las restricciones lineales en la regla ACR.

En el segundo paso, cuando qj( ¯wj, ¯zj) tiene al menos una variable de salida, al

quitarla se pierde información que puede ser crucial para inferir una UBF. Para reducir el efecto de esta pérdida, COSTA usa un análisis de valores interpro-

120 CAPÍTULO 9. EL SISTEMA COSTA

inSort (l0) = for (l0, i2) {i2= 1}

for (l0, i0) = 0 {i0≥ l0}

for (l0, i0) = insert (i0) + for (l0, i2) {i0+ 1 ≤ l0, i2= i0+ 1}

insert (i0) = 2 + whilea(i0) {}

whilea( j0) = 0 { j0≤ 0}

whilea( j0) = 1 + whileb( j0) { j0≥ 1}

whileb( j0) = 0 {}

whileb( j0) = 1 + whilea( j2) { j2= j0− 1}

Figura 9.6: Sistema de Relaciones de Coste (CRS) para el métodoinSort.

cedural1que calcula para cada procedimiento de la ACR una post condición, y ésta se añade aϕ para compensar la eliminación de las variables de salida. Dicha post condición es una conjunción de restricciones lineales.

Ejemplo 9.4. La Figura 9.6 muestra el CRS generado desde el programa ACR de

la Figura 9.5. El CRS define cinco CRs en ocho ecuaciones. En cada ecuación, la expresión de coste coincide con las anotaciones de coste de la regla correspon- diente, siendo 2 para insert, 1 para las reglas recursivas de whileay whileb, y 0

en el resto; las llamadas son como las de la ACR; y las restricciones son las que aparecen en la regla. Para este ejemplo no hace falta usar el análisis de valores porque ningún procedimiento de la ACR tiene variables de salida. 

Semántica del CRS

La semántica del CRS se basa en la noción de árbol de evaluación [5]. De- notemos un árbol (quizá infinito) como node(q, 〈T1, . . . , Tk〉), donde q ∈ Q+ es

el valor de la raíz y T1, . . . , Tkson subárboles. Dado una C R C y unos valores de

entrada ¯v, se dice que node(ve, 〈T1, . . . , Tk〉) es un árbol de evaluación para C ( ¯v)

si y solo si existe una ecuación “C ( ¯x) = e +Pk

j =1Dj( ¯yj),ϕ” y una asignación σ

para las variables de esa ecuación tal que:

1. σ( ¯x) = ¯v y σ satisface ϕ;

2. e se evalúa a veen la asignaciónσ; y

3. cada Ti es un árbol de evaluación para C (σ( ¯yi)).

Intuitivamente, si se ve C como un procedimiento, un árbol de evaluación pue- de verse como un árbol de recursión, donde la llamada C ( ¯v) se evalúa como

sigue: se coge una ecuación de C y una asignaciónσ que satisface ϕ; se evalúa

1La noción de análisis de valor está relacionada con el análisis de tamaño, el cual infiere

relaciones no entre los valores de las variables numéricas sino entre los tamaños de estructuras de datos.

9.4. SISTEMAS DE RELACIONES DE COSTE 121 inSort(4) for(4, 1) for(4, 2) for(4, 3) for(4, 4) insert(1) 2 whilea(1) 1 insert(2) 2 whilea(2) 1 insert(3) 2 whilea(3) 1 whileb(1) whileb(2) whilea(2) whilea(1) whilea(0) 1 1 whileb(1) 1 whileb(2) 1 whileb(3) 1

Figura 9.7: Árbol de Evaluación para una llamada a la CR inSort de la Figura 9.6

e a ve, y se construye un árbol para cada C (σ( ¯yi)). En un árbol de evaluación, las

hojas corresponden a aplicaciones de las ecuaciones no recursivas y los nodos internos a aplicaciones de las ecuaciones recursivas. Un árbol de evaluación puede ser infinito. A causa del indeterminismo en los pasos anteriores, C ( ¯v)

puede tener varios árboles de evaluación.

Se denota con Trees(C ( ¯v)) el conjunto de todos los árboles de evaluación pa-

ra C ( ¯v), y el conjunto de todos los posibles costes por Answers(C ( ¯v)) = {Sum(T ) |

T ∈Trees(C ( ¯v))}, dondeSum(T ) es la suma de todos los nodos de T . Una función

C+(o C) es una UBF (o LBF) para la CR C si y solo si para cualquier entrada ¯v

y c ∈ Answers(C ( ¯v)), se cumple que C+( ¯v) ≥ c (o bien C−( ¯v) ≤ c).

Ejemplo 9.5. La Figura 9.7 muestra un árbol de evaluación para una llamada

a inSort(4) en el CRS de la Figura 9.6. Cada rectángulo representa una llamada en el CRS con unos valores de entrada, cada círculo indica el coste (ve) añadido

por la ecuación usada para resolver la llamada; y las aristas indican llamadas a otras CRs. El coste de este árbol de evaluación es 11, que es la suma de todos

los círculos. 

La transformación de la ACR en un CRS es correcta porque cada para cada traza ACR existe un árbol de evaluación con el mismo coste [10]. Por tanto, una UBF o LBF válida para el CRS también lo es para el programa ACR.

122 CAPÍTULO 9. EL SISTEMA COSTA

5 Cotas Superiores en Forma Cerrada

En el último paso COSTAresuelve el CRS generando una UBF o LBF para ca-

da CR. Para ello, usa el subsistema PUBS[5, 14]. Se describen cómo se calculan las UBFs. El cálculo de las LBFs se comenta brevemente al final del capítulo, ya que no es relevante para la tesis.

El procedimiento de resolución de PUBSestá diseñado para utilizar CRSs en los que todas las recursiones son directas, es decir, no existe recursión mutua. Para resolver un CRS que tiene recursión mutua, PUBSprimero lo transforma

a recursión directa [85, 139]. Para realizar la transformación, se considera cada grupo de CRs mutuamente recursivas, que coinciden con las SCC recursivas en el grafo de llamadas del CRS, y después se despliegan todas las CRs en el grupo en una de ellas.

Ejemplo 9.6. Consideremos el CRS de la Figura 9.6, y su correspondiente grafo

de llamadas:

inSort for insert whilea whileb

Este grafo tiene dos SCCs recursivas: una para la CR for, la cual ya está en re- cursión directa, y otra para las CRs whileay whileb, las cuales son mutuamente

recursivas. Para transformar éstas a recursión directa, se despliegan las ecua- ciones de whileben las de whilea. Al hacerlo se obtiene una nueva definición

de la CR whilea:

whilea( j0) = 0 { j0≤ 0}

whilea( j0) = 1 { j0≥ 1}

whilea( j0) = 2 + whilea( j2) { j0≥ 1, j2= j0− 1}

La primera ecuación es como la primera ecuación de whilea. La segunda y ter-

cera ecuaciones se obtienen de la segunda ecuación del antiguo whilea, al des-

plegar la llamada a whilebusando la primera y segunda ecuaciones de whileb,

respectivamente. La expresión de coste en la tercera nueva ecuación es la suma de las expresiones de coste de las ecuaciones de whilea y whileb, y sus restric-

ciones son las de las ecuaciones recursivas de ambas CRs. 

Supongamos ahora que el CRS ya está en recursión directa. El procedimien- to de PUBSes un proceso iterativo, que resuelve todas las CRs de una en una. En cada iteración se resuelve una CR aislada en una UBF, que luego se substituye en cualquier llamada a esa CR, generando así más CRs aisladas. Este proceso se repite hasta que todas las CRs están resueltas. Nótese que un CRS con recursión directa siempre hay al menos una CR aislada.

Documento similar