Прерывающая инструкция в середине исполнения - PullRequest
0 голосов
/ 09 декабря 2018

Предположим, что ЦП выполняет инструкцию по сборке, скажем, FOO, которая будет выполнена за несколько тактов (например, 10)

Запрос на прерывание пришел как раз в середине выполнения FOO и процессоранужно прервать.Ожидает ли она правильного выполнения команды или FOO прервана и будет перезапущена?Ведет ли он себя по-разному, рассматривая различные типы приоритетов прерываний?

1 Ответ

0 голосов
/ 09 декабря 2018

ЦПУ имеет возможность выбрать одно из них, то есть решить, когда было обработано прерывание относительно исходного потока команд.

Insns, которые были выданы, но еще не отправлены в исполнительный модуль,отменены в текущих реализациях от AMD и Intel. Когда происходит прерывание, что происходит с инструкциями в конвейере?

При выполнении не по порядку, как правило, десятки команд находятся в полете, и в буквальном смысле может быть больше одной.Середина выполнения в ALU сразу.

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

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


Некоторые инструкции, особенно микрокодированные, имеют механизмы прерывания без необходимости перезапуска с нуля .Например,

  • rep movsb может оставить RSI, RDI и RCX обновленными, чтобы частично копировать копию (таким образом, копия будет завершена при перезапуске).Другие инструкции строки REP аналогично могут быть прерваны.Только один счет операции является атомарным по отношению к прерываниям.

  • AVX2 собирается так, как vpgatherdd имеет вектор входной маски, который показывает, какие элементы собирать противигнорироватьОн удаляет элементы маски после успешного сбора соответствующего индекса.В исключительной ситуации (например, сбой страницы) неисправный элемент является самым правым элементом с его маской, все еще установленной (порядок сбора не гарантируется, но порядок сбоев, см. Руководство Intel по вводу данных).

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

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

    В любом случае, именно поэтому вам нужно продолжать создавать свежую маску «все в единицу» внутри цикла для каждого сбора.

    AVX512 собирает и разбрасывает, имеет тот же механизм, но с регистром маски вместо векторного регистра.http://felixcloutier.com/x86/VPSCATTERDD:VPSCATTERDQ:VPSCATTERQD:VPSCATTERQQ.html


Очень медленные инструкции без Механизм прерывания и перезапуска включает wbinvd.(Синхронизируйте все кэши с основной памятью и сделайте их недействительными). В руководстве Intel упоминается, что wbinvd задерживает прерывания.

Как следствие, использование команды WBINVD может повлиять на время прерывания логического процессора / время ответа на событие.

Возможно, поэтому это привилегированная инструкция.Пользовательское пространство может многое сделать, чтобы замедлить работу системы (например, использовать много пропускной способности памяти), но это не может слишком сильно увеличить задержку прерывания.(Хранилища, которые вышли из ROB, но еще не передали L1d, могут увеличить задержку прерывания, потому что они должны произойти и не могут быть прерваны. Но создать патологический случай большого количества разбросанных хранилищ пропущенных кеша в полете сложнее.)

...