2013-10-26 2 views
0

Я работаю своим путем, хотя упражнения, связанные с суперскалярной архитектурой. Мне нужна помощь в концептуализации ответа на этот вопрос:опасности в трехстороннем суперскалярном трубопроводе

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

ADDI R1, R1, R1 
ADDI R1, R1, R1 
ADDI R1, R1, R1 

Если значение R1 начинается как 5, что должно его значение будет, когда эта последовательность была выполнена «

?

Я могу посмотреть на это и посмотреть, что, нормально, окончательное значение R1 должно быть 40. Как бы трехсторонняя суперскалярная машина достигла этого ответа? Если я правильно их понимаю, в этом трехстороннем суперскалярном конвейере эти три инструкции будут выбраны параллельно. Значит, с самого начала у вас была бы опасность, верно? Как я должен концептуализировать ответ на эту проблему?

EDIT 1: При декодировании эти инструкции, трехходовой суперскалярная машина будет, по необходимости, должны выполнить переименование регистров, чтобы получить следующий набор инструкций, правильно:

ADDI R1, R2, R3 
    ADDI R4, R5, R6 
    ADDI R1, R2, R3 
+0

Может набор команд быть переименован следующим образом: ADDI R2, R1, R1 ADDI R3, R2, R2 ADDI R4, R3, R3 ? Пожалуйста, исправьте меня, если я ошибаюсь. –

ответ

3

Проще говоря - вы не сможете выполнять эти инструкции вместе. Однако цель этого примера, похоже, не связана с опасностями (а именно: обнаружение того, что эта инструкция взаимозависима и должна выполняться последовательно с достаточным количеством киосков), это около переименование - оно служит для отображения того, что один логический регистр (R1) будет иметь несколько физических «версий» в полете одновременно в трубопроводе. Первоначальное значение будет иметь значение 5 (позволяет называть его «p1»), но вам также нужно будет выделить один для результата первого ADD («p2»), который будет использоваться как источник для второго, и снова для результатов второго и третьего инструкций ADD («p3» и «p4»).

Поскольку этот процессор декодирует и пытается выполнить эти 3 команды одновременно, вы можете видеть, что вы не можете просто использовать R1 как источник для всех - это не позволит каждому из них использовать правильное значение среднего вычисления, поэтому вам нужно переименовать их. Важная часть состоит в том, что p1..p4, как мы их дублировали, может быть выделен одновременно, и зависимости будут известны во время выпуска - задолго до того, как каждый из них будет заполнен результатом. Это, по сути, отделяет интерфейс от исполняющего интерфейса, что важно для гибкости производительности в современных процессорах, поскольку у вас могут быть узкие места где угодно.

+0

Благодарим вас за ответ. Я сделал редактирование (править 1). Будет ли третья инструкция в порядке, или же там должно быть переименование регистров? – basil

+0

Нет ничего плохого в исходной версии, за исключением того, что он не будет использовать 3-широкий трубу. И переименование - это что-то, что делалось все время, вся машина «говорила» в идентификаторах физических регистров мимо некоторого пикапа. Кстати, ваш новый код не делает то же самое, что и оригинал. – Leeor

+0

Точка взята. Как правило, как бы я концептуализировал, как регистры переименованы? – basil

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