Эффективность C++ На Современных Пк

Из-за ограничений по размеру публикую заметку как статью, а не как ссылку с аннотацией.

Со времени создания 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++

Вместе с данным постом часто просматривают: