На протяжении многих лет две архитектуры противопоставлялись. Сейчас это уже история и сегодня провести строго различие между RISC и CISC непросто.
SPARCstation1, первая рабочая станция на базе RISC-процессора, выпущенная в 1989 году, оказалась мощнее и богаче функциями, чем любой другой настольный компьютер в мире. Ее быстродействие равнялось 12,5 MIPS при цене менее 9 тыс. долл.

Первые шаги компании Sun Microsystems были прочно связаны с разработками, сделанными в двух калифорнийских университетах — в Стэнфорде и Беркли. Четверке, состоящей из удачно дополняющих друг друга Энди Бехтольшейма, Винода Хостла, Скотта Макнили и Билла Джоя, удалось коммерциализовать несколько студенческих проектов и обойти основных конкурентов, имевших более значительный опыт. Они нашли формулу, обеспечившую им успех на этапе становления компании (об этом периоде в жизни компании наш еженедельник недавно рассказывал; см. статью «Sun Microsystems, от замысла до SPARC», Computerworld Россия, № 46, 2001).

На протяжении нескольких последующих лет основатели Sun оставались верными избранной стратегии, благодаря которой они сначала обрели общую системную архитектуру производительной рабочей станции, затем операционную систему к ней. Но недоставало еще одного важного компонента — собственного процессора. Решение находилось рядом; оно тоже рождалось в стенах тех же самых двух университетов. В ту пору под руководством молодых профессоров разворачивались революционные работы, приведшие к созданию процессоров с сокращенным набором команд MIPS и SPARC.

RISC vs. CISC

На протяжении многих лет две архитектуры противопоставлялись — RISC и CISC. Сейчас это уже история. Произошла, по сути, конвергенция архитектур, и сегодня строго провести различие между RISC и CISC непросто. Хронологически первой была архитектура процессоров, основанная на сложном наборе команд, много позже компьютеры с такими процессорами стали называть CISC (complex instruction set computer), но только после того, как появилась альтернативная архитектура RISC (reduced instruction set computer). Те, кто разрабатывал CISC-процессоры, о специфике своего труда не догадывались, они сами, не ведая того, «говорили прозой». Название CISC-архитектура не существовало само по себе, оно появилось для обозначения всего того, что не относится к RISC-архитектуре. В одной из статей факт появления этого названия, CISC, назван ретроактивным, то есть как реакция на все то, что противостоит RISC.

Стоит оговориться, что под архитектурой в данном случае следует понимать только систему команд, играющую роль интерфейса между аппаратным и программным обеспечением. На протяжении нескольких десятилетий системы команд эволюционировали, находясь в сложной зависимости от стоимости аппаратных ресурсов, и прежде всего самого дорогого из них — оперативной памяти. Инженерами руководило стремление сократить размер программ, для этого они старались вложить как можно больше функциональности в одну команду, например, перекрыть ею часто встречающиеся последовательности операций. Экономия памяти оставалась одной из важнейших технических задач. Как следствие, система команд постоянно совершенствовалась, и довольно скоро число команд в таких компьютерах, как IBM System/370 или DEC VAX, являвшихся эталонами в 70-х и 80-х годах, достигло почти трех сотен, и почти каждая из них имела до шести типов адресации. К тому же команды не имели фиксированной длины, число байт в формате команды (запись переменной длины содержала код операции и переменное число операндов) находилось в зависимости от типа адресации. Адресоваться можно было к регистрам или к памяти, адресация могла быть прямой или косвенной и так далее. Технически, чтобы реализовать все это многообразие команд, использовался метод, называемый микропрограммированием или микрокодированием, отдельные команды выполнялись посредством подпрограмм, хранимых обычно в постоянной памяти, которая была быстрее, но дороже обычной оперативной памяти на ферритах.

Среди тех немногих, кто избрал альтернативный путь, был Сеймур Крей: его работы, например, компьютер CDC 6600 или суперкомпьютер Cray-1, можно рассматривать в качестве идеологических предшественников будущей архитектуры RISC. Но вплоть до появления RISC идеология CISC лучше соответствовала имевшимся технологиям и была доминирующей.

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

