Доподлинно неизвестно, руководствовались ли специалисты компании Sun Microsystems (http://www.sun.com) образными аналогиями, подбирая несколько лет назад кодовое название для масштабного проекта разработки нового поколения процессорной архитектуры SPARC, однако имя они выбрали как нельзя более подходящее. Действительно, одно из современных чудес света, Ниагарский водопад, отлично годится на роль символа неукротимой мощи и как раз подстать новому процессору Niagara. Однако есть и еще одна аналогия, более глубокая, более метафоричная и вместе с тем не сразу бросающаяся в глаза, но описывающая суть проекта и готового решения гораздо масштабнее и основательнее — и сила водопада, и сила нового процессора таится в потоках, с той лишь разницей, что в первом случае это потоки воды, а во втором — вычислительные потоки современных приложений.
И хотя до официального объявления, намеченного на начало 2006 г., времени еще много, туман неизвестности, нависший было над самим проектом Niagara, да и над будущим SPARC вообще, постепенно начинает рассеиваться, и взору реальных заказчиков и потенциальных клиентов предстает любопытная картина.
Годы, потраченные специалистами компании на проектирование предыдущих процессорных поколений и построение сложных систем обработки данных на их основе, позволили четко определить основное узкое место в архитектуре всех современных компьютерных систем и наметить наиболее эффективный способ его нейтрализации. Если взглянуть на типичный для любой реализации фоннеймановской архитектуры абстрактный поток обработки данных, то в нем можно выделить два наиболее общих, последовательно сменяющих друг друга этапа — этап вычислений, когда основная нагрузка ложится на процессор, и этап обмена с памятью, когда процессор фактически простаивает, ожидая новых порций данных. Латентность памяти, даже самой современной и высокоскоростной, огромна; время, затрачиваемое на ее чтение/запись, в разы превышает время на сами вычисления. Ситуацию не спасает и кэширование — объем промежуточных кэшей второго либо третьего уровня нельзя наращивать до бесконечности, да и ситуации с «промахами», когда нужного значения не оказывается ни в одном из них и процессору приходится обращаться к памяти напрямую, не столь редки, как хотелось бы. Традиционный путь повышения производительности, основанный на увеличении объемов интегрированной на кристалле кэш-памяти и повышении тактовой частоты процессоров, оказался, в общем-то, тупиковым — несмотря на все ухищрения инженеров прирост производительности при переходе от поколения к поколению измеряется единицами процентов, редко переваливая на второй десяток.
Вместе с тем в руках проектировщиков минимум десятилетие находится мощное, но практически никак не используемое средство борьбы с непроизводительными простоями — многопоточность. Возникшая некогда как упрощение многозадачной программной архитектуры, призванное сократить издержки на ресурсоемкое переключение контекста, сегодня многопоточность превратилась в основу большинства сложных корпоративных приложений, позволяя им одинаково эффективно функционировать как на однопроцессорных, так и на мультипроцессорных системах. Фактически многопоточность уже стала стандартным атрибутом всех распространенных современных систем, благо и в ОС Solaris, и в ПО промежуточного слоя Java 2 EE, и в ПО сторонних поставщиков, таких, как Oracle или SAP, она давным-давно реализована. Инженеры Sun Microsystems здраво рассудили, что в моменты, когда один вычислительный поток обращается к памяти и «замирает», вполне логично запустить на исполнение другой поток, а если и он будет вынужден работать с ОЗУ — перейти к следующему. Это так называемая аппаратная многопоточность на одном ядре, известная читателям, в частности, по продуктам Intel. Прибавьте к ней интеграцию на одном кристалле нескольких ядер, реализованную с переходом на новый более «тонкий» технологически процесс, — это и будет проект Niagara.
Однако это теория; на практике же (а реальные процессоры сейчас проходят всесторонние испытания в действующих ИС заказчиков) все выглядит следующим образом: 90-нм технология позволила встроить в процессор сразу восемь полноценных самостоятельных ядер, каждое из которых способно исполнять до четырех потоков. Итого в одном кристалле пользователям доступно 32 «виртуальных» процессора, способных, по заявлению директора Sun по развитию процессорных технологий Билла Шерренберга, выполнять возложенные на них задачи ничуть не хуже реальных физических устройств. Высокая степень интеграции позволила разместить на самой микросхеме еще и контроллер памяти стандарта DDR2, а в придачу к нему четыре контроллера Gigabit Ethernet. Первые образцы будут функционировать на частоте 1,2 ГГц при тепловыделении на уровне 50 Вт, в дальнейшем же предполагается значительно поднять тактовую частоту процессора.
Представьте себе сложную многопроцессорную систему — шкаф, требующий немало места, еще больше внимания при обслуживании и совсем уж непомерно электроэнергии. Сложно, дорого, но на целом ряде задач крайне эффективно. Sun Microsystems фактически удалось «ужать» такую систему до размеров одного кристалла — со всеми вытекающими отсюда преимуществами. Правда, следует уточнить, что Niagara — принципиально однопроцессорное (в понятиях разъемов на системной плате) решение, что, учитывая реализованные в ней возможности, не так уж и удивительно.
Стоит еще отметить, что Niagara — это в некотором роде специализированный процессор, при его разработке учитывались результаты исследований особенностей работы многопоточных приложений, и он наилучшим образом подходит для построения серверных систем, ориентированных на предоставление сетевых сервисов. Его близкий «родственник» — микропроцессор Rock, предназначенный для построения серверов, занятых интенсивной обработкой данных, должен появиться немного позже.