2016-02-07 3 views
3

Я недавно узнал о невыполнении ЦП по этой ссылке https://en.wikipedia.org/wiki/Out-of-order_executionПочему не выходят из строя процессоры?

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

Я имею в виду, если у меня есть что-то вроде:

x = 1; 
y = 2; 
x = x+y; 
print x; 
print y; 

, что предотвращает «печать у» команды от выполняется до «печать х»?

Возможно, у меня что-то не так получается в отношении такого процессора, можете ли вы объяснить это мне?

Заранее спасибо

+2

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

+0

Копаю память колледжа здесь ... но я считаю, что это связано с путями, которые принимают разные инструкции. Две команды печати имеют один путь, поэтому второй должен дождаться первого. Но если две команды используют разные пути, они могут двигаться самостоятельно, пока они не пересекаются с путём другой инструкции, используемой в настоящее время –

ответ

2

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

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

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

0

@ paul-a -клайтон уже дал отличный ответ. Я хотел бы упомянуть еще одно.

Раньше архитектуры нестандартного порядка были пресловутый хлопот. Основная проблема заключалась в том, что они не могли гарантировать точные прерывания. Это изменилось в конце 80-х - начале 90-х годов благодаря решениям, предложенным в Smith & Pleszkun's seminal paper. Они представили идею буфера переупорядочения, который позволяет инструкциям выходить из строя, но совершать в порядке.

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