Ориентированный на данные дизайн с Майком Эктоном - Верны ли вычисления «количество циклов на строку кэша»? - PullRequest
0 голосов
/ 06 августа 2020

Я несколько раз смотрел рассказы Майка Эктона о Министерстве обороны США, чтобы лучше понять это (для меня это непростая тема). Я имею в виду CppCon 2014: Майк Эктон «Data-Oriented Design and C ++» и GD C 2015: Как написать код, который компилятор может реально оптимизировать .

Но в обоих выступлениях он приводит некоторые расчеты, которые меня сбивают с толку: Расчеты Майка Эктона

Это показывает, что FooUpdateIn занимает 12 байтов, но если вы сложите 32 байта, вы получите 6 полностью упакованных строк кэша. То же самое касается FooUpdateOut , он занимает 4 байта, и 32 из них дают вам 2 полностью упакованные строки кеша.

В функции UpdateFoos вы можете выполнять ~ 5,33 цикла на каждую строку кэша (при условии, что count действительно 32), затем он продолжает, предполагая, что все вычисления занимают около 40 циклов, что означает, что каждая строка кеша займет около 213,33 цикла.

Вот где я запутался, разве он не забывает про чтение и запись? Несмотря на то, что у него есть 2 полностью упакованные структуры данных, они находятся в разных областях памяти. В моей голове вот что происходит:

  1. Прочтите в [0] .m_Velocity [0] (что займет около 200 циклов, исходя из его предыдущих слайдов)
  2. Поскольку в [0] .m_Velocity [1] и в [0] .m_Foo находятся в той же строке кэша, что и в [0] .m_Velocity [0] их доступ бесплатный
  3. Выполните все вычисления
  4. Запишите результат в out [0] .m_Foo - Вот что я не знаю, что происходит , Я предполагаю, что он отбросит предыдущую строку кэша (полученную в 1.) и загрузит новую, чтобы записать результат
  5. Read в [1] .m_Velocity [0] , что приведет к снова отбросьте другую строку кэша (полученную в 4.) (что снова займет около 200 циклов)
  6. ...

Таким образом, переход от в и out вычисления идут от ~ 5,33 циклов / строка кэша до 0,5 циклов / строка кеша , что будет делать 20 циклов на строку кеша.

Может кто-нибудь объясните, почему он не беспокоился про читает / пишет? Или что не так в моих мыслях?

Спасибо.

...