Выравнивание памяти против использования ЦП - PullRequest
2 голосов
/ 02 апреля 2019

У меня есть платформа ARM под управлением Linux, где длина строки L1 составляет 64 байта.

Я решил заменить malloc (через LD_PRELOAD) другим malloc, где память должна быть выровнена на 64 байта независимо от размера, заданного для malloc.

Я ожидал увидеть, что потребление памяти увеличивается (что на самом деле произошло), в то же время наблюдая, как снижается загрузка ЦП. Этого не случилось Другими словами, возросло использование как памяти, так и процессора.

Как это можно объяснить?

Спасибо

1 Ответ

3 голосов
/ 02 апреля 2019

Зависит от того, что вы malloc().Если вы используете malloc() для больших порций данных, это не должно иметь реальных различий.Но если вы malloc() элементов меньше 64 байт, вы, вероятно, не будете эффективно использовать кэш.

malloc() выделяет элементы в памяти в порядке программы.Если несколько malloc() близки, элементы будут находиться в последовательных адресах памяти, и вполне вероятно, что они будут использоваться вместе, поскольку они были созданы одновременно.Это так называемый принцип пространственной локализации .Конечно, ничего не гарантируется, особенно с динамически распределяемыми данными, но пространственная локальность наблюдается в большинстве программ.Практическое значение этого принципа состоит в том, что он позволяет лучше использовать кэши.Отсутствие кэша обходится дорого (нужно извлечь 64 байта из памяти), но если вы используете элементы, закрывающиеся в памяти, вы должны заплатить это только один раз.

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

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