Комментарии 9
Отличное исследование! Благодарность автору.
0
Все достаточно очевидно, но написано хорошо!
0
Мы помним, что процессор обменивается с памятью порциями по 64 байта, которые называются КЭШ-линиями.
Более правильно было бы написать, что процессор обменивается с памятью порциями длинной в кэш линию, которая на современных Intel\AMD процессорах равна 64 байта.
Каг бэ не интелом единым :) на старых процессорах кэш линии были короче, на ARM'ах, на сколько мне известно, на А9\А15 — 32 байта. На консолях с их РРС, тоже, кажется, 32 байта
P.S. На атомах, кажется, тоже 32 байта?!
отокам всё больше требуется КЭШ линий и в силу ограниченности шины им приходится всё дольше и дольше простаивать в ожидании данных.
По сути это кэш мисс — обращение к данным, которых нет в кэше. Было бы неплохо добавить в статью.
Для того, чтобы сделать запись линейной, нужно применить классическую оптимизацию, которая называется «трансформация массива структур в структуру массивов»
На этих словах у всех любителей ООП должен случиться баттхерт, так как такая философия плохо ложится на то, чему мы обычно привыкли
З.Ы. Замечательная статья. Припоминаю только 2 источника, где все было так же толково расписано — книга Касперски по оптимизации и книга от Интел Пресс на ту же тему :) Названия лень гуглить
Более правильно было бы написать, что процессор обменивается с памятью порциями длинной в кэш линию, которая на современных Intel\AMD процессорах равна 64 байта.
Каг бэ не интелом единым :) на старых процессорах кэш линии были короче, на ARM'ах, на сколько мне известно, на А9\А15 — 32 байта. На консолях с их РРС, тоже, кажется, 32 байта
P.S. На атомах, кажется, тоже 32 байта?!
отокам всё больше требуется КЭШ линий и в силу ограниченности шины им приходится всё дольше и дольше простаивать в ожидании данных.
По сути это кэш мисс — обращение к данным, которых нет в кэше. Было бы неплохо добавить в статью.
Для того, чтобы сделать запись линейной, нужно применить классическую оптимизацию, которая называется «трансформация массива структур в структуру массивов»
На этих словах у всех любителей ООП должен случиться баттхерт, так как такая философия плохо ложится на то, чему мы обычно привыкли
З.Ы. Замечательная статья. Припоминаю только 2 источника, где все было так же толково расписано — книга Касперски по оптимизации и книга от Интел Пресс на ту же тему :) Названия лень гуглить
+2
Видимо, это Code Optimization: Effective Memory Usage и Software Optimization Cookbook: High-Performance Recipes for the Intel Architecture. Обеих, похоже, в электронном виде нет.
+1
> на сколько мне известно, на А9\А15 — 32 байта
Cortex-A15 — 64, а раньше да, были и 32-байтные.
> На консолях с их РРС, тоже, кажется, 32 байта
IBM Cell (PS3) — 128.
> P.S. На атомах, кажется, тоже 32 байта?!
Тоже 64.
> Припоминаю только 2 источника, где все было так же толково расписано
Только Агнер Фог, только хардкор!
Cortex-A15 — 64, а раньше да, были и 32-байтные.
> На консолях с их РРС, тоже, кажется, 32 байта
IBM Cell (PS3) — 128.
> P.S. На атомах, кажется, тоже 32 байта?!
Тоже 64.
> Припоминаю только 2 источника, где все было так же толково расписано
Только Агнер Фог, только хардкор!
+3
Да, это всё сводится к КЭШ миссам. Но акцент в статье сделан на шину данных, так как на архитектурах Out-Of-Order порой бывает очень сложно понять насколько серьезно страдает приложение от какого-либо количества промахов по КЭШ’у. А благодаря замеру загрузки шины это сделать намного легче.
О правильной работе с КЭШом написаны целые книги. Мы конечно же поговорим об этом тоже как-нибудь в другой раз.
О правильной работе с КЭШом написаны целые книги. Мы конечно же поговорим об этом тоже как-нибудь в другой раз.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Влияние загрузки шины данных на масштабируемость приложений