mardi 21 octobre 2014

Les astuces d'optimisation d'Andrei Alexandrescu

La présentation d'Andrei Alexandrescu à la CPP Con vaut le détour. Contrairement à d'autres présentations, qui sont plutôt sur le thème "comment utilise-t-on le C++ chez nous", celle là présente un certain nombre de micro-optimisations dans du code très commun. Deux sujets en particulier: l'inline des constructeurs et destructeurs (réponse: ça dépend, il faut mesurer!), et l'optimisation des pointeurs à comptage de références.

Parmis les trucs proposés, il en est un qui est particulièrement subtil: la plupart des pointeurs partagés le seront finalement assez peu, c'est à dire que le compteur de référence va rarement monter très haut. Par conséquent, il est possible de chouraver deux bits au pointeur, ce qui est généralement possible grâce aux politiques d'alignement, et d'utiliser ces bits pour le comptage de références. Si par malheur le nombre de référence devient trop haut, on logge, et on arrête de compter. L'on a une fuite mémoire, mais c'est un tradeoff généralement acceptable, il suffit de redémarrer le programme régulièrement.

Chez Facebook, ce genre d'optimisations, qui font gagner des dixièmes de pour cent de performances, sont critiques: sur l'ensemble de leurs datacentres, ce sont des millions de dollars économisés.

Aucun commentaire: