3.3.3 Algorithmes :
3.3.3.1 Algorithme pour la fonction récursive
configuration() :
Cet algorithme détermine la surface, le temps et la
consommation d'énergie d'une configuration donnée. Ces
configurations sont déterminées de manière
récursive où chacune d'elles est composée de Ni instances
de chaque opérateur i utilisé dans le circuit. Un groupe de Ni
instances est constitué en considérant tous les cas possibles et
en se basant sur les nombres d'instances de cet opérateur en
bibliothèque et dans le circuit à concevoir.
Variable : ptr1 : pointeur de type COMB_TYP_OP ; Ptr11 : pointeur
de type INSTANCE ; surface_partielle : réel ;
DEBUT
surface_partielle :=surface ;
Si (ptr==0)
Alors {
// Faire appel à la fonction calculer_S_T_P() qui permet
de calculer la surface, le // temps et la puissance d'une configuration
calculer_S_T_P (head_comb_ops) ;
flag :=1 ;
surface :=0 ;
return ;
}
Fsi
Afficher (`' configuration : ptr = `', ptr-)operateur),
Si (flag ? 0)
Alors
ptr_svg :=ptr_svg-)prev ;
Fsi
pour (ptr1:=ptr1-)head ; ptr1? 0 ; surface=surface_partielle,
maj_dp(ptr,ptr1),
maj2_dp(ptr->next), ptr1=ptr1->next)
Faire {
ptr11:=ptr1-)head ;
//appel de fonction surface_temp_puissance
surface_temp_puissance (ptr11,ptr-)operateur) ;
Si (flag==0)
Alors {
Allocate (ptr_svg) ; // Allocation de l'espace mémoire
pour le pointeur ptr_svg ptr_svg-)operation := ptr-)operateur ;
ptr_svg-)next := 0 ;
ptr_svg-)next := 0 ;
//Faire appel a la fonction inserer4
inserer4 (ptr_svg) ;
}
Fsi
configuration (ptr-)next) ;// appel récursif
}
Ffaire
ptr_svg := ptr_svg-)next ;
ptr := ptr-)prev ;
FIN
3.3.3.2 Algorithme qui calcule la surface, la vitesse et la
puissance d'une configuration :
La détermination de la surface, du temps et de la
consommation d'énergie d'une configuration donnée sera
ultérieurement expliquée de manière simple et claire
à travers un exemple.
calculer_S_T_P (variable : head_comb_ops : pointeur tête
sur la structure 7 COMB_OPS) :
Variables : ptr2 : pointeur sur la structure COMB_OPS ;
max_delai, max_puissance, delai_moyen, puissance_moyenne :
réel ;
fp, fp1 : Fichier ;
i, num_cycle : entier ;
ch_temp [4], fich_dp [20], mot [20] : chaîne de
caractère ;
c : caractère ;
t_max, energie, e : réel ;
DEBUT max_delai := -1 ;
max_puissance := -1 ;
delai_moyen := 0 ;
puissance_moyenne := 0 ;
pour (i:=1 ; i = nb_traces ; i++)
Faire {
Ecrire la valeur de i dans la chaine ch_temp ;
Ecrire `' DP `' dans la chaine fich_dp;
Concaténer fich_dp et ch_temp ; // concaténation
dans la chaine fich_dp
//ouvrir le fichier fp en lecture
fp :=ouvrir (fich_dp, en lecture) ;
temps := 0 ;
energie := 0 ;
Tant que non fin de fichier pointé par fp
Faire {
t_max := -1 ;
Lecture (fp, num_cycle, mot) ;
Tant que (mot ? `' FIN `')
Faire {
Si (mot ? `' # `')
Alors {
ouvrir le fichier mot en lecture ; // ce fichier est
pointé par fp1
lire à partir de ce fichier s, t et e // s, t et e sont la
surface, le temps et la
// consommation d'énergie d'une instance donnée
Fermer ce fichier;
Si (t > t_max)
Alors
t_max :=t ;
Fsi
energie :=energie+e ;
}
Fsi
lire à partir du fichier pointé par fp la
chaîne de caractères suivante
// cette chaîne indique le nom d'une instance
}
Ffaire
Faire un saut de ligne dans le fichier ponté par fp ;
temps := temps + t_max ;
}
Ffaire
puissance :=energie / temps ;
Si (max_delai < temps)
Alors
max_delai :=temps ;
Fsi
Si (max_puissance < puissance) Alors
max_puissance :=puissance ;
Fsi
delai _moyen :=delai_moyen + max_delai ;
puissance_moyenne := puissance_moyenne + max_puissance ;
fermer le fichier pointé par fp ;
}
Ffaire
delai_moyen :=delai_moyen / nb_traces ;
puissance_moyenne := puissance_moyenne / nb_traces ;
Si (surface <= Sf ET max_delai <= Tf ET max_ puissance
<= Pf)
Alors {
Afficher (`'SUCCES : surface:= , max_delai:= , max_ puissance:=
`',surface, max_delai, max_puissance) ;
Afficher (`' delai_moyen:= , puissance_moyenne:= `', delai_moyen,
puissance_moyenne) ;
Afficher (`' Utiliser les instances d'operateurs se trouvant dans
les fichiers DP `') ; Invoquer Linux pour déterminer le temps CPU de
cette exécution et le sauvegarder dans le fichier T_CPU_AFFECT ;
exit() ; }
Sinon
Afficher (`'Echec : Contrainte(s) non satisfaite(s) avec cette
combinaison `') ;
Fsi
FIN
|