быстро аннулировать кеш - PullRequest
       8

быстро аннулировать кеш

3 голосов
/ 21 января 2010

Есть ли в c ++ способ быстро аннулировать кэш L2 процессора, кроме как итерация большого поддельного массива?

Ответы [ 3 ]

1 голос
/ 21 января 2010

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

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

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

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

1 голос
/ 21 января 2010

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

В этом случае вам нужно знать, чтобы сделать это эффективно:

  1. Размер выделения кэша L2
  2. Сколько выделений в кеше L2

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

Переключение контекста также часто делает недействительным кэш-память - она ​​может быть быстрее до wait в течение миллисекунды, и, если операционная система меняет вас на части, это, скорее всего, приведет к очистке кэша.

0 голосов
/ 21 января 2010

Вы хотите использовать забор памяти. в vc ++:

void SThreadUtil::synchronizeCache()
{
    _mm_mfence();
}

извините. Для промывки это должно быть _mm_clflush

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