Reprenant le post précédent, je me suis demandé quel était l'effet des allocations sur les performances. Puisqu'Asio permet de customiser ses allocateurs, j'ai adapté l'exemple fourni par Asio à ma comparaison boost::bind contre lambda.
Tout d'abord, Valgrind confirme effectivement que les allocations sont parties (test réduit à 2000 tâches, sinon ça prenait la nuit):
==3194== Memcheck, a memory error detector
==3194== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==3194== HEAP SUMMARY:
==3194== in use at exit: 0 bytes in 0 blocks
==3194== total heap usage: 2,006 allocs, 2,006 frees, 96,496 bytes allocated
==3205== Memcheck, a memory error detector
==3205== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==3205== HEAP SUMMARY:
==3205== in use at exit: 0 bytes in 0 blocks
==3205== total heap usage: 6 allocs, 6 frees, 496 bytes allocated
Ensuite, étonnamment, les performances ne sont pas si différentes:
J'avais imaginé que le million d'allocations prendrait la part du lion dans l'exécution du programme, mais de fait l'on ne parle que d'une différence de 10%. C'est toujours bon à prendre, mais loin d'être un miracle.
Pour un gain de 0.15μs par allocation, il me semble inutile de se fatiguer à passer par un allocateur fait à la mimine, à part peut-être dans les cas extrêmes où l'on cherche à réduire la latence par tous les moyens.
Aucun commentaire:
Enregistrer un commentaire