На главную страницу AlgoNet В сотрудничестве с ZDNet
АРХИВ СТАТЕЙ 2005-6-2 на главную / новости от 2005-6-2
AlgoNet.ru
поиск

 

Место для Вашей рекламы!

 

Все новости от 2 июня 2005 г.

Кто в ответе за порядок

Мы не будем углубляться в хорошо известную нашим читателям историю разделения всего процессоростроения на две школы — CISC и RISC — и их последующего сближения, связанного с превращением “истинных” СISC в “псевдо-CISC” типа Intel Pentium 4, а “пуританских” RISC — в несколько перегруженные дополнительными командами и длинными многостадийными конвейерами чипы вроде POWER5. Главное, что можно вынести из этого противостояния, заключается в следующем: существует два вполне жизненных и принципиально разных подхода к проблеме оптимизации программного кода.


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

Поклонники CISC-подхода предпочитают при компиляции не столь глубоко оптимизировать программный код, перекладывая большую часть работы на процессор. Следование этому подходу связано прежде всего с тем, что машинные команды современных “псевдо-CISC"-процессоров довольно далеки от исполняемых ядром чипа микроопераций, на которые распадаются CISC-команды, так что для подобных процессоров программа в машинных кодах представляет собой лишь эдакий слегка оптимизированный и изложенный в довольно общем виде алгоритм, допускающий, в зависимости от типа используемых в конкретном “псевдо-CISC"-процессоре микроопераций, весьма широкую трактовку — правда, всегда дающую один и тот же результат. В результате сам процессор на этапе между декодированием команд и преобразованием их в микрооперации и исполнением микроопераций вынужден заниматься глубоким переупорядочиванием микроопераций, оптимизируя загрузку параллельно работающих логических блоков.

Следствием переупорядочивания микроопераций стало резкое усложнение чипов: в них появились “окна инструкций”, где размещаются декодированные команды (точнее, их микрооперации) с учетом их взаимного влияния, множество дополнительных невидимых программисту “виртуальных регистров”, в которых хранятся промежуточные результаты исполняемых в измененном порядке микрокоманд, а также подсистемы установления соответствия между “виртуальными” и доступными программисту регистрами ("механизм переименования регистров"). В результате современные “псевдо-CISC"-чипы с точки зрения программиста и с точки зрения проектировщика микропроцессоров выглядят совершенно по-разному.

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

Педант заметил бы, что существует и принципиально иной способ программирования — речь идет об “архитектурах с очень длинными машинными словами” (Very Long Instruction Word, VLIW). Каждое такое “длинное слово” содержит полный набор инструкций для каждого процессорного блока, так что сам процессор становится крайне простым. По сути, перед нами — доведение RISC-концепции полного контроля над процессом исполнения команд до ее логического завершения.

Однако архитектура VLIW встретила две проблемы. Во-первых, оказалось, что создать компилятор, действительно в совершенстве оптимизирующий программу на столь низком уровне, очень непросто, а любой просчет компилятора из-за полного отсутствия “внутричиповой” оптимизации обходится очень дорого. Во-вторых, получается, что для разных задач будет оптимальной разная архитектура VLIW-кристалла, так что с универсальностью этих процессоров все обстоит не столь безоблачно, да и самая небольшая ошибка при выборе числа и типов логических блоков процессора опять-таки ведет к резкой потере производительности... В общем, единственная коммерчески доступная сегодня архитектура подобного типа, Intel Itanium, оказывается не слишком популярной (правда, в Intel свою процессорную архитектуру предпочитают называть EPIC, избегая термина VLIW, но суть от этого не меняется).

 

← май 2005 1  2  3  5  6  7  8  9  10 июль 2005 →
Реклама!
 

 

Место для Вашей рекламы!