Эффективное использование кэша в C - PullRequest
1 голос
/ 28 сентября 2010

Я хочу написать код, который лучше всего использует кеш-память моей системы.Например, у меня есть один большой массив (размером 2 КБ), который часто используется в операциях.Для лучшей скорости выполнения я хочу, чтобы он загружался в оперативную память, чтобы процессору требовалось меньше времени для его извлечения.Как я могу обеспечить это на языке Си?Любая помощь будет оценена.

Ответы [ 2 ]

6 голосов
/ 29 сентября 2010

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

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

Короче: не беспокойтесь об этом.Ваш массив крошечный, поэтому вряд ли вы сможете многое сделать для «оптимизации» использования кеша.Вместо этого посмотрите на алгоритм, который вы используете, чтобы увидеть, есть ли более эффективный подход, который можно использовать, и запустите профилировщик на вашем коде, чтобы увидеть узкие места.

1 голос
/ 29 сентября 2010

Для GCC вы можете использовать опцию "-fprefetch-loop-arrays".В любом случае, если вы часто используете этот блок памяти, он, скорее всего, будет находиться в кеше.

Если вы хотите ускорить его, прочитайте: http://www.agner.org/optimize/optimizing_cpp.pdf и попробуйте его использовать.И не забывайте, что лучшая оптимизация может быть достигнута путем изменения алгоритма.

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