Comments 10
А affinity потокам выставлялся? Смею предположить, что при этом результаты должны слегка улучшится в теории, особенно, если освободить ядра под задачи. И ваш тест с наблюдением fps мог бы оказаться не очень показательным а 15% слишком близко к погрешности, может у вас windows при первых замерах обновлялся или ещё чего за кадром происходило.
Ну, если для чистоты эксперимента многопоточный код хотя бы не был кинут на освобождённые под него ядра, то где тут чистота? Разве что погода на Марсе особо не повлияет, и то не факт.
Можно было хотя бы освободить n ядер под процесс, системными средствами. Под windows не помню на память (но как то из ps делается), под linux это тот же taskset. Тут же важно, что бы ядра в момент эксперимента не делились ни с какими другими процессами в системе, хватит и того, что память по сути одна.
class ShapeRef;
struct ShapesData {
friend class ShapeRef;
public:
ShapeRef getShape(size_t i);
private:
// векторы данных будут закрытыми
std::vector<math::Vec2> positions;
...
};
class ShapeRef {
public:
ShapeRef(ShapesData & d, size_t i):
data{d}, index{i} {}
const math::Vec2 & getPosition() const {
return data.positions[index];
}
void setPosition(const math::Vec2 & pos) {
data.positions[index] = pos;
}
// методы для доступа к остальным данным фигур
private:
ShapesData & data;
size_t index;
};
inline ShapeRef ShapesData::getShape(size_t i) {
return ShapeRef(*this, i);
}
Вы серьезно считаете что int занимает в памяти 4KB?
Data Oriented Design на практике