dimanche 24 avril 2011

Performances: Asio custom alloc

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: