Проектирование, ориентированное на данные

Программный подход к оптимизации вычислений

В вычислительной технике проектирование , ориентированное на данные, представляет собой подход к оптимизации программ, мотивированный эффективным использованием кэша ЦП , часто используемый при разработке видеоигр . [1] Подход заключается в том, чтобы сосредоточиться на структуре данных, разделяя и сортируя поля в соответствии с тем, когда они нужны, и думать о преобразованиях данных. Сторонники включают Майка Эктона, [2] Скотта Мейерса , [3] и Джонатана Блоу .

Параллельный массив (или структура массивов ) является основным примером дизайна, ориентированного на данные. Он противопоставляется массиву структур, типичному для объектно-ориентированного дизайна.

Определение проектирования, ориентированного на данные, как парадигмы программирования можно считать спорным, поскольку многие считают, что его можно использовать бок о бок с другой парадигмой [4] , но из-за акцента на компоновке данных оно также несовместимо с большинством других парадигм [1] .

Мотивы

Эти методы стали особенно популярны в середине-конце 2000-х годов во время седьмого поколения игровых консолей , включавших консоли PlayStation 3 (PS3) и Xbox 360 на базе IBM PowerPC . Исторически игровые консоли часто имеют относительно слабые центральные процессоры (ЦП) по сравнению с топовыми настольными компьютерами. Это выбор дизайна, чтобы выделить больше мощности и транзисторного бюджета графическим процессорам ( ГП). Например, ЦП 7-го поколения не производились с современными процессорами внеочередного выполнения , а вместо этого использовали процессоры по порядку с высокими тактовыми частотами и глубокими конвейерами . Кроме того, большинство типов вычислительных систем имеют основную память, расположенную в сотнях тактов от элементов обработки . Кроме того, поскольку ЦП стали быстрее наряду со значительным увеличением емкости основной памяти, наблюдается огромное потребление данных, что увеличивает вероятность промахов кэша в общей шине , иначе известное как узкое место фон Неймана . Следовательно, для управления производительностью использовались методы локальности ссылок , требующие улучшения шаблонов доступа к памяти для устранения узкого места. Некоторые из проблем с программным обеспечением были аналогичны тем, которые возникали на Itanium , и требовали развертывания цикла для предварительного планирования.

Контраст с объектной ориентацией

Утверждается, что традиционные принципы проектирования объектно-ориентированного программирования (ООП) приводят к плохой локальности данных, [5] [6] тем более, если используется полиморфизм времени выполнения ( динамическая диспетчеризация ) (что особенно проблематично на некоторых процессорах). [7] [1] Хотя ООП, по-видимому, «организует код вокруг данных», на самом деле он организует исходный код вокруг типов данных , а не физически группирует отдельные поля и массивы в эффективном формате для доступа определенными функциями. Более того, он часто скрывает детали макета под слоями абстракции , в то время как программист, ориентированный на данные, хочет учитывать это в первую очередь.

Смотрите также

Ссылки

  1. ^ abc Llopis, Noel (4 декабря 2009 г.). «Проектирование, ориентированное на данные». Проектирование, ориентированное на данные (или почему вы можете выстрелить себе в ногу с помощью ООП) . Получено 17 апреля 2020 г.
  2. ^ "CppCon 2014: Майк Эктон "Проектирование, ориентированное на данные, и C++"". YouTube . 29 сентября 2014 г.
  3. ^ "code::dive conference 2014 - Скотт Мейерс: кэши ЦП и почему вас это волнует". YouTube . 5 января 2015 г.
  4. ^ Ричард Фабиан (8 октября 2018 г.). «Проектирование, ориентированное на данные». www.dataorienteddesign.com . Получено 20 декабря 2023 г.
  5. ^ «КОНФЕРЕНЦИЯ РАЗРАБОТЧИКОВ HPC INTEL ® РАСШИРЯЙТЕ СВОЕ ПОНИМАНИЕ, ПОВЫШАЙТЕ ЭФФЕКТИВНОСТЬ ВЕКТОРИЗАЦИИ С ПОМОЩЬЮ ШАБЛОНА РАСПОЛОЖЕНИЯ ДАННЫХ INTEL SIMD (INTEL SDLT)» (PDF) .
  6. ^ Хольгер Хоманн; Франсуа Лаенен (2018). «SoAx: общая структура массивов C++ для обработки частиц в кодах HPC». Computer Physics Communications . 224 : 325–332 . arXiv : 1710.03462 . Bibcode : 2018CoPhC.224..325H. doi : 10.1016/j.cpc.2017.11.015. S2CID  2878169.
  7. ^ «Что не так с объектно-ориентированным проектированием? В чем его вред?».описывает проблемы с вызовами виртуальных функций, например, промахи i-cache
Retrieved from "https://en.wikipedia.org/w/index.php?title=Data-oriented_design&oldid=1268575197"