RISC - запрещенные последовательности команд - PullRequest
0 голосов
/ 01 ноября 2018

Введение в книгу по компьютерной системе показывает разницу между CISC и RISC следующим образом.

CISC: артефакты реализации, скрытые от машинного уровня программы. ISA обеспечивает чистую абстракцию между программами и как они выполняются.

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

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

1 Ответ

0 голосов
/ 21 ноября 2018

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

Допустим, мы хотим переместить данные из позиции A памяти в другую B - архитектура CISC представит эту операцию как инструкцию, подобную этой: "mov B, A" ( macro-op ). Теперь один из способов реализовать это на уровне микроархитектуры - сделать это в два этапа, т.е. выполнить две инструкции ( micro-ops ) - загрузить данные из A в регистр и затем сохранить из которые записываются в позицию памяти B. Другой способ сделать это - переложить перемещение данных в сопроцессор, который мог бы быть более эффективным при перемещении данных в памяти (механизм DMA ). В любом случае, программист кодирует операцию как отдельную инструкцию (инструкция mov), не требуя знания о том, как эта операция будет фактически выполняться на уровне микроархитектуры

С другой стороны, ISA RISC имеют тенденцию (хотя не всегда ) представлять операции, поскольку они фактически выполняются в процессоре (т.е. в форме микроопераций), и задача программиста состоит в том, чтобы объединить эти операции в более сложные, которые делают то, что программист хочет, чтобы программа делала. Операция перемещения, описанная выше в качестве примера, должна быть явно закодирована как две инструкции или с использованием DMA.

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

Надеюсь, это поможет.

...