ЦПУ имеет возможность выбрать одно из них, то есть решить, когда было обработано прерывание относительно исходного потока команд.
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, могут увеличить задержку прерывания, потому что они должны произойти и не могут быть прерваны. Но создать патологический случай большого количества разбросанных хранилищ пропущенных кеша в полете сложнее.)