Структура современных процессоров. Окружение процессора. CISC, RISC, VLIW
Структура современного процессора
Современный процессор (CPU) — это сложный многоядерный комплекс, включающий:
- Суперскалярность: способность процессора выполнять несколько инструкций параллельно за один такт.
- Кэш-память: иерархическая структура сверхбыстрой памяти (L1, L2 для каждого ядра и общая L3).
- Множество ядер: от 1 до 16 и более физических ядер на одном кристалле.
- Высокие тактовые частоты: от 500 МГц до 5 ГГц.
Архитектуры наборов команд
Философия проектирования процессоров исторически разделилась на три направления. Главное отличие между ними — баланс между сложностью “железа” (процессора) и сложностью компилятора.
CISC (Complex Instruction Set Computer)
Философия: «Сложный процессор, простой компилятор».
Команды имеют разную длину. Одна сложная команда может напрямую обращаться к ОЗУ, производить вычисления и сразу сохранять результат обратно.
- Плюсы: Программы занимают мало места в памяти (высокая плотность кода). Компилятору легко переводить языки высокого уровня в машинный код.
- Минусы: Процессору очень тяжело и долго расшифровывать (дешифровать) команды разной длины. “Железо” получается сложным, требует много транзисторов для логики управления.
RISC (Reduced Instruction Set Computer)
Философия: «Простой процессор, сложный компилятор». Набор команд сильно сокращён, все они имеют строго одинаковую длину. АЛУ работает только с регистрами, а для работы с ОЗУ есть только команды чтения и записи.
- Плюсы: Дешифратор процессора максимально прост, поэтому каждая команда выполняется молниеносно (строго за 1 такт). Аппаратная часть дешевле и энергоэффективнее.
- Минусы: Чтобы сделать сложное действие, нужно выполнить 4-5 простых команд, из-за чего код программы “раздувается”. Процессору требуется огромное количество регистров для хранения промежуточных данных.
VLIW (Very Long Instruction Word)
Философия: «Параллелизм на плечах компилятора». Архитектура призвана значительно увеличить скорость выполнения программ процессором за счет распараллеливания. Компилятор сам анализирует код программы, находит независимые друг от друга операции и упаковывает их в одну «сверхдлинную» машинную команду (пакет).
- Плюсы: Высокая скорость выполнения программы, так как процессор аппаратно выполняет все инструкции из готового пакета одновременно на разных исполнительных блоках. Само “железо” процессора освобождается от сложной логики анализа зависимостей на лету.
- Минусы: Полная зависимость от качества компилятора. Если компилятор не сможет найти в коде достаточное количество независимых команд, часть исполнительных блоков процессора будет простаивать впустую.