Optimiser un code en C

serom00 Messages postés 5 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 12 décembre 2005 - 12 déc. 2005 à 07:01
kaervas Messages postés 51 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 19 avril 2008 - 13 déc. 2005 à 21:19
Bonjour,

Je cherche a optimiser mon code C.

J'utilse VC++7

Mais je me pose pleins de questions:
Tout d'abord je voudrai savoir si quelqu'un connaitrai un bon tutorial sur la facon de coder: Du genre: les operateurs qu'ils faut eviter, si il vaut mieu utiliser des variables globales ou locales,..., etc. J'ai deja chercher sur le net, mais j'ai rien trouver de satisfaisant.
Ou si vous avez simplement des conseils, je suis interesse aussi.

Ensuite je voudrai savoir si c'est une bonne idee de vouloir reecrire certaines fonctions en assembleur.
Je fais de l'image processing et une bonne partie du temps CPU est utilise par des fonctions tres simples mais appellees des milliers de fois (genre convolution,...)
Mais se que j'ai pu lire sur le net me decourage un peu de passer a l'ASM. Surtout que je suis plutot un debutant en C, et que d'apres se que j'ai lu VC++ est un des meilleurs compilo niveau optimisation. (d'ailleurs qu'en pense vous?)
Donc est-ce vraiment rentable de me plonger la dedans?

enfin, je souhaiterai faire du profiling sur mon code. Connaissez vous un bon outil pour cela. Car dans ma version de VC++, le profiling n'est pas disponible

Voila,

merci pour vos reponses.

4 réponses

NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
12 déc. 2005 à 12:16
pour les variables globales, apprend a bien doser, c'est à dire, ne pas
utiliser/déclarer de variable globale quand c'est pas vraiment
necessaire, faut pas mettre en globale juste pour le « fun » ...



pour ré-écrire des fonctions en assembleur, tu peux le faire oui mais
encore la, fait le seulement si le compilateur n'arrive pas a optimiser
autant que tu le souhaiterais(ca n'arrive pas souvent), comme par
exemple, si le compilateur n'utilise pas certaines instructions qui
pourrait permettre a ton code d,être beaucoup plus rapide ou autre,
etc... ou bien utiliser certaines instructions(pour optimiser)
spécifique a certaines architecture, etc... il faut faire des testes
dans ce cas, C vs ASM et puis prendre le meilleur des deux mondes mais
il faut faire gaffe de ne pas utiliser des instructions spécifique a
une architecture en particulié parce que sinon ca ne fonctionnerat pas
sur d'autre. le compilateur, si tu ne lui indique pas d'architecture
particulière, va utiliser du compatible(x86 et compatible par exemple
(intel/amd/...)) sans utiliser d'instructions spécifiques a intel ou
amd par exemple ... il est plutôt rare d'utiliser de l'assembleur en C
sauf pour des besoins très spécifiques



et oui, le compilateur de MS est un des meilleurs sous Windows, même
s'il n'est pas très conforme aux normes ANSI ...(mise a part MSVS 2005
qui est beaucoup plus conforme que les versions précédentes) ... (et la
j'ai pas dit LE meilleur mais UN des meilleurs)



pour l'optimisation, il n'y a rien(a ma connaissance) de « vraiment complet » a ce sujet parce que c'est plutôt vague.

la seule chose que l'on trouve généralement, ce sont des trucs/astuces/... mais rien de « vraiment » spécifique ...



prenons un exemple, un source qui ce trouve ici même sur ce site: http://www.cppfrance.com/code.aspx?ID=35020

regarde tous les strcat() qu'il utilise, c'est énorme! pour les raisons données plus bas. y'a matière a optimisation la ...



il faut juste étudier le projet, fonction/fonction, elles doivent faire
quoi et de quelle facon(optimale) devrait elle le faire? étudier
plusieurs possibilités/solutions/... faire des testes/comparatifs/...
etc...



j'aurais peut-être du le dire au début mais bon:

j'suis pas très doué pour ce genre d'explication/détail, mais j'ai essayé d'expliquer du mieux possible,

désolé si ce n'est pas très claire/compréhensible/... ou trop vague/... :(



voici quelques liens:

http://graphics.stanford.edu/~seander/bithacks.html

http://www.abarnett.demon.co.uk/tutorial.html

http://www.eventhelix.com/RealtimeMantra/Basics/OptimizingCAndCPPCode.htm

http://www.numerix-dsp.com/appsnotes/c_coding.html

http://www.azillionmonkeys.com/qed/optimize.html

...



note:

faut pas devenir fou avec l'optimisation non plus ... faut apprendre a bien « doser » et optimiser ce qui

doit être ou devrait être optimisé. ne cherche pas a optimiser _toutes_ les lignes de ton code, c'est

de l'abus ca :P

~(.:: NitRic ::.)~
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
12 déc. 2005 à 16:24
Aux heures perdut tu peux lire ceci:

http://mapage.noos.fr/emdel/ > Bien programmer en langage C
http://www.isty-info.uvsq.fr/~rumeau/fclc/ > Sa c'est pas mal a lire de temps de temps, ya pas mal d'info en tout genre.
0
serom00 Messages postés 5 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 12 décembre 2005
12 déc. 2005 à 22:55
Merci beaucoup pour vos reponses, et pour vos sources.
Je vais me plonger dedans.

Merci encore
0
kaervas Messages postés 51 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 19 avril 2008
13 déc. 2005 à 21:19
Interessant tout ca,
une question, il y a une commande sous unix pour savoir le temps d'execution du programme (en cycle processeur) ?
0
Rejoignez-nous