3.3.4 Exemple d'illustration :
Pour faciliter aux lecteurs de ce mémoire la
compréhension des fichiers utilisés par notre application, nous
donnons ci-après un exemple:
Fichier NBTRACES : on suppose que dans
son contenu il y'a la valeur 2, c'est-àdire que l'algorithme à
implémenter en Hardware inclut deux traces:
Fichier TRACE1 :
1 ADD ADD MULT RSHIFT FIN
2 MULT MULT MULT LSHIFT FIN
3 MULT MULT MULT MULT MULT FIN
4 ADD COMP COMP COMP FIN
Ceci veut dire que lors de l'exécution de la trace 1 de
l'algorithme, 2 additions, une multiplication et un décalage à
droite seront initialement exécutés en parallèle, au
1er ?cycle?. Noter que dans notre contexte, le mot cycle signifie
juste un groupe d'opérations à exécuter en
parallèle.
Fichier TRACE2 :
1 ADD ADD MULT RSHIFT FIN
2 MULT MULT MULT MULT MULT MULT MULT MULT LSHIFT FIN
3 MULT MULT RSHIFT RSHIFT MULT FIN
4 ADD COMP COMP MULT FIN
5 MULT ADD RSHIFT LSHIFT COMP FIN
Fichier DONNEES :
ADD 4 2 >Nombre de combinaisons= 42=16.
MULT 5 8 >Nombre de combinaisons=
58=390625.
COMP 6 3 >Nombre de combinaisons= 63=216.
AND 3 0 >Nombre de combinaisons= 3°=1.
RSHIFT 7 2 >Nombre de combinaisons= 72=49.
LSHIFT 7 1 >Nombre de combinaisons= 71=7.
Nombre d'instances de cet opérateur dans la partie
opérative Nombre d'instances de cet opérateur dans la
bibliothèque
Le nombre total de combinaisons est alors :
16 * 390625 * 216 * 1 * 49 * 7=
463.05*109, c'est à dire 463
milliards et 50 millions de combinaisons à explorer pour ce simple
exemple.
Pour un cas réel, le nombre de combinaisons serait
énorme et rendrait impossible une affectation manuelle d'instances aux
opérateurs du système à concevoir. D'où
l'intérêt de développer un outil d'aide à rendre
possible cette affectation de sorte à satisfaire les contraintes
fixées. Néanmoins, nous rappelons que même avec un
calculateur, la complexité algorithmique de ce problème n'est pas
polynomiale et nécessite une méthode à base d'une
heuristique ou d'une méta heuristique.
Nous rappelons aussi que dans le cadre de ce mémoire,
nous développons la méthode exhaustive dans un double but de
l'utiliser quand le temps CPU le permet (la solution obtenue est alors exacte)
ou pour servir de repère durant le développement de la
méthode approchée.
3.4 Conclusion
Ce chapitre a permis de montrer les détails techniques
de notre méthode (algorithmes, structures de données et formats
des enregistrements des fichiers utilisés). Nous avons notamment
utilisé la récursivité pour des fins d'efficacité.
Néanmoins, ceci nous a demandé de prendre un certain nombre de
précautions afin d'éviter que l'exécution ne boucle
indéfiniment, ou qu'elle se déroule autrement que le demande la
logique de l'application. Ces précautions ont notamment porté sur
les tests d'arrêt et sur la distinction des variables globales de celles
qui sont locales. Nos algorithmes ont été testés avec
succès sur des jeux de données assujettis à des
contraintes différentes comme le montre le chapitre qui suit.
|