| | 1. Quants blocs bàsics trobem en el següent programa CoSeL?
Var a;
a=5;
Fun f(x,y) = > {
do {
print(x*3);
{
a=(x-y)/2;
a=a+1;
}
if(a>10) {
x=x+1;
}
Var tmp;
tmp = x * 20;
}
while(x < 100);
tmp;
}
|
| | 8 |
| | 6 |
| | 5 |
| | 7 |
| | Cap de les anteriors |
| | No contesto... |
| |
| | 2. Quina seqüència d'optimitzacions es pot aplicar per passar del programa original al programa optimitzat següent?
| Programa original: | Programa optimitzat: |
var a;
var b;
a=10;
x=(((a*6)+0/1);
if(x > a) {
var e;
e=15;
x=(10*3);
do {
var h;
h=(5-55*1)/1;
y=(e-(10+b)+f(x));
a=(1*a-1+y);
} while(a < h)
}
|
var a;
var b;
a=10;
x=60;
if(60 > 10) {
var e;
e=15;
x=30;
var _tmp0;
_tmp0 = (5-b);
do {
var h;
h=-50;
y=(f(x)+_tmp0);
a=((-1+y)+a);
} while(a < -50)
}
|
|
| | Folding → RedPot → RedFree → PropCtants → Folding |
| | RedPot → RedFrec → Folding → PropCtants |
| | Folding → PropCtants → Folding → RedFrec → PropCtants → Folding |
| | a i c |
| | Cap de les anteriors |
| | No contesto... |
| |
| | 3. En la pràctica de Folding... |
| | Fem la búsqueda de termes i factors de manera totalment independent. |
| | Primer busquem termes, i després factors. |
| | Les funcions de Folding, BuscarTermes i BuscarFactors es criden recursivament entre elles. |
| | a i b |
| | Cap de les anteriors |
| | No contesto... |
| |
| | 4. Quin d'aquests arbres sintàctics de CoSeL són incorrectes? |
| | Apply(InstrComp, Apply(\=,b,3), Apply(f,b,2, Apply(\*,b,5)) ) |
| | Apply(Let_in, Apply(\=, _tmp, Apply(\*,b,8)), Apply(Print, _tmp, 2) ) |
| | Apply(If_Else, Apply(\>, a, 0), Apply(\=a, 0), Apply(\=,a,Apply(\-,a,1)) ) |
| | Apply(\;, Apply(\=, h, 4), Apply(\;, Apply(\=, nota, Apply(\+, nota, h)), Apply(\=, h, nota))) |
| | Tots els anteriors són incorrectes. |
| | No contesto... |
| |
| | 5. En la propagació de constants si tenim en compte que les crides a funcions poden modificar les variables globals, el següent programa quedaria optimitzat com...
Programa original:
Fun f(x,y) => {
var a;
a=15;
b=25;
x = b + f(a);
(a*b*c);
}
|
| | Fun f(x,y) => {var a; a=15; b=25; x=25+f(a); (a*25*c);
} |
| | Fun f(x,y) => {var a; a=15; b=25; x=25+f(15); (15*25*c);
} |
| | Fun f(x,y) => {var a; a=15; b=25; x=25+f(15); (15*b*c);
} |
| | Fun f(x,y) => {var a; a=15; b=25; x=b+f(a); (a*b*c);
} |
| | Cap de les anteriors |
| | No contesto... |
| |
| | 6. En la divisió de blocs bàsics... |
| | Un cop feta la divisió en blocs bàsics havíem de recórrer l'arbre sintàctic per tal d'aplicar l'algorisme de la propagació de constants. |
| | Utilitzàvem un procediment recursiu que s'encarregava de recórrer l'arbre sintàtic en busca d'instruccions que provoquessin un canvi de bloc bàsic. |
| | La funció BasicBlocks retorna una llista de llistes d'apuntadors a les intruccions del programa necessàries per aplicar Propagació de Constants. |
| | b i c. |
| | Totes les anteriors. |
| | No contesto... |
| |
| | 7. En la Reducció de Freqüència: |
| | Trèiem fora del bucle les subexpressions aritmètiques, booleanes i de comparació, minimals que no contenen cap variable modificada en el bucle. |
| | Trèiem fora del bucle les subexpressions aritmètiques, booleanes i de comparació, maximals que no contenen cap variable modificada en el bucle. |
| | Les expressions invariants de bucle no contenen crides a funcions, operacions de comparació, operacions booleanes, ni assignacions, i s'executarien en totes les iteracions del bucle si no s'hagués aplicat l'optimització |
| | Cal aplicar vàries vegades en un mateix bucle aquesta optimització per tal d'optimitzar el programa al màxim |
| | a i d |
| | No contesto... |
| |
| | 8. En la reducció de freqüència... |
| | Les expressions invariants que trèiem fora dels bucles while i do_while s'avaluen sempre, però un sol cop. |
| | Els bucles do_while es transformen en bucles while. |
| | Cal recórrer el cos del bucle com a mínim dues vegades. |
| | Els bucles while es mantenen com a bucles while. |
| | Cap de les anteriors. |
| | No contesto... |
| |
| | 9. La reducció de Potència du a terme la següent transformació: |
| | a+a → a << 1 |
| | a/1 + 0 → a |
| | (3-0) + (5*1) → 8 |
| | a i b |
| | Totes les anteriors |
| | No contesto... |
| |
| | 10. En la reducció de potència... |
| | La substitució d'expressions tipus <expr>*num no es pot aplicar si <expr> conté crides a funcions. |
| | S'aplica als blocs bàsics. |
| | Pot perjudicar el Folding. |
| | Fem servir la instrucció let_in perquè així avaluem <expr> una única vegada. |
| | c i d. |
| | No contesto... |
| |