Что такое подсказка процессора?

В контексте руководств разработчика программного обеспечения для архитектур Intel® 64 и IA-32 я хотел бы знать, что означает слово «подсказка»?

Я вижу это в нескольких разделах:

  1. В описании PREFETCHWT1 - Prefetch подсказка T1 с целью записи.

  2. Во введении SSE4 говорится: «Эта технология также дает подсказку, которая может улучшить пропускную способность памяти при чтении из некэшируемого типа памяти WC». Это привело меня к этому хорошо написанному ответу относительно памяти WC.

  3. Затем я прочитал, что одна из инструкций SSE4 может выполнять загрузку с «потоковой» подсказкой. Это привело меня к Справочник по программированию SSE4, где я обнаружил, что подсказки могут быть временными или невременными.

  4. Сама инструкция подсказки потоковой загрузки MOVNTDQA «предоставляет не временную подсказку»

  5. Далее в руководстве я обнаружил, что расширения синхронизации транзакций (TSX) используют «подсказку префикса» в XACQUIRE и XRELEASE.

  6. В разделе AVX 512 бит при описании VGATHERPF0DPD и компании (есть еще 7 таких типов инструкций, все с опцией /PS). В этих ситуациях у нас есть подсказка T0 или T1 с использованием индексов dword или qword.

  7. Самый проницательный момент, когда я видел подсказку, используемую в руководстве (этот список в порядке), пришелся на раздел 10.4.6.1, где он читается

«Невременная подсказка указывает процессору сохранять данные в памяти, не записывая данные в иерархию кэша».

Это находится в разделе «Инструкции по управлению кэшированием», включающем MOVNTQ, MOVNTPS, MASKMOVQ, поэтому будет ли временная подсказка записываться в строку кэша?

Итак, в это время я начал чувствовать, что понимаю намеки, может быть, они были «специальными указателями»? Но тогда они будут просто называться указателями, так что, может быть, они являются частью указателя? Но потом я начал даже сомневаться, что, когда я прочитал этот ответ Stack Overflow на то, что противоположно подсказке есть. Это слово «подсказка», кажется, используется на более высоких уровнях абстракции, как я видел в этот ответ с помощью справочной страницы FreeBSD.

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

Как видите, я сбит с толку, потерян и напуган. За бонусные баллы может кто-нибудь объяснить подсказки, используя аналогию?

Спасибо


person Robert Houghton    schedule 30.07.2019    source источник
comment
Подсказка — это просто дополнительная информация о каком-то конкретном использовании, которую процессор может затем использовать для оптимизации. Подсказки также можно игнорировать.   -  person Jester    schedule 30.07.2019
comment
Подсказка — это дополнительная информация, которую вы предоставляете, чтобы помочь обработчику принять правильное решение, когда предлагается несколько вариантов, и он не может быть принят только на основе контекста (этот термин не является специфическим для процессоров).   -  person Yves Daoust    schedule 30.07.2019
comment
пример пожалуйста?   -  person Robert Houghton    schedule 30.07.2019
comment
Например, MOVNTDQA совпадает с MOVDQA, за исключением того, что он сообщает процессору, что вы не будете повторно использовать это значение. Это вневременной намек. Затем процессор может избежать загрузки данных в кеш. (Но вы это уже выяснили.) Были также подсказки предсказания ветвления, которые сообщали процессору, ожидается ли прыжок или нет.   -  person Jester    schedule 30.07.2019
comment
Так считаются ли сами эти инструкции подсказками, потому что они относятся к кешу?   -  person Robert Houghton    schedule 30.07.2019
comment
MOVNTDQA сам по себе не намек. У него есть надлежащая функция: он выполняет передачу данных. Подсказка просто предоставляет дополнительную информацию о том, как вы собираетесь использовать данные. XACQUIRE/XRELEASE — это подсказки, это префиксы, применяемые к какой-то другой инструкции. Также подсказки не должны иметь дело с кешем. XACQUIRE не работает с кешем. Подсказки ветвей не имеют отношения к кешу. Подсказки — это любая общая информация, которую вы можете передать процессору, чтобы он мог лучше выполнять свою работу. Он по-прежнему должен выполнять ту же работу без подсказок, но, возможно, медленнее.   -  person Jester    schedule 30.07.2019
comment
Большое спасибо за эти слова, это помогает, но теперь мне интересно, а подсказка - это просто вещь, которая оптимизирует ассемблерный код? Или код в целом (C с использованием встроенных функций или что-то еще), поэтому после компиляции эта программа работает лучше?   -  person Robert Houghton    schedule 30.07.2019
comment
Да это верно.   -  person Jester    schedule 30.07.2019
comment
Подсказка используется здесь как обычное английское слово, а не как какое-то специфичное для компьютера значение, поэтому в дополнение к ответам здесь может помочь обычный словарь.   -  person prl    schedule 30.07.2019


Ответы (1)


Подсказка — это часть операции инструкции, которая может быть реализована не так, как описано. Он может быть вообще не реализован или может быть реализован по-другому. Что именно делает подсказка, может зависеть от конкретных обстоятельств, в которых выполняется инструкция. Вообще говоря, то, как реализована подсказка, не влияет на архитектурное состояние процессора. Для подсказок, связанных с кешем, это означает, что то, что именно оказывается в кеше, может варьироваться, хотя для текущего процессора, по крайней мере, кеш останется в согласованном состоянии. (Другие процессоры могут видеть обращения к памяти, сделанные текущим процессором, в непоследовательном порядке по отношению к обычным правилам упорядочения памяти x86, поскольку некоторые подсказки могут нарушать эти правила.)

Например, невременные подсказки сообщают процессору, что не следует использовать пространство в кэше для данной ссылки на память. Обычно они используются, потому что программист считает, что ЦП не будет снова обращаться к ячейке памяти, поэтому использование кеша было бы пустой тратой места. Запись в видеопамять является распространенным примером этого, поскольку видеопамять почти всегда используется программами как память «только для записи».

На практике невременные подсказки могут сильно различаться по своей работе, в зависимости от конкретного процессора, от того, используется ли память с объединением записи (WC), не является ли это чтение или запись, и конкретной инструкции. См. BeeOnRope answer на вопрос о невременных нагрузках и обычной памяти, чтобы узнать о некоторых возможных различиях. Также обратите внимание, что, учитывая асинхронный характер кешей, точное поведение всего, что связано с кешем, трудно определить, поскольку предварительная выборка и действия других процессоров могут легко вытеснить или неожиданно добавить строки кеша.

person Ross Ridge    schedule 30.07.2019