Page suivantePage pr�c�denteTable des mati�res

2. Avez-vous besoin de l'assembleur?

Je ne veux en aucun cas jouer les emp�cheurs-de-tourner-en-rond, mais voici quelques conseils issus d'une exp�rience gagn�e � la dure.

2.1 Le Pour et le Contre

Les avantages de l'assembleur

L'assembleur peut vous permettre de r�aliser des op�rations tr�s bas niveau:

Les inconv�nients de l'assembleur

L'assembleur est un langage tr�s bas niveau (le langage du plus bas niveau qui soit au dessus du codage � la main de motifs d'instructions en binaire). En cons�quence:

Affirmation

En pesant le pour et le contre, on peut conclure que si l'assembleur est parfois n�cessaire, et peut m�me �tre utile dans certains cas o� il ne l'est pas, il vaut mieux:

M�me dans les cas o� l'assembleur est n�cessaire (par exemple lors de d�veloppement d'un syst�me d'exploitation), ce n'est qu'� petite dose, et sans infirmer les principes ci-dessus.

Consultez � ce sujet les sources du noyau de Linux: vous verrez qu'il s'y trouve juste le peu qu'il faut d'assembleur, ce qui permet d'avoir un syst�me d'exploitation rapide, fiable, portable et d'entretien facile. M�me un jeu tr�s c�l�bre comme DOOM a �t� en sa plus grande partie �crit en C, avec une toute petite routine d'affichage en assembleur pour acc�l�rer un peu.

2.2 Comment ne pas utiliser l'assembleur

M�thode g�n�rale pour obtenir du code efficace

Comme le dit Charles Fiterman dans comp.compilers � propos de la diff�rence entre code �crit par l'homme ou la machine,

``L'homme devrait toujours gagner, et voici pourquoi:

L'homme gagne parce qu'il peut utiliser la machine.''

Langages avec des compilateurs optimisateurs

Des langages comme ObjectiveCAML, SML, CommonLISP, Scheme, ADA, Pascal, C, C++, parmi tant d'autres, ont tous des compilateurs optimiseurs librement disponibles, qui optimiseront le gros de vos programmes, et produiront souvent du code meilleur que de l'assembleur fait-main, m�me pour des boucles serr�es, tout en vous permettant de vous concentrer sur des d�tails haut niveau, et sans vous interdire de gagner par la m�thode pr�c�dente quelques pourcents de performance suppl�mentaire, une fois la phase de conception g�n�rale termin�e. Bien s�r, il existe �galement des compilateurs optimiseurs commerciaux pour la plupart de ces langages.

Certains langages ont des compilateurs qui produisent du code C qui peut ensuite �tre optimis� par un compilateur C. C'est le cas des langages LISP, Scheme, Perl, ainsi que de nombreux autres. La vitesse des programmes obtenus est toute � fait satisfaisante.

Proc�dure g�n�rale � suivre pour acc�lerer votre code

Pour acc�l�rer votre code, vous ne devriez traiter que les portions d'un programme qu'un outil de mesure de temps d'�x�cution (profiler) aura identifi� comme �tant un goulot d'�tranglement pour la performance de votre programme.

Ainsi, si vous identifiez une partie du code comme �tant trop lente, vous devriez

Enfin, avant d'en venir � cette derni�re option, vous devriez inspecter le code g�n�r� pour v�rifier que le probl�me vient effectivement d'une mauvaise g�n�ration de code, car il se peut fort bien que ce ne soit pas le cas: le code produit par le compilateur pourrait �tre meilleur que celui que vous auriez �crit, en particulier sur les architectures modernes � pipelines multiples! Il se peut que les portions les plus lentes de votre programme le soit pour des raisons intrins�ques. Les plus gros probl�mes sur les architectures modernes � processeur rapide sont dues aux d�lais introduits par les acc�s m�moires, manqu�s des caches et TLB, fautes de page; l'optimisation des registres devient vaine, et il vaut mieux repenser les structures de donn�es et l'encha�nement des routines pour obtenir une meilleur localit� des acc�s m�moire. Il est possible qu'une approche compl�tement diff�rente du probl�me soit alors utile.

Inspection du code produit par le compilateur

Il existe de nombreuses raisons pour vouloir regarder le code assembleur produit par le compilateur. Voici ce que vous pourrez faire avec ce code:

La mani�re standard d'obtenir le code assembleur g�n�r� est d'appeller le compilateur avec l'option -S. Cela fonctionne avec la plupart des compilateur Unix y compris le compilateur GNU C (GCC); mais � vous de voir dans votre cas. Pour ce qui est de GCC, il produira un code un peu plus compr�hensible avec l'option -fverbose-asm. Bien sur, si vous souhaitez obtenir du code assembleur optimis�, n'oubliez pas d'ajouter les options et indices d'optimisation appropri�es!


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:15