Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
vector<Shape> calculatePositionsAndBounds(float const dt, vector<Shape> const shapes)
{
vector<Shape> updatedShapes;
updatedShapes.reserve(shapes.size());
transform(shapes.begin(), shapes.end(), back_inserter(updatedShapes), [dt](Shape const shape)
{
return Shape{shape.id, shape.vertices, calculatePosition(shape, dt), shape.velocity, shape.bounds, shape.cellsRange, shape.color, shape.massInverse};
});
return updatedShapes;
}
Хотя foo() и принимает const &, сами данные не являются константными, а это значит, что они могут быть изменены до и в момент вызова accumulate(), например, другим потоком. Именно поэтому все данные должны приходить в виде копии.
Сейчас всего 330. Триста тридцать, Карл!
К тому же передача по значению не спасает от того, что вектор испортит другой поток в то время, как мы копируем его в нашу функцию.
Мы вызываем по несколько malloc и free и копируем несколько мегабайт данных на каждый вызов каждой функции
в одном потоке с 2Д сеткой мы могли симулировать 8000 фигур. Сейчас всего 330
330 это после распараллеливания?
Функциональное программирование и c++ на практике