Из-за ограничений по размеру публикую заметку как статью, а не как ссылку с аннотацией.
Со времени создания C++ относительная (по отношению к скорости оперативной памяти) скорость процессора увеличилась в 400 раз.
Плюс у процессора теперь есть большие кэши и предсказание ветвлений в коде.
Все это вместе оказывает серьезное влияние на эффективность C++ на современных платформах.
Ниже я привожу аннотацию и пару ссылок, где предлагается использовать эти факты для повышения эффективности кода.
Постановка задачи встретилась мне в этой статье: Solid-angle.blogspot.com/2010/02/musings-on-data-dependent-design.html Также рекомендую внимательно прочитать доклад и статьи, ссылки на которые опубликованы автором в начале.
Отчет наиболее информативен и показателен с точки зрения конкретных цифр: Research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf На примере объектов трехмерной графики показано, как простейшие изменения с точки зрения C++ (например, перераспределение объявлений в заголовке класса) могут существенно повысить скорость работы кода.
Автор статьи говорит о необходимости создания кода на основе данных, а уже потом абстракций ООП (Data-Oriented Design).
Учитывая изменившуюся разницу в скорости памяти и процессора (напоминаем: в сотни раз!), это может глобально ускорить код на современных системах.
Проще говоря, этот подход предполагает: 1) отказ от функций, работающих с одним элементом данных, в случаях, когда подобных элементов много 2) организация этих элементов в виде отдельного непрерывного массива в памяти плюс функции-члены, работающие непосредственно с этим массивом.
С компьютерной точки зрения, как пишут авторы, информация разных типов должна быть организована в однородные массивы, по одному для каждого типа данных.
На уровне ассемблера (или другого языка низкого уровня) функции должны генерироваться таким образом, чтобы единицей обработки был массив или их набор.
В то же время для человека (например, при отладке) эти данные должны быть сгруппированы в классы (т. е.
обычным для современного C++ способом), данные которых представляют собой разнородный набор элементов низкоуровневого однородного кода.
массивы.
Это может ускорить работу кода на порядок (а в некоторых случаях и больше).
P.S. Для некоторых концепция ориентированного на данные проектирования может быть не нова.
Вполне возможно, что у вас есть опыт реализации данного подхода и конкретные результаты его применения.
Было бы очень интересно, если бы вы поделились в комментариях своим опытом такой оптимизации.
Теги: #эффективность #код #ООП #проектирование, ориентированное на данные #C++
-
Это Мой Путь В Китай (Часть 2)
19 Oct, 24 -
Почему Тендеры – Это Плохо?
19 Oct, 24 -
«Градобанк» Лишился Лицензии
19 Oct, 24