Со стороны технологий программирования обстоятельством, повлиявшим на изменение отношения к CISC, стало появление оптимизирующих компиляторов. Результаты их работы уступали по качеству программам, закодированным вручную, но эта потеря оказалась не столь уж важной в условиях появившегося избытка аппаратных ресурсов. Менее жесткие требования к размерам программ позволили отказаться в большинстве приложений от программирования на ассемблерах в пользу языков высокого уровня, реализуемых компиляторами нового поколения. И тут обнаружилось, что сложная система команд, идеально адаптированная к программисту, пишущему на ассемблере, оказалась слишком громоздкой. С точки зрения программиста, пишущего на ассемблере, действительно удобнее написать одну сложную команду, чем последовательность простых команд, а вот с позиции компилятора все наоборот. Анализ существовавших компиляторов показал, что справедлив универсальный закон «20/80», то есть для 80% вычислений используется 20% команд.

Первые RISC-проекты

Исторической справедливости ради следует сказать, что первые попытки движения по направлению к RISC были сделаны еще в 1975 году командой инженеров IBM под руководством Джона Кока. Требовалось разработать специализированный процессор для управления телефонной станцией, в качестве прототипа была использована машина IBM/360, и при анализе ее работы выяснилось, что на самом деле в процессе исполнения задействовано ограниченное подмножество всего набора команд. Тогда и возникла идея сократить его, к тому же Кок стремился реализовать некоторые принципы, заимствованные у Крея. В итоге появился проект универсального вычислительного устройства IBM 801 Project. По одним источникам, этому проекту не уделялось большое внимание, по другим, он был сильно засекречен. Так или иначе, первые публикации, связанные с ним, появились только в 1982 году. В 1986-м на основе проекта 801 все же была сделана рабочая станция IBM RT PC, не имевшая заметного коммерческого успеха. Но на основании полученного опыта была создана и в феврале 1990 года запущена в производство новая станция RS/6000 на базе процессора POWER (Performance Optimized With Enhanced RISC).

Независимо от Кока в 1980 году у двух академических ученых — Джона Хеннесси из Стэндфордского университета и Дэвида Паттерсона из Университета Беркли появились аналогичные соображения по поводу сокращения числа команд. С этого времени началась параллельная работа двух студенческих коллективов, приведшая, в конечном счете, к появлению архитектур MIPS и SPARC соответственно.

Позже деятельность всех троих получила публичное признание. В 1994 году Кок был награжден медалью Джона фон Ньюмана, учрежденной обществом инженеров-электриков IEEE с формулировкой «За вклад в компьютерную индустрию, включая изобретение, разработку и внедрение архитектуры RISC и технологию оптимизации программ». В 2000 году Хеннесси и Паттерсон получили ту же награду «За свершение революции (буквально, creating a revolution) посредством исследования, популяризации и коммерциализации архитектурных инноваций». Именно Паттерсон придумал аббревиатуры SPARC (Scalable Processor ARChitecture) и RISC (Reduced Instruction Set Computer).

RISC I и RISC II

В октябре 1980 года в журнале Computer Architecture News была опубликована статья Паттерсона и Дэвида Дитцела «К вопросу о RISC» (The Case for the Reduced Instruction Set Computer). Эта публикация стала хронологически первым упоминанием термина RISC, с тех пор он настолько прочно вошел в обиход, что теперь трудно поверить, будто его кто-то когда-то придумал. Близость термина по звучанию слову «риск» не случайна: Паттерсон в своих воспоминаниях объясняет ее существовавшей на тот момент особенностью отношений с чиновниками из DARPA, от которых зависело решение о финансировании работы над процессором, которую он вел вместе с коллегой Карло Секуином. В Университете Беркли денег на разработку процессоров, естественно, не было, поэтому в поисках источника внешнего субсидирования Паттерсон и Секуин решили обратиться в государственное агентство, спонсировавшее средствами Министерства обороны целый ряд перспективных научных и инженерных направлений. Примечательно, что в зависимости от политической конъюнктуры и того, кто стоял во главе, это агентство меняло свое название, будучи то просто ARPA, то DARPA — с прибавлением D, от defense (оборона). Смена вывески происходила неоднократно, но при этом агентство не переставало субсидировать академическую науку. Тем, кто настаивает на привязанности ARPA/DARPA к Пентагону, стоит напомнить, что не будь его, не было бы сегодня Internet. Для выбора объектов финансирования существовало несколько правил, одно из них звучало так: «Высокий риск, высокая отдача» (high risk, high payoff). На сходстве RISC и risk решили сыграть молодые профессора и не проиграли, с этого момента в Беркли началась работа по созданию RISC.

