C ++ 11引入了移动语义,例如,在C ++ 03需要执行副本构造或副本分配的情况下,可以提高代码性能。该文章报道说,下面的代码与C + 11编译经历了5倍加速:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
在科学计算的背景下,C ++ 11 move语义会产生什么影响?
我对这个问题很感兴趣,但更具体地说,我对使用Boost库编写的有限元代码的移动语义也很感兴趣。我使用增强版1.47.0(因为增强版发行说明中提到了移动语义是在1.48.0中引入的)和增强版1.53.0 (使用增强版1.47.0)测试了自己的一些C ++ 03代码,但是我没有注意到太多改进。我想任何积蓄从不必为做复制建筑boost::numeric::ublas::vector
/ matrix
和boost::function
不显着的,因为求解系统矩阵构成块体的工作量。
编辑:实际上,似乎只为移动语义实现了boost::function
(请参见1.52.0版发行说明)。中没有提到移动语义boost::numeric
,我将源代码拼凑起来以确保没有似乎右值引用。
1
正如您在问题的最后一部分中所指出的那样,除非您已对代码进行了概要分析并看到了很多复制工作,否则您无法通过使用移动语义来显着提高性能。
—
Bill Barth