Chronoklazm | Hello,
Voila je suis entrain d'essayer de comprendre certaines optimisations possibles sur une boucle
- variable d'induction simple : dont la valeur suit une progression arithmetique dans une boucle par exemple i = i + 10
- variable d'induction dépendante : dont le calcul dans la boucle est une fonction linéaire d'une variable d'induction simple i : i * k1 + k2
- réduction de force : si j= c1 * i + c2 et que i est une variable
d'induction simple i = i + c3 alors j progresse de c1 * c3
Bon alors voila un code on s'en fout de ce qu'il fait :
Code :
- int p, q, r, t, a, i, b, c, min, max;
- p=1;
- q=2;
- r=3;
- t = 1;
- a = 10;
- i = 1;
- b = 1;
- c = 1;
- min = 1;
- max = 4;
-
- // VERSION SANS OPT
- for(i = min ; i <= max; i=i+3){
- t = a * i;
- p = p+t;
- q = q+b*t;
- r = r+c*p;
- printf("t = %d, p = %d, q = %d, r = %d\n", t, p, q, r);
- }
- // VERSION OPT
- if( min <= max ) {
- t = a*min;
- p = p + t;
- q = q + b * t;
- r = r + c * p;
- for(i = min+3 ; i <= max ; i += 3) {
- t += 3*a;
- p = p + t;
- q = q + b * t;
- r = r + c * p;
- }
- }
-
- printf("t = %d, p = %d, q = %d, r = %d\n", t, p, q, r);
|
A priori ca à l'air bon ...
Bon ca c'était pour éviter de faire la multiplication a * i .
Par contre pour eviter les autres multiplications je sais pas si c'est possible ... ---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
|