Как я могу загрузить значения из памяти, не загрязняя кэш?

Я описал довольно полный ответ к этому в другом месте с кодом, показывающим, как сделать это. Сводка:

  1. Вы, вероятно, не хотите делать это. Используя git describe разумная альтернатива.
  2. , Если действительно необходимо сделать, это, $Id$ и $Format$ довольно легко.
  3. Что-либо более усовершенствованное потребует использования gitattributes и пользовательский фильтр. Я обеспечиваю реализацию в качестве примера $Date$.

Решения на основе функций рычага обычно не полезны, потому что они делают Вашу рабочую копию грязной.

15
задан starblue 14 November 2009 в 09:24
поделиться

2 ответа

Проблема с инструкцией movntdqa с %% xmm в качестве цели (загрузка из памяти) заключается в том, что этот insn доступен только с SSE4.1 и более поздними версиями. Это означает только более новые Core 2 (45 нм) или i7. Другой способ (сохранение данных в памяти) доступен в более ранних версиях SSE.

Для этой инструкции процессор перемещает данные в один очень маленький из очень небольшого количества буферов чтения (Intel не указывает точный размер, но предполагает он находится в диапазоне 16 байт), где он легко доступен, но отключается после нескольких других загрузок.

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

Помните, вам нужно будет использовать sfence insn впоследствии.

Предварительная выборка существует в двух вариантах: prefetcht0 (Prefetches) данные во всех кэшах) и prefetchnt (предварительная выборка невременных данных). Обычно предварительная выборка во всех кэшах является правильным решением, для цикла потоковой передачи данных последний будет лучше, если вы будете последовательно использовать инструкции потоковой передачи.

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

7
ответ дан 1 December 2019 в 05:12
поделиться

MOVNTDQA доступен только с SSE.

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

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

0
ответ дан 1 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: