3

Архитектура с уменьшенным набором команд (RISC) направлена на уменьшение количества команд, тем самым повышая производительность. Единственным недостатком этого подхода является то, что компиляторы должны быть "умнее".

Что имеет в виду мой лектор, когда она сказала, что "компиляторы должны быть умнее" и почему это так

3 ответа3

7

RISC, если честно сказать, означает "Уменьшенная сложность набора инструкций" - количество инструкций не обязательно сокращается, но каждая инструкция проще, с точки зрения машинных циклов, необходимых для ее выполнения, и с точки зрения количества вентилей ( или магазин микрокодов), посвященный его реализации.

Теория (которая, по крайней мере, частично реализована) заключается в том, что благодаря уменьшению объема логики управления, становится больше места в чипах для регистров и тракта данных. Следовательно, RISC-машины обычно имеют в 2-4 раза больше регистров, чем их CISC-аналоги.

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

В результате инструкции, сгенерированные хорошим компилятором RISC, практически невозможно расшифровать. Даже если вы хорошо знаете набор инструкций, выяснить, что какое-то значение из получаса назад все еще находится в регистре 12, в лучшем случае сложно, даже если бы не было запутанных операций сдвига и маски, происходящих все время.

(Для тех, кто, по-видимому, не верит, что я знаю, о чем я говорю, я впервые был связан с RISC с IBM 801 в начале 70-х, и я был на первом месте с Джорджем Радином и Марти Хопкинсом .)

2

Поскольку в процессоре RISC меньше инструкций, меньше шансов, что один высокоуровневый оператор будет хорошо преобразован в один код операции машинного языка.

Синоним RISC CPU - «архитектура хранилища нагрузки». По сути, это означает, что инструкции RISC, которые действительно работают, обычно работают только с регистрами. Если вы хотите работать со значениями, хранящимися в ОЗУ, вы должны выполнить явные инструкции LOAD, в то время как процессоры CISC, такие как x86, имеют инструкции, которые автоматически делают это. У процессоров RISC исторически было больше регистров, чем у x86 - и хороший код будет хорошо управлять доступными регистрами, чтобы избежать ненужных обращений к памяти, что означает, что компилятор должен это учитывать.

Другое дело, что процессоры RISC обычно предоставляют только минимальную "инфраструктуру", необходимую для связи.

Например, процессоры x86 имеют понятие "стек", в котором вы можете выдвигать значения, а затем "выталкивать" их (есть инструкции PUSH и POP ). Существует также инструкция CALL - она помещает указатель текущей инструкции в стек и затем переходит к адресу назначения - обычно это подпрограмма или функция. Затем может быть выдана команда RET для удаления указателя сохраненной инструкции и возврата из исходной функции. Вложенные подпрограммы удобны, и вы можете использовать PUSH и POP чтобы легко задать параметры для подпрограмм.

Например, на MIPS все, что у вас есть, это jal для "Jump and Link" - он помещает указатель текущей инструкции в регистр и затем переходит на этот адрес. Если вы хотите сделать что-то вроде стека или инструкции CALL x86, вы должны сделать это вручную. Это требует большего интеллекта от компилятора.

0

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

Примером умножения в CISC будет: MUL 1: 3, 4: 2 (умножить 1: 3 и 2: 4). Эта команда загружает значение в позиции 1: 3 в регистр, загружает значение в 4: 2, умножает их вместе и сохраняет обратно в 1: 3.

Процессоры RISC могут:

  • НАГРУЗКА А, 1:3
  • НАГРУЗКА B, 4:2
  • ПРОД А, Б
  • МАГАЗИН 1:3, А

... 4 операции RISC до 1 операции CISC.

Поскольку для RISC требуется больше операций, чтобы даже выполнить простейший расчет умножения - представьте, сколько еще работы требуется для таких вещей, как рендеринг видео или игры?

Имея это в виду - компиляторы, которые создают программное обеспечение из кода, введенного программистом, должны быть "умнее", чтобы они знали, как упростить сложные фрагменты кода и сложные команды для архитектуры RISC.

Надеюсь, что это имеет смысл. Для дальнейшего чтения, возможно, стоит взглянуть на:http://www.engineersgarage.com/articles/risc-and-cisc-architecture?page=5.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .