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 в контексте научных вычислений?
Меня интересует этот вопрос в целом, но, в частности, меня интересует также семантика перемещения для кодов конечных элементов, написанных с использованием библиотек надстроек. Я протестировал некоторый собственный код C ++ 03 с использованием надстройки версии 1.47.0 (поскольку в заметках о выпуске надстройки упоминается семантика перемещения в версии 1.48.0) и надстройки версии 1.53.0, но особых улучшений я не заметил. Я предполагаю, что любая экономия из-за того, что не нужно делать копирование для boost::numeric::ublas::vector
/ matrix
и boost::function
не заметна, так как решение системных матриц составляет основную часть рабочей нагрузки.
Редактировать: На самом деле похоже, что семантика перемещения реализована только для boost::function
(см . Примечания к выпуску версии 1.52.0 ). В нем нет упоминания о семантике перемещения boost::numeric
, я нашел источники, чтобы убедиться, что ссылки на значения отсутствуют.