C ++ 11 introduit la sémantique de déplacement qui peut, par exemple, améliorer les performances du code dans les situations où C ++ 03 devrait effectuer une construction de copie ou une affectation de copie. Cet article signale que le code suivant connaît une accélération de 5 fois lorsqu'il est compilé avec C + 11:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
Quel est l'impact de la sémantique des mouvements C ++ 11 dans le contexte du calcul scientifique?
Je suis intéressé par cette question qui est générale, mais plus spécifiquement, je suis également intéressé par la sémantique de déplacement pour les codes d'éléments finis écrits à l'aide de bibliothèques boost. J'ai testé une partie de mon propre code C ++ 03 en utilisant la version boost 1.47.0 (puisque les notes de version boost mentionnent la sémantique de déplacement introduite dans 1.48.0) et la version boost 1.53.0, mais je n'ai pas remarqué beaucoup d'amélioration. Je suppose que les économies de ne pas avoir à faire de construction de copie pour boost::numeric::ublas::vector
/ matrix
et boost::function
ne sont pas perceptibles car la résolution des matrices système constitue la majeure partie de la charge de travail.
Edit: En fait, il semble que la sémantique de déplacement ne soit implémentée que boost::function
(voir les notes de publication de la version 1.52.0 ). Il n'y a aucune mention de la sémantique de mouvement dans boost::numeric
, j'ai salué les sources pour m'assurer et il ne semble pas y avoir de références rvalue.