заставить некоторые данные в кэш-памяти L1 - PullRequest
3 голосов
/ 30 декабря 2010

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

1 Ответ

16 голосов
/ 30 декабря 2010

Нет способа принудительно заставить массив кеша L1 / L2 на большинстве архитектур;обычно он не нужен, если вы обращаетесь к нему часто, его вряд ли удастся извлечь из кэша.

На некоторых архитектурах есть набор инструкций, позволяющих дать подсказку процессору о том, что место в памяти скоро будетнеобходимо, чтобы он мог начать загружать его в кэш L1 / L2 раньше - это называется предварительной выборкой, см., например, инструкцию _mm_prefetch (http://msdn.microsoft.com/en-us/library/84szxsww(v=vs.80).aspx).Тем не менее, это вряд ли понадобится, если вы обращаетесь к небольшому массиву.

Общий совет: сначала сделайте ваши структуры данных эффективными в кешировании (объедините связанные данные, упакуйте данные и т. Д.), Попробуйте предварительную выборкупозже, если профилировщик скажет вам, что вы все еще тратите время на промахи в кеше, и вы не можете больше улучшать компоновку данных.

...