|
Думало Двояковыпуклое или
О двухпроцессорности
Материнская плата MSI 694D Pro-A
Андрей Забелин

С многозадачностью человек справляется,
мягко скажем, неумело. Хотя, например, если
он захочет почесаться, то сможет одной
рукой чесать щеку, другой - глаз, правой
ногой чесать левую, и в то же самое время
скрестись спиной о дверной косяк. Да, это,
несомненно, получится, но одновременно
решить в голове пару дифференциальных
уравнений с частными производными второго
порядка далеко не каждому по плечу. Это,
несомненно, недоработка, недоделка, “баг” -
и с этим надо было что-то делать еще в
древние времена. Тогда люди тоже кое-что
умели, но самая эффективная
многозадачность достигалась, когда человек
высматривал себе добычу и одновременно
пускал слюну.
Наверное, именно это время можно считать
прародителем многозадачности. Да уж,
мужчина и женщина с тех пор пошли разными
путями, и единственным действительно
многозадачным существом стала только
женщина. Кто со мной не согласен -
попробуйте зайти на кухню и понаблюдать за
процессом приготовления пищи. Одна рука
засовывает в комбайн морковку, другая -
мешает еду в сковородке, правая ноздря
вынюхивает запах из дальней правой
кастрюли, одновременно анализируя его на
баланс специй, а левая нога вытирает
тряпкой упавший (не без содействия какой-нибудь
домашней вольногуляющей крыски) на пол соус.
Впечатлились? А мужики только тем и
занимались, что пытались соорудить
устройство, которое оправдывало бы их лень.
Ну и, соответственно, насооружали. Как вам
компьютер, который за секунду делает
столько расчетов, что человеку понадобится
несколько сотен миллионов лет, чтобы эту
операцию провернуть? Да, насчет лени я
немного загнул, но зачем, спрашивается, так
много считать надо? Чтобы соорудить еще
какой-нибудь супер-ультра-турбо-гипер-быстрый
калькулятор? Или рассчитать большой взрыв
страшной бомбы, чтобы удовлетворить свою…
ну как бы это сказать поприличнее…
черт, не получается. Именно этим мы и
займемся. Точнее сказать, займемся мы не тем,
что сказать не получилось, а тем, какими
путями человечество решало проблему этого…
удовлетворения - то есть ростом мощностей
вычислительных систем.
С увеличением тактовой частоты
процессора и так все понятно - чем быстрее,
тем лучше. Зависимость производительности,
конечно, не линейная, так как процессор
тормозят разные, к его лапам присоединенные,
утяжелители - вроде шин и прочего барахла. А
если параллельно подключить еще один
процессор? Будет ли все работать в два раза
быстрее? Опять нет. Мало того - иногда, когда
задача не оптимизирована под несколько
процессоров, она будет выполняться быстрее
на однопроцессорной, а не на
восьмипроцессорной машине. Удивлены?
Все просто - система каждый раз будет
заниматься распределением работы,
синхронизацией процессов, сборкой
результатов и так далее, а не действительно
полезной работой. Приходим мы к тому, с чем
приходится считаться любой компании,
разрабатывающей новое железо -
программному обеспечению. И здесь основное
слово, которому должны следовать
разработчики софта - оптимизация. Допустим,
у вас на машине стоят 500 процессоров,
работающих параллельно, а процент
неоптимизированного кода программы (точнее,
неоптимизированного вычисляющего блока
программы) составляет 10%. Следовательно, эти
10% будут выполняться только одним
процессором, в то время остальные будут
простаивать. И если даже всю остальную
работу (90%) процессоры закончат за один такт
(утопия, но предположим), то, по сравнению с
однопроцессорной системой, расчеты будут
выполняться всего лишь в десять раз быстрее
(10% времени на мультипроцессорной системе и
100% - на однопроцессорной). И вот вам расчет -
500 процессоров дадут только десятикратное
увеличение производительности.
Так как основные расчеты процессор
производит в системной памяти, то встает
вопрос - каждому процессору выделить свою
память или сделать память общей для всех?
Именно по этому критерию классифицируются
многопроцессорные компьютеры. Существует
две основные архитектуры - SMP (Symmetrical
MultiProcessing) и MMP (Massive Parallel Processing). SMP
подразумевает наличие общей, а MMP -
распределенной памяти для всех процессоров.
Естественно, появились гибриды-мутанты,
совмещающие обе архитектуры - например, NUMA,
где память физически распределена, но
логически общедоступна. Если затрагивать
тему распределенных вычислений в целом, то
нельзя не отметить проекты в Сети, когда
пользователи сами устанавливают себе
программное обеспечение, обсчитывающее
определенную часть общих вычислений
проекта, а затем посылают результаты на
общий сервер. Впрочем, описание самых
распространенных архитектур вы найдете во
врезке, а пока давайте оторвемся от теории и
приступим к положению дел на сегодняшний
момент времени.
Как вы помните, многопроцессорные SMP-системы
на базе процессоров Intel существуют уже
довольно долго, и Intel является чуть ли не
монополистом на рынке многопроцессорных PC-совместимых
компьютеров. Процессоры Intel используют шину
GTL+, в которой каждый новый процессор
представляет собой очередное Bus-Master
устройство, а у шины EV6, которая
используется в процессорах Athlon, каждый
процессор соединяется с чипсетом по
технологии “точка-точка” на частоте FSB. Это
дает гораздо больший прирост в скорости в
SMP-режиме, чем GTL+, так как последняя
позволяет работать с шиной по очереди
только одному процессору. У EV6 таких
недостатков нет - каждый процессор может
одновременно работать с чипсетом и памятью,
но реализация SMP-системы на базе EV6 очень
недешева. Такие материнские платы будут
стоить намного дороже, чем
многопроцессорные платы на базе GTL+. Хотя
сейчас у AMD есть шанс прорваться на рынок
высокопроизводительных серверов - именно
из-за стоимости производства SMP-материнских
плат сделать ей это будет трудно.
Итак, перейдем к практике. Обычно в
мультипроцессорных системах нуждаются те,
кто активно использует приложения,
требовательные к вычислительной мощности
процессора. Это могут быть серьезные двух- и
трехмерные графические редакторы,
математические пакеты, а также
обыкновенные игры. Не знали? Да-да,
некоторые игры, например, Quake III, умеют
работать в мультипроцессорных
конфигурациях. И не только работают, но и
показывают приличный прирост в скорости, по
сравнению с однопроцессорной системой. Но в
этом вы сможете убедиться чуть позже, а пока
давайте поставим галочку напротив графы “конфигурация”:
|
Процессоры: |
Intel Pentium III 700 VUw (100 VUw FSB) - ldt inerb |
|
Материнская плата: |
MSI 694D Pro-A |
|
Жесткий диск: |
IBM DTLA 13 Гб |
|
Видеокарта: |
Creative GeForce2 GTS |
|
Оперативная память: |
128 Мб Micron |
|
Система: |
MS Windows 2000 Pro |
Надо сказать, инсталляция
двухпроцессорной материнской платы в
обыкновенный ATX-корпус - вещь не такая уж
простая. То конденсатор норовит зацепиться
за какой-нибудь выступ, то второй процессор
кулером своим тычется в блок питания. После
того, как мы с горем пополам все-таки
засунули “мать” в корпус, она стала себя
как-то странно вести - несвоевременно “вешаться”,
полностью “заглючивать” экран, и вообще
творила всякие безобразия. Оказалось, что
некоторые контакты на материнской плате
соприкасаются с корпусом. В общем, решили мы
не портачить - прицепили “мать” ушами к
задней стенке, вытащили блок питания из
корпуса, а сам корпус отправили во
временный утиль по ненадобности.
Разговор про материнскую плату вообще
отдельный. Чего стоит только заглянуть в BIOS
- волосы встают дыбом! Тут каждая менюшка
раза в полтора длиннее, чем у аналогичной
однопроцессорной “мамы”. Немного меньше
слотов PCI, чем у обычной платы (пять штук,
если точнее), так как установлено
дополнительное процессорное гнездо, а
слотов ISA вообще нет, хотя чипсет
теоретически их поддерживает. Зато есть
один CNR и AGP 4x. В целом плата произвела
благоприятное впечатление, в отличие от
намного более громоздких и менее
функциональных аналогичных экземпляров.
Памяти поддерживает до 2 Гб (4 разъема DIMM), а
кроме двух встроенных каналов Ultra ATA/66 (спасибо
южному мосту 686A) имеет отдельный контроллер
Ultra ATA/100 от Promise. Четыре светодиодных датчика
показывают состояние системы, и по ним в
случае неполадок можно определить, что
случилось с “мамой”. Кстати сказать,
именно эта модель завоевала кучу наград
разных тестовых лабораторий (каких именно,
можно посмотреть на сайте MSI), но нам все же
от этого было не легче.
Первая загрузка сразу дала о себе знать -
Windows поморгала экраном, показала курсор
мыши и повисла. “Тыдым-с”, - сказали
предыдущие драйвера i815E чипсету от VIA,
который вдруг появился как бы из ниоткуда.
После выкачивания порции патчей и апдейтов,
Windows наконец-то загрузилась, но драйвера
видеокарточки решили, что их нагло обманули
и наотрез отказались общаться к системой.
Пришлось сносить драйвера для GeForce2 и
ставить все (нежно и аккуратно) заново.
Система наконец-то запустилась, но второго
процессора так и не заметила. “Может быть,
Quake III?” - подумали мы и запустили игру со
строчкой “r_smp 1” (включение
многопроцессорной поддержки) в консоли.
Чуда не получилось - после загрузки Quake
намертво завис. И тут всем нам стало как-то
не по себе –
мы поняли, что в течение следующих
нескольких часов нам предстояла долгая и
мучительная настройка Windows 2000 Pro. После
мучительных переговоров с Windows 2000 и
установки всевозможных драйверов и приблуд,
наконец-то все заработало. Система немного
покапризничала, так как “детонатор” не был
сертифицирован Microsoft, но, смирившись,
предупредила, что если будут глюки, то она
ни в чем не виновата.
Буквально через полчаса эти глюки и
начались, но об этом чуть позже. Для начала
была исполнена показательная порка Windows
десятком-вторым ресурсоемких стандартных
задач. Кряхтя и отплевываясь на диск,
система показывала равномерную загрузку
обеих процессоров, однако редко
превышающую 50% для каждого процессора.
Далее пошли стандартные синтетические
тесты. CliBench, поддерживающий SMP, с резвостью
взялся тестировать систему на разные
параметры, а мы тем временем злорадно
смотрели на “Диспетчер Задач” в разделе “Быстродействие”.
Странно, но этот специальный SMP-тест тоже
так и не смог загрузить оба процессора
больше чем на 50%. Единственным моментом,
когда загрузка системы была 100%, был тест на
скорость памяти. И все же - ничего
сверхскоростного продемонстрировано не
было. Опечалившись, мы решили взяться за Quake
III.
Запустив Quake и быстро переключившись на
панель TaskManager, мы увидели, что процессоры
опять не грузятся на “полную катушку”.
Стоило набрать в консоли “r_smp 1” и
перезагрузиться, как при следующем старте
игра просто зависла. За первым дублем
последовал второй. Игра запустилась, но при
попытке запустить демо повесила систему
наглухо. “Вот те на”, - подумали мы,
вспомнив про только что установленный
ServicePack на Windows 2000. Откат назад не помог,
происходила та же самая история. Спас новый
апдейт для Quake, правда, находящийся в стадии
бета-версии. В нем немного
усовершенствована физика движения
объектов, поэтому нагрузка на процессор
возросла. После установки патча игра
запустилась, но ни одну из записанных ранее
демок играть не хотела (о несовместимости
было, правда, написано в документации к
патчу, но это не меняло дела). Вместо старого
и скучного “demo001.dm3” появилась новая “демка”,
гораздо более кровавая и динамичная. Даже
GeForce2 GTS при разрешении 800 x 600 @ 32 не выдавал
более 50 FPS. Причиной этому была, скорее всего,
“сырая” версия апдейта, а не сам
ускоритель.
Первое тестирование проводилось с
установленными 128 Мб оперативной памяти. Во
время проигрывания демо-файла местами
наблюдалось обращение с своп-файлу, и в эти
моменты игра притормаживала. Отключение
поддержки SMP в Quake или же принудительная
установка в Task Manager использования только
одного процессора для задачи “quake3.exe” не
меняли дела. Вдоволь намучившись с системой,
мы решили вынуть один процессор. Каково же
было наше удивление, когда вдруг Quake совсем
перестал тормозить, а свободной физической
памяти стало намного больше. Впрочем, это
понятно - ведь Windows 2000 в двухпроцессорной
конфигурации использует дополнительную
память и ресурсы системы для
автоматического распределения процессов и
нитей. Для чистоты эксперимента было
поставлено еще 128 Мб и на место поставлен
второй процессор. При объеме памяти в 256 Мб
Quake III действительно перестал тормозить, да
и вся система стала работать намного
шустрее.
Когда речь идет о мультипроцессорных
конфигурациях и играх на них, часто
тестирование производится на самых низких
разрешениях, дабы узким местом был
процессор, а не видеокарта. Но, честно
говоря, такие тесты, скорее всего, носят
чисто рекламный характер, так как вряд ли
человек, купивший себе двухпроцессорную
систему, будет играть на низких разрешениях.
Чтобы понять, что же даст дополнительный
процессор в реальной игре, мы
протестировали Quake III на разрешении 800 x 600 @ 32
(High Quality). Результаты вы видите ниже.
|
Quake III |
SMP, 128 Мб, (r_smp 1) |
SMP, 128 Мб, (r_smp 0) |
Single, 128 Мб |
SMP, 256 Мб, (r_smp 1) |
SMP, 256 Мб, (r_smp 0) |
Single, 256 Мб |
|
GeForce2 GTS, FPS |
47,6 |
44,9 |
47,1 |
49,0 |
46,1 |
48,4 |
Прожорлива, однако, эта Windows 2000. Для
комфортной жизни в мультипроцессорной
конфигурации этой системе необходимо
минимум 256 Мб оперативной памяти, а для
однопроцессорной - 128 Мб. При отключенном
режиме SMP (r_smp 0) в Quake III мы посмотрели в “Диспетчере
Задаче” на загруженность процессоров. По
графикам стало ясно, что система пытается
раскидать задачу сразу на два “камня”, на
что тратится некоторое количество
процессорного времени, поэтому
производительность Quake становится даже
ниже, чем на однопроцессорной машине. Если
запрячь игру самой заниматься
распределением задач по процессорам (r_smp 1),
то производительность значительно
возрастает. Конечно, в случаях, когда
видеокарта не выдерживает нагрузки, уже все
равно - стоит у тебя восемь процессоров или
один, но так как все процессоры так и не
нагружаются полностью, ресурсов системы
останется даже на запись “болванки” или
обслуживание в качестве файл-сервера
небольшой локальной сети. С меньшей
нагрузкой на видеокарту процессор себя
показал с более хорошей стороны, но, честно
говоря, не настолько, чтобы приобретать
двухпроцессорную систему только для того,
чтобы поднять FPS в низких разрешениях на 10-20
единиц.
Теперь разберемся с Adobe Photoshop. Сразу надо
оговориться, что далеко не все его фильтры
можно разложить на несколько параллельных
вычислений, чтобы полностью загрузить
каждый процессор. Но вот, например, поворот
изображения или размытие по Гауссу легко
раскладывается на несколько процессоров.
Давайте посмотрим, насколько повышается
производительность Photoshop 5.5 в
мультипроцессорной системе.
|
Photoshop 5.5 |
Gaussian Blur, с |
Despecle, с |
Facet, с |
|
SMP |
46,2 |
5,3 |
6,3 |
|
Single |
57,1 |
8,8 |
8,1 |
Действительно,
прирост в обработке изображений есть. Но,
как уже было сказано, на многих фильтрах
прироста не будет - мало того, возможны даже
немного более высокие результаты на
однопроцессорной системе, так как при емких
вычислениях система отводит часть ресурсов
на равномерное перераспределение задачи по
процессорам. Все же, при соответствующей
оптимизации приложения, выигрыш от
дополнительного процессора есть. На
примере Adobe Photoshop он достигает 40%.
Итоги
Подводя итоги всему
вышесказанному, можно сказать, что далеко
не все будут в восторге от двухпроцессорной
системы. Во-первых, для поддержки
многопроцессорной конфигурации необходимо
большее количество памяти, чем для
однопроцессорной системы. Во-вторых,
некоторые неоптимизированные задачи при
автоматическом распределении нагрузки на
оба процессора работают медленнее. В
третьих, для поддержки двух процессоров
необходима соответствующая операционная
система, а Windows 2000 или UNIX-клон решится
поставить далеко не каждый.
Что действительно
хорошо, так это возможность выполнения
нескольких программ без значительной
потери производительности. Можно писать CD
или MP3, одновременно играя в любимую игру, и
не беспокоиться, что запорется болванка или
сильно упадет фрейм-рейт. Что касается
специально заточенных программ под
многопроцессорную конфигурацию (будь то
драйвера профессиональной видеокарты или
программы, использующие многопоточные
алгоритмы), то смысл ставить
двухпроцессорную систему есть, причем
немалый.
И все же, в отличие от
серверов и графических станций, для
домашнего пользователя двухпроцессорная
машина скорее роскошь, чем средство к
существованию.
|
Классификации
мультипроцессорных систем
MMP
Ряд узлов (до
нескольких тысяч), состоящих из одного или
нескольких центральных процессоров,
имеющих свою локальную память и систему
коммуникации с другими узлами. Иногда могут
присутствовать накопители или узлы ввода-вывода.
Возможны два варианта управления системой.
В первом случае ОС может стоять только на
управляющем (front-end) узле, а на остальных -
урезанные версии, обеспечивающие только
работу приложений. Во втором - отдельная ОС
на каждом узле.
Примеры: IBM RS/6000 SP2, Intel
PARAGON/ASCI Red, SGI/CRAY T3E, Hitachi SR8000, транспьютерные
системы Parsytec, ASCI Red, Blue Mountain.
SMP
Несколько однотипных
процессоров (на практике - не больше 32) и
массив общей памяти. Все процессоры
абсолютно равноправны по отношению к
памяти. Обычно процессоры взаимодействуют
с помощью общей шины. На аппаратном уровне
поддерживается когерентность кэшей.
Управляется все это хозяйство одной ОС,
которая автоматически или принудительно
распределяет нагрузку по процессорам.
Примеры: HP 9000 V-class,
N-class; SMP-cервера и рабочие станции на базе
процессоров Intel (IBM, HP, Compaq, Dell, ALR, Unisys, DG, Fujitsu и
другие).
NUMA
Комбинация базовых
модулей, состоящих из некоторого
количества процессоров и массива памяти.
Модули объединяются высокоскоростным
коммутатором. Хотя физически память
разделена, на уровне логики все процессоры
имеют единое адресное пространство, то есть
одни модули могут обращаться к памяти
других модулей. Естественно, доступ к
локальной памяти гораздо быстрее, чем к
памяти других блоков. Обычно
поддерживается когерентность кэшей, и при
этом архитектура называется cc-NUMA (cache-coherent
NUMA). Обычно операционная система у таких
решений едина, однако возможны варианты,
когда отдельные части системы работают под
управлением разных ОС.
Примеры: HP HP 9000 V-class в
SCA-конфигурациях, SGI Origin2000, Sun HPC 10000, IBM/Sequent
NUMA-Q 2000, SNI RM600.
PVP
Эти системы состоят
из специальных векторно-конвейерных
процессоров, имеющих команды для
однотипной обработки векторов независимых
данных. Обычно несколько процессоров (1-16)
составляют узел и работают аналогично SMP (общая
память), а узлы, в свою очередь, объединены
коммутатором (как у MPP).
Примеры: NEC SX-4/SX-5,
линия векторно-конвейерных компьютеров CRAY:
от CRAY-1, CRAY J90/T90, CRAY SV1 и серия Fujitsu VPP.
Clusters
Некоторое количество
рабочих станций общего назначения,
соединенных стандартными сетевыми
технологиями (Gigabit-Ethernet и т. д.) на базе
шинной архитектуры или коммутатора.
Получается дешевый вариант систем MPP.
Кластерные системы называются
неоднородными, если в их состав входят
компьютеры разной мощности или архитектуры.
Элементы кластера (компьютеры) часто
используются как рабочие станции. В связи с
этим на каждую машину отдельно ставится ОС
со специальными средствами поддержки
распараллеливания задач.
Примеры: NT-кластер в
NCSA, Beowulf-кластеры.
|
Благодарим компанию
БЭСМ2000 ( тел. 255-9298) за предоставленную
на тестирование материнскую плату MSI 694D-ProA и
дополнительный процессор Pentium III 700
|