Architecture matérielle et logicielle des ordinateurs (S1825)

MINES ParisTech, cycle ingénieur civil, 3ème année

Georges-André Silber (CRI/ENSMP)

2010/2011

Projet d'optimisation de code assembleur/C

Mise en place

Vous aurez besoin pour ce projet d'une machine avec un processeur de la famille x86 et d'un environnement de développement comprenant GCC.

Vous devez tout d'abord récupérer l'archive compressée de ce projet et la décompresser à l'endroit de votre choix. Cette archive contient un répertoire optimisation contenant les fichiers suivants:

main.c
transfo.c

ainsi qu'un sous-répertoire data contenant les fichiers:

image.pgm
image2.pgm
image3.pgm
courbe.pgm
courbe2.pgm
courbe3.pgm
res.pgm
res2.pgm
res3.pgm

Obtention du code exécutable

Pour construire un exécutable s'appelant transfo, en utilisant la version C (transfo.c) placez vous dans le répertoire optimisation et tapez la commande :

gcc -o transfo transfo.c main.c

Pour construire un exécutable transfo, en utilisant la version assembleur (transfo.s) placez vous dans le répertoire optimisation et tapez la commande :

gcc -o transfo transfo.s main.c

Pour générer un code assembleur depuis une version C et ensuite travailler sur cette version assembleur, il faut taper (pour obtenir transfo.s):

gcc -S transfo.c

Description du travail à faire

Le but de ce projet est d'optimiser le code assembleur transfo.s et/ou transfo.c afin que les appels au programme avec les paramètres suivants :

./transfo data/image.pgm data/courbe.amp output.pgm
./transfo data/image2.pgm data/courbe2.amp output2.pgm
./transfo data/image3.pgm data/courbe3.amp output3.pgm

affichent le nombre de cycles machine consommés les plus petits possibles.

Vous devrez donc transformer le code assembleur transfo.s et/ou transfo.c afin de le rendre le plus efficace possible. Vous pouvez faire toutes les transformations que vous voulez et utiliser toutes les instructions que vous voulez, mais vos transformations doivent préserver le résultat du programme. Il est à noter que lors de l'évaluation du projet votre programme sera éventuellement testé avec un autre fichier 'image4', ce qui vous empêche de faire un programme spécialisé qui se contenterait de produire un résultat sans aucun calcul.

Vous pouvez vérifier que votre résultat est correct avec :

diff data/res.pgm output.pgm
diff data/res2.pgm output2.pgm
diff data/res3.pgm output3.pgm

Vous n'avez pas le droit de modifier main.c. Vous pouvez faire appel à d'autre bibliothèques si vous le désirez. Vous pouvez également ajouter des fichiers sources...

La date limite de remise de votre projet est le 14 janvier 2011 à 23h59. Vous devez me rendre pour cette date :

Il est à noter que ce projet est strictement personnel, même si il est bien entendu qu'il n'est pas interdit d'échanger des idées !

Manuels Intel

http://www.intel.com/products/processor/manuals.