В Стэнфорде Хеннесси с коллегами начал работать чуть позже, в 1981 году, и тоже на средства, выделенные DARPA.

Целью обоих университетских проектов было создание простой машины, которая, тем не менее, должна была соответствовать требованиям общей программы DARPA VLSI Program. Конечной целью программы являлась разработка универсальных наборов для создания компьютеров из готовых микросхем. Она имела серьезные последствия для всей ИТ-отрасли, например, в ее рамках были сотворены первые высокопроизводительные графические компьютеры Geometry Engine и Pixel Planes, давшие начало компании Silicon Graphics.

Два проекта отличались тем, что в Беркли стремились создать однокристальный процессор, насчитывающий примерно 40 тыс. транзисторов, обеспечивающий программирование на языке Си и работу в среде ОС Unix. Он мыслился как потенциальный конкурент недавно появившемуся компьютеру VAX-11/780 корпорации DEC. Эффективность этого подхода была доказана на практике в 1984 году. 32-разрядный RISC-II с 138 регистрами и работающий на частоте 3 МГц на целочисленных операциях работал быстрее VAX. А в Стэнфорде проект был более академичным, в качестве прототипа был использован тоже компьютер DEC, в данном случае PDP-10, и здесь в большей степени ориентировались на язык программирования Паскаль.

Миниатюризация ставила не просто технические проблемы. Одной из самых больших сложностей в переносе всего процессора на один кристалл было то, что в машинах со сложной системой команд и микрокодом, к числу которых относились и IBM/360, и VAX, постоянно обнаруживались ошибки в микрокоде, и их приходилось исправлять (ставить «заплатки», «патчить»). Кстати, IBM впервые предложила дискеты для распространения заплаток, которые было проще распространять, чем единственный на тот момент сменный носитель в виде рулона магнитной ленты. Твердотельное однокристальное исполнение исключало подобное «мягкое» внесение заплаток, следовательно, необходимо было как-то упрощать архитектуру, и это стало еще одним аргументом в пользу RISC. К этому выводу пришел Паттерсон, стажируясь в DEC, где он пришел к выводу о необходимости создания однокристального аналога VAX. Он описал свой подход в статье и подал ее в авторитетный журнал IEEE Computer, где она была отвергнута: рецензент посчитал, что сокращение системы команд приведет к излишней трате ресурсов на микросхеме.

Не видя другой возможности доказать свою правоту, Паттерсон вместе с группой студентов, в основном дипломников, решил перейти от слов к делу и уже в 1991 году построил первый процессор RISC-I, который насчитывал около 50 тыс. транзисторов и мог работать быстрее, чем VAX 11/780. Затем последовали процессоры RISC-II, SOAR (Smalltalk On A RISC) и SPUR (Symbolic Processing Using RISCs). А с 1984 года начались переговоры с Sun Microsystems — они, в конечном счете, и привели к созданию архитектуры SPARC, которая вобрала в себя все лучшее, что было в проектах RISC, созданных в Беркли.

Рождение SPARC

