Окупится ли выравнивание памяти в строке кэша? - PullRequest
12 голосов
/ 05 января 2011

Я просто знаю основные идеи по выравниванию распределения памяти.Но я не особо заботился о проблеме выравнивания, потому что я не программист на ассемблере, также не имел опыта работы с MMX / SIMD.И я думаю, что это одна из преждевременных оптимизаций.

В наши дни люди все больше и больше говорят о попадании в кэш, согласованности кэша, оптимизации по размеру и т. Д. Некоторые исходные коды даже выделяют память, явно выровненную по кэш-памяти ЦПлинии.

Честно говоря, я не знаю, сколько размер строки кэша моего процессора i7.Я знаю, что не будет никакого вреда с выравниванием большого размера.Но окупится ли это без SIMD?

Скажем, в программе 100000 элементов данных по 100 байт.И доступ к этим данным - самая интенсивная работа программы.

Если мы изменим структуру данных и приведем в соответствие все данные размером 100 байт, выровненные по 16 байтам, можно ли получить заметный прирост производительности?10%?5%

Ответы [ 5 ]

7 голосов
/ 05 января 2011

Это один из моих любимых недавних блогов о кеш-эффектах.http://igoro.com/archive/gallery-of-processor-cache-effects/

5 голосов
/ 05 января 2011

Оплата оптимизации кэша даже для однониточного приложения. Но оптимизация кеша не обязательно выравнивает данные в начале кеша, так как есть несколько факторов, которые необходимо учитывать. Итак, путь:

  • соответствуете ли вы требованиям к производительности? Если да, то зачем тратить время на оптимизацию. Оптимизация ради оптимизации оплаты редко.

  • Измерьте, где находится ваше узкое место. Если вы подозреваете проблемы с кешем, воспользуйтесь инструментом, который сообщает об отсутствии кеша, и получите представление о том, сколько вы можете выиграть.

На самом высоком уровне цель оптимизации кеша - заполнить кеш интересными данными, не допуская при этом неинтересных данных. Если вы занимаетесь многопоточным программированием, то также важно предотвращать помехи между потоками. Кроме того, вы должны предотвратить некоторые вещи, характерные для некоторых реализаций кеша, например резонансные эффекты, которые иногда уменьшают размер кеша эффекта для не полностью ассоциативного кеша.

4 голосов
/ 05 января 2011

Большинство обсуждений по выравниванию строк кэша касаются высокопроизводительных вычислений, работающих со многими потоками и поддерживающих масштабируемость как можно ближе к линейной. В этих обсуждениях причина выравнивания строк кэша состоит в том, чтобы предотвратить запись в одну переменную данных, делающую недействительной строку кэша, которая также содержит другую переменную, используемую другим потоком.

Итак, если вы не пытаетесь писать код, который будет масштабироваться до очень большого числа ядер процессора, выравнивание строк кэша, вероятно, не будет иметь большого значения для вас. но снова, проверьте это и посмотрите.

4 голосов
/ 05 января 2011

Это зависит от вашей системы.Попробуйте, запустите несколько тестов и узнайте.

3 голосов
/ 05 января 2011

Какая разница в выравнивании данных зависит от конкретного приложения.Это хорошее обсуждение здесь:

Выравнивание памяти на современных процессорах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...