Messieurs dames, bonjour!
Etudiant, devant réaliser des projets tout au long de l'année. J'attribue beaucoup d'importance à la vitesse d'execution de mes programmes, dans le but d'avoir un algorithme optimisé.
Voilà un cas qui me laisse septique et dont j'ai du mal à expliquer l'origine!
J'ai deux programmes identiques, enfin presque. L'algorithme principal est le même.
J'ai compilé chacun d'eux avec dans l'un l'utilisation de printf, et dans l'autre l'utilisation de write.
En utilisant printf, le binaire est largement plus rapide. Par exemple dans un test de benchmark, il met 5sec sur une map de 5000²octet à traiter, tandis qu'avec write, le temps est décuplé, souvent plus de 20sec...
Le probleme ? Je suspecte en fait, les accès IO des fonctions, en effet, avec printf, la fonction affiche le buffer seulement si un retour à la ligne('\n') est détecté ou si c'est la fin du programme. Tandis que write, écrite directement, sans attendre, le '\n'.
Je ne peux utiliser printf, à cause de la norme
Mais je n'en suis pas sûr, car de temps en temps, avec printf, le programme met autant de temps. Je suis sûr que ce n'est pas un probleme de conception d'algo, parcontre, peut être une compilation qui foire...
Par exemple, une différence de perf, entre gcc3.4, et gcc4.
Exemple de test de benchmark :
./time mon_prog > /dev/null
Vos retours d'expérience, et toutes autres aides est la bienvenue.
Bien à vous.
Un tek1 ;-)
Partager