C ++ 11 вводить семантику переміщення, яка може, наприклад, покращити продуктивність коду в ситуаціях, коли C ++ 03 потрібно буде виконати побудову копії або призначення копії. Ця стаття повідомляє, що наступний код має 5-кратну швидкість, коли компілюється з C + 11:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
Який вплив семантики переміщення C ++ 11 у контексті наукових обчислень?
Мене цікавить це питання загальне, але більш конкретно, мене також цікавить семантика переміщення для кодів Кінцевих Елементів, написаних за допомогою бібліотек boost. Я протестував свій власний код C ++ 03, використовуючи boost версії 1.47.0 (оскільки примітки до випуску згадують семантику переміщення введено в 1.48.0) та версію boost 1.53.0, але я не помітив особливого поліпшення. Я здогадуюсь, що будь-яка економія від того, що не потрібно робити копіювання для boost::numeric::ublas::vector
/ matrix
та boost::function
не помітна, оскільки рішення системних матриць становить основну частину завантаженості.
Редагувати: насправді схоже, що семантика переміщення реалізована лише для boost::function
(див. Примітки до випуску версії 1.52.0 ). У семантиці переміщення не згадується boost::numeric
, я перебрався з джерелами, щоб переконатися, що, здається, немає посилань на реальну оцінку.