2015-09-11 4 views
1

Есть ли ситуация, когда состояние конвейера процессора (с уже декодированными или запрограммированными инструкциями) сохраняется и впоследствии перезагружается после возобновления во время спящего потока/контекстного переключения/прерывания и т. Д.? (Может быть как оптимизация).Сохранение состояния конвейера процессора

+2

Готовы ли вы подсчитать программные преобразования микросхем VLIW, такие как Transmeta/Denver, которые (в первом приближении) в значительной степени _work_, что путь? : P – Notlikethat

+0

Это было полезно знать :). Но в основном я фокусировался на архитектуре x86_64 и ARM. – chamibuddhika

+1

Конструкция crusoe Transmeta * является * процессором x86. Внутри он реализован JIT-компилятором машинного кода x86 для машинного кода VLIW и кэширования. Таким образом, он находит параллелизм один раз и не должен делать это на лету каждый раз, когда архитектурное состояние x86 проходит по одному и тому же коду. Это то, что @Notlikethat получал. –

ответ

4

Это невозможно для любого процессора, о котором я знаю. Там нет интерфейса для этого, и нет условий, при которых процессор делает это самостоятельно. Сброс огромного количества внутреннего состояния процессора в ОЗУ займет больше циклов, чем он будет экономить. Если ОС отслеживает требуемые для этого требуемые объемы памяти, это просто ухудшит накладные расходы.

Если что-то стоило сэкономить, BTW, это были бы результаты уже выполненной инструкции, которая еще не может уйти из-за нагрузки, пропущенной в кеше. (Все общие схемы исполнения вне очереди для основных МСА используют для выхода из строя в порядке выхода из строя для поддержки точных исключений. Предлагается выход на пенсию из-за порядка с контрольной точкой/откатом от исключений и ошибочных прогнозов. Поисковый процессор обработки килограммов, IIRC.)


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

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

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

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

+0

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

+0

@chamibuddhika: Если вы знаете какой-либо конкретный случай, когда что-то подобное делается, я хотел бы услышать об этом. AFAIK, любая оптимизация для минимизации отбрасывания полезных данных полностью выполняется внутри ЦП без управления программным обеспечением или видимого архитектурного состояния. В одном случае я могу думать о том, где что-то подобное делается, так как кэши данных помечены тегом VM, поэтому переключение между гипервизором и гостями (-ами) не должно приводить к аннулированию кешей. Фактически, это может включать в себя программное обеспечение, обнаруживающее эту функцию, и не выполняющее команду кэша-недействительности. google подробнее ... –

+0

Нет, на самом деле я этого не знаю. – chamibuddhika

2

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

http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6489970

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

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

Смежные вопросы