O C ++ 11 introduz a semântica de movimentação que pode, por exemplo, melhorar o desempenho do código em situações em que o C ++ 03 precisaria executar uma construção de cópia ou atribuição de cópia. Este artigo relata que o código a seguir experimenta uma velocidade de 5x quando compilado com C + 11:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
Qual é o impacto da semântica de movimentação do C ++ 11 no contexto da computação científica?
Estou interessado nesta questão é geral, mas, mais especificamente, também estou interessado em semântica de movimento para códigos de elementos finitos escritos usando bibliotecas de impulso. Testei alguns dos meus próprios códigos C ++ 03 usando a versão 1.47.0 do boost (desde que as notas de versão do boost mencionam a semântica de movimentos são introduzidas na 1.48.0) e a versão 1.53.0 do boost, mas não notei muitas melhorias. Eu acho que as economias de não ter que fazer cópia-construção para boost::numeric::ublas::vector
/ matrix
e boost::function
não são perceptíveis, pois a solução de matrizes do sistema constitui a maior parte da carga de trabalho.
Editar: Na verdade, parece que a semântica de movimentação só é implementada boost::function
(consulte as notas de lançamento da versão 1.52.0 ). Não há menção de semântica de movimento boost::numeric
, eu procurei as fontes para ter certeza e parece não haver referências de valor.