"Because two is always better than one" Micah Schmidt
Чем быстрее процессор, тем лучше... Долгое время это утверждение являлось
аксиомой для миллионов пользователей во всем мире. И вот регулярно, каждые
полгода-год, в зависимости от финансовых возможностей, эти миллионы дружными
рядами шли в магазины, выгребая последние центы и копейки, короче, "у.е."
лишь бы получить несколько десятков дополнительных мегагерц. Также регулярно
мы жаловались друг другу на недостаточную производительность домашних систем
и на необходимость будущего апгрейда, ибо в следующем месяце ожидается
новый "супер-пупер турбо-гипер 986 процессор". Мы пытались решать эту проблему
разгоном процессоров, что продлевало срок их службы, но это решение было
неполным. Редкий процессор выживал в системе больше года. В то же время,
уже несколько десятилетий существует способ повышения производительности
отличный от тупого наращивания мегагерц - это многопроцессорность или SMP
ака Symmetrical MultiProcessing (сразу оговоримся, что в статье не будут
затронуты ни AMP ака Asymmetrical MultiProcessing, ни Attached Processors,
ни SWAR ака SIMD With A Register, потому как круг их применения в домашних
условиях довольно узок. SMP, в этом смысле, предоставляет гораздо больше
возможностей, поэтому в дальнейшем синонимом SMP будет слово "многопроцессорность").
Формально многопроцессорность заключается в том, что процессоры, объединенные
общей локальной шиной, работают с общей оперативной памятью и другимим
ресурсами компьютера параллельно и независимо друг от друга. Поддержкой
SMP должна обладать и операционная система, не лишней будет также поддержка
со стороны приложений. Именно отсутствие поддержки SMP со стороны "домашней
операционной системы", которой de facto являлась Windows 9x и было одной
из основных причин отсутствия SMP машин у нас на столах, вторая причина
- дороговизна SMP-систем, но при ближайшем рассмотрении ее значение оказывается
в некотором смысле преувеличенным.
Итак...
1. SMP в железе
С середины 40-х годов XX века развитие суперкомпьютеров и мэйнфреймов напоминало
недавнюю ситуацию с современными PC. Эволюция в основном связывалась с
совершенствованием элементной базы. Сначала это были электровакуумные лампы,
"процессоры" на их основе обладали быстродействием 10000-50000 операций
в секунду. Потом их сменили полупроводники, и быстродействие достигло величин
порядка 10^5-10^6 операций в секунду. Следующими были интегральные схемы,
чье быстродействие превышало миллион операций в секунду. Но с каждым днем
появлялось все больше и больше задач, которые требовали вычислительных
мощностей недоступных на тот момент. Таким образом к концу 60-х темпы развития
элементной базы перестали успевать за ростом потребностей в вычислительных
мощностях, так как за 25 лет развития суперкомпьютеры увеличили свою производительность
только в 100 раз. Пришлось искать другой путь, и решение не заставило себя
долго ждать.
Идея была простой и очевидной - распараллелить вычисления и использовать
в вычислениях несколько процессоров или машин. Действительно, то, что выполняет
один процессор за два такта, два процессора выполнят за один. Едва возникнув,
эта технология разделилась на два ярко выраженных направления. Во-первых,
объединение нескольких машин в единую систему, а во-вторых, объединение
нескольких процессоров в пределах одной машины. Но на практике многомашинные
системы столкнулись с рядом проблем, главной из которых было несовершенство
технологии синхронизации запущенных процессов на машинах. Эти системы продолжали
использоваться и используются до сих пор в узкоспециализированных задачах,
т.к. позволяют наращивать мощь практически без ограничений и с меньшими
затратами, правда, как правило, рейтинги производительности венчают
многопроцессорные машины.
Суперкомпьютеры продолжали развиваться дальше, а тем временем наступила
эра РС. Официально родителем РС является IBM, наладившая массовый выпуск
этих устройств в 1981 году. Так как РС изначально рассматривался как компьютер
для бизнеса, т.е. для работы, то применение навороченных технологий типа
многопроцессорности, а с ней и параллельных вычислений (RISC, сопроцессор,
конвейер, несколько исполнительных устройств ака суперскалярность, кэш
также можно отнести к технологии параллельных вычислений) в машине для
массового рынка оказалось не целесообразно. Примером применения "крутых"
технологий может послужить Apple Lisa - первая машина с графическим интерфейсом,
появившаяся в 1982 году, которая, однако, не получила признания на рынке
и позже трансформировавшаяся в Apple Macintosh. Отсюда можно сделать вывод,
что должны были появиться новые области применения РС, чтобы заставить
производителей железа и программного обеспечения использовать новые технологии
в своих творениях, потому как со своей первоначальной ролью "навороченного"
калькулятора IBM PC справлялся без проблем.
С появлением локальных сетей и новых областей применений РС, жадных
до производительности, вроде компьютерной анимации, цифровой обработки
звука и, конечно, компьтерных игр, а также переносом научных и инженерных
приложений на РС требования к железу росли с каждым днем, тем самым провоцируя
производителей микропроцессоров внедрять технологии дотоле остававшиеся
невостребованными. Так случилось с сопроцессором, следующим стал кэш, потом
конвейер и суперскалярность, и наконец, элементы RISC-архитектуры и многопроцессорности
в большей или меньшей степени нашли применение во всех современных процессорах,
начиная с Pentium и K5. На сегодняшний день технология IA-32 (Intel Architecture,
32 bit) позволяет распараллелить вычисления на максимальном для себя уровне,
сохраняя совместимость со всеми ранее выпущенными программами и приложениями.
Следующей будет IA-64, которая пойдет еще дальше, обеспечивая, благодаря
VLIW (Very Long Instruction Word) распараллеливание кода даже не приспособленного
к параллельной обработке, т.е. фактически распараллеливание будет происходить
чуть ли не насильно, просто потому что процессору типа Itanium легче такой
код обрабатывать.
До сих пор производительность процессоров повышалась в соответствии
с законом Мура, но уже заметны тенденции, которые позволяют усомниться
в его незыблемости. Кремниевая технология имеет частотный предел, по разным
оценкам составляющий от 1 до 1,5 Ghz. Некоторые скажут, что арсенид галлия
и так называемые "трехмерные" чипы (это когда транзисторы располагаются
не на плоскости как теперь, а равномерно распределены в пространстве) позволяют
создавать более высокочастотные устройства, вплоть до нескольких десятков
гигагерц, однако, подобные технологии еще далеки от той стадии, когда их
применение станет экономически оправдано. А к пределу возможностей кремниевой
пластины мы подошли уже сегодня. К тому же память, системная шина и жесткие
диски не удваивают свое быстродействие каждые 18 месяцев, поэтому для наращивания
производительности актуальной становится SMP, как единственный пункт параллельных
вычислений, который оказался не реализован в наших домашних системах.
Поддержка SMP варьируется в зависимости от производителя и модели процессора,
причем не имеют значения степпинг и размер кэша, главное, чтобы процессоры
работали на одинаковой шине. На данный момент SMP поддерживают такие
процессоры, как Pentium P54C, Pentium Pro, Pentium II, Pentium III, их
производные типа Celeron и Xeon, а также Athlon. Частота FSB, а с ней и
частота процессора, в SMP-системе теряет свое обычное значение фактора,
определяющего производительность - в мире параллельных вычислений FSB всего
лишь определяет скорость работы с периферией; здесь часто выигрывает "крутая"
архитектура, а не "чистая" скорость.
Теперь чипсеты. Все интеловские чипсеты поддерживают SMP кроме 430TX,
430VX, 440EX, 440ZX и i810, со стороны конкурентов - только AMD’шный Irongate.
Все их фичи всем давно известны, рассмотрим только те, которые напрямую
касаются SMP. У Intel поддержка SMP реализована через шину GTL+, а у AMD
- через DEC’овскую EV6. В GTL+ процессоры рассматриваются локальной шиной
просто как еще одни busmaster-устройства, со всеми вытекающими отсюда минусами.
Плюс этой шины - в ее простой реализации и, главное, дешевизне матерей
на основе чипсетов с ее поддержкой как в однопроцессорном варианте, так
и в SMP варианте. EV6 реализует соединение каждого процессора с чипсетом
типа точка-точка на частоте FSB, что никак не сказывается на производительности
однопроцессорных матерей, однако, дает огромный прирост в SMP-конфигурациях.
Считайте сами: в то время как GTL+ позволяет работать с шиной только одному
процессору, которые затем меняются поочереди, EV6 поддерживает одновременную
работу чипсета и памяти со всеми процессорами в системе. Однако, практическая
реализация SMP-матерей на основе EV6 стоит просто немеряно дорого; авторы
предполагают, что разница в цене между многопроцессорной GTL+-матерью и
EV6-матерью может исчисляться разами.
SMP в софте 
