«

»

Июл 27 2013

RISC vs CISC

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

Во первых очень важно понимать, что современные процессоры архитектуры x86_64 не являются полноценными CISC-процессорами. Хотя они и исполняют CISC набор команд, однако внутри у них RISC-ядро. Преобразование CISC-команд в RISC-команды производится внутри процессора с помощью так называемых микрокодов. Т.е. в плане производительности они не сильно уступают возможностям RISC-архитектур.

Во вторых используемая RISC-процессорами система отдельных операций load/store для работы с памятью требует большего числа регистров. RISC-процессоры имеют более простую структуру и могут позволить себе иметь куда больше регистров, что, казалось бы нивелирует этот минус. Но тут есть две не очевидные вещи: соглашение о вызовах и переключение задач (в том числе и обработка прерываний). Необходимость сохранять большое кол-во регистров это довольно серьёзная нагрузка на память, а она в современных компьютерах является наиболее узким местом. Для х86_64 сохранение текущего состояния требует 512 байт памяти (и это без учёта новых ymm регистров, с ними потребуется уже весь КБ), а если регистров станет больше?

В третьих процессоры x86_64 имеют одно маленькое преимущество при обработке прерываний. Дело в том, что переход на обработчик прерываний может быть выполнен не быстрее чем завершится исполнение текущей инструкции. Даже если это CISC-инструкция транслированная в микрокод. При современных тактовых частотах процессоров даже если реакция на прерывания происходит раз в 5-10 тактов, то время реакции всё равно составляет 1-2нс. Сама проверка прерываний внутри процессора это тоже некоторая работа и RISC-процессоры делают её чаще.

Ну и наконец так ли просты нынешние RISC-процессоры как их предшественники в 80-х годах? Сейчас уже наличие не только сопроцессора, но и блока SIMD является насущной необходимостью. Обязателен блок MMU, аппаратные средства отладки и мониторинга производительности. Да и как показывает ситуация с инструкциями CRC32 и набором AES-инструкций сложные инструкции зачастую быстрее набора простых, причём быстрее в разы.

На основании выше изложенного мне кажется что если уж и начинать борьбу за эффективность процессоров, то её следовало бы начинать с избавления платформы x86_64 от исторического наследия, вроде 16-ти битного режима (а позднее и 32-х битного) с последующим изменением механизма кодирования уменьшенного, в результате чистки, набора команд. В создание новой платформы с нуля мне не очень верится, ибо судьба IA-64 и Itanuam`а показательна. Хотя с чисто технической стороны IA-64 была отличной архитектурой.

Поэтому я считаю что будущее либо за развитием x86_64, либо за новой VLIW-архитектурой, если переход на неё смогут осуществить.

Добавить комментарий