Одним из важнейших элементов любого научно-технического проекта является его коммерциализация, без нее он так и остается лабораторным экспонатом при всех своих достоинствах. Очень часто, особенно в отечественной литературе и в среде академических ученых, к коммерциализации относятся скептически. Значительную роль в переводе академических идей, выросших в лучших калифорнийских университетах, на промышленные рельсы сыграли инженеры и менеджеры из Sun и персонально Билл Джой, один из сооснователей компании. Он описал свой взгляд на RISC в статье Reduced Instruction Set Computers: Academic/Industrial Interplay. Статья была опубликована в середине 90-х, и ее легко можно найти на нескольких сайтах. В ней он высоко оценивает значение университетских работ для становления его компании. О том, как виделся этот процесс с другого берега, можно узнать из статьи Паттерсона и Секуина RISC I: A Reduced Instruction Set Computer. Реальное взаимодействие Sun с Паттерсоном, по словам последнего, началось в 1984 году, когда он принялся обсуждать особенности построения компиляторов для архитектуры RISC с ведущим специалистом Sun в этой области Стивом Мучником. Вскоре стартовал проект с кодовым названием Sunrise («восход»), переименованный позже в SPARC.

О том, как на практике компания Sun реализовала процессор с собственной архитектурой, Скотт Макнили рассказал в 1989 году в декабрьском номере журнала Upside. «SPARC — это всего лишь проект, мы предложили набор команд, который может быть реализован аппаратно. Мы знали чего хотели, и обратились в полупроводниковые компании, способные построить кристалл, который бы стал простым и дешевым средством для выполнения программ под Unix. Мы обращались в Intel и Motorola, но они сказали «нет». Мы продолжили поиск, и японцы были первыми, кто сказал «да». Так началось сотрудничество с Fujitsu».


Принципы RISC

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

  • Каждая команда выполняется за один машинный такт
  • Управление выполнением осуществляется чисто аппаратно
  • Все операции выполняются с использованием регистров. Доступ к памяти осуществляется только с помощью команд загрузки и выгрузки регистров
  • Команды имеют фиксированный формат и длину (обычно 32 разряда) и ограниченное количество методов адресации
  • Команды выполняются в конвейере, то есть за один такт выполняется несколько команд
  • Предусмотрено наличие как минимум 32 регистров общего назначения, выполняющих функцию своего рода сверхоперативной памяти
  • Многие вспомогательные функции мигрируют в область программного обеспечения

RISC и коммунизм

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

В 1991 году, в самый разгар войны RISC против CISC, в газете EE Times напечатана весьма остроумная статья Вала Попеску и Брюса Лайтнера «Буддизм и борьба коммунистов с CISC» (http://www.lightner.net/lightner/zen.html). В ней проводится параллель между подзабытым ныне явлением — пропагандой коммунизма и деятельностью активистов RISC. В доказательство приведен отрывок из статьи Роджера Росса, основателя компании ROSS Technology, позже приобретенной Fujitsu ICL, в свою очередь позднее ставшей Fujitsu Siemens (вот откуда у японско-немецкой компании современные «спарковские» корни).

Читаем фрагмент из сентябрьского номера 1990 года ежемесячника SPARC International Monthly Newsletter: «RISC — это имя, выбранное для архитектуры, которая позволит постепенно порвать все связи с прошлым (программной базой) и реализовать самый лучший из возможных набор команд, который позволит лучше понять теорию компиляции, поведение программ, снимет границы между вычислительными подсистемами и подсистемами памяти. Таким образом, можно сказать, что RISC — это будущее компьютеров. В ближайшие пять лет все вычислительные стандарты мигрируют на RISC. Сокращенный набор команд полностью перекроит современную компьютерную индустрию, изменит сложившееся представление о соотношении цена/производительность, основанное на CISC, и станет средством, которое выведет нас в XXI век».

Попеску и Лайтнер в своей статье заменили RISC на коммунизм и выполнили небольшую перефразировку, в результате появилось: «Коммунизм — это имя, выбранное для социальной и экономической теории, которая позволит постепенно порвать все связи с прошлым (достижениями капиталистического общества) и реализовать самую лучшую из возможных экономических систем, которая позволит лучше понять политическую теорию компиляции, поведение человека, снимет границы между государством и рабочими. Таким образом, можно сказать, что коммунизм — это будущее глобальной экономики. В ближайшие пять лет все экономические системы перейдут на коммунистическую организацию. Коммунизм полностью перекроит современное промышленное производство, изменит сложившееся представление о распределении силы и власти, основанное на традиционных экономических теориях, и станет средством, которое выведет нас в XXI век».