paka
03-11-2004 16:54 Во, чего нашлось !
Примерно год назад писал я статью для журнала ХАКЕР
А сейчас, разбирая завалы на винте, наткнулся на "непорезанный" исходник. Впрочем, там не так уж и много было порезано. Текст очень сырой -- я его даже не вычитывал


Компьютеры с приставкой СУПЕР

...или от водородной бомбы к "матрице", через парк юрского периода


Я знаю множество людей, недовольных скоростью своих компов. Ты тоже таких встречал ? А может и сам мечтаешь о покупке очередного top-end произведения компании Intel, отказывая себе во всем и откладывая деньги, сэкономленные на пиве и девушках ? Так вот, есть на свете люди, способные по части страданий дать тебе сто очков форы. Глубины их страданий неисчерпаемы, а горизонты желаний необъятны как вселенная. Заявления Intel об увеличении тактовой частоты на очередной гигагерц способны вызывать у них лишь презрительную усмешку, лишний гигабайт оперативной памяти - унылое пожатие плечами, а накопитель террабайтного размера - грустные мысли о вечной нехватке дискового пространства. Кто же эти мученики высоких технологий ? Кому и зачем требуются террагерцы и террабайты ? Ты уже наверняка догадался... Это ученые ! Каждый уважающий себя ученый имеет в своем столе пару-тройку задач, для решения которых не хватит совокупной мощи всех компьютеров планеты ! И каждый из них тешит себя мыслью, что когда-нибудь, через десяток-другой лет скорость вычислительных машин вырастет в тысячу, нет, лучше в миллион, нет, нет, лучше в миллиард раз, объемы оперативки возрастут до умопомрачительных величин, а размеры дисков станут бесконечными, и вот тогда... А пока приходится терпеть, шевелить извилинами, придумывать сотни новых методов вычислений, тысячи мелких уловок и хитростей, позволяющих обойтись современными процессорами, уместить данные в доступные на сегодня объемы и получить новые результаты, при одном взгляде на которые все зарубежные коллеги должны будут как минимум удавиться от зависти. Особенно, почему-то в этом преуспели наши отечественные научные работники, что впрочем не особенно удивительно, если вспомнить о том, как финансируется наша наука.

Однако, отчаиваться рано. Еще в незапамятные докомпьютерные времена люди знали, что если лошадь, например, не может сдвинуть с места груженую телегу, то нужно запрячь туда еще одну. Или двух. Эту немудреную идею можно с успехом применять и в области высоких технологий. Если с задачей не справляется один комп, то почему бы не поставить два ? Три ? Тысячу ? "Легко !", скажешь ты, и будешь неправ. Все совсем не так просто. Просто поставить несколько системников рядом недостаточно. Нужно объединить их в единый компьютер и заставить сообща решать одну задачу. То, что получится в результате и называется суперкомпьютером. Вообще их существует несколько разновидностей, из которых нашего внимания заслуживают лишь два: SMP (симметричные), MPP (массивно-параллельные) системы. Чем же они отличаются ?

SMP

Самая простая с точки зрения программиста (ну, и хакера, разумеется) структура наблюдается у SMP-систем. Там мы видим несколько процессоров (от двух и более) на одной материнской плате, имеющих равноправный доступ ко всей оперативной памяти и девайсам , в эту плату воткнутым. Каждый процессор в SMP-системе суверенен и независим от остальных. Все они работают параллельно, выполняя несколько программ одновременно. Что ? У тебя тоже комп может параллельно ? Не спеши искать на плате дополнительные процы, скорее всего их там нет. Штука эта называется вытесняющей многозадачностью и к суперкомпьютерам имеет отношение самое отдаленное. Просто твой процессор постоянно перескакивает с выполнения одной программы на другую, создавая впечатление их одновременной работы. А это, в том числе означает, что две программы будут мешать друг другу и каждая из них будет работать в два раза медленнее, чем если бы она была запущена в одиночку. В SMP это не так. В идеале, двухпроцессорный SMP-комп может работать в два раза быстрее однопроцессорного, но это только в идеале. Во-первых операционка должна поддерживать работу на нескольких процессорах. Это умеют практически все UNIX-ы и все Windows, произошедшие от Windows-NT, как то Windows2000 и XP. Во-вторых сама программа должна уметь работать на нескольких процессорах одновременно. Это требование значительно снижает ценность суперкомпьютера в глазах типичного юзера. Ну в самом деле: FPS в quake не вырастет с добавлением второго проца, word быстрее запускаться не станет, интернет не ускорится совсем никак. Зачем же тогда нужно SMP ? Для простого юзера это практически бесполезный наворот. Правда и он сможет извлечь из второго процессора пользу, если проявит изобретательность. Ведь фоновая задача, сколько бы она не жрала процессорного времени, не будет мешать работе основного приложения. Ты сможешь, например, на SMP-машине гамиться или смотреть кино, в то время как на втором процессоре будет крутиться перекодировщик MP3 или программа для подбора паролей.

С точки зрения ученого, SMP тоже вполне хорош. Программы его часто работают с большими массивами данных, обрабатывая их последовательно, ячейка за ячейкой. Например, как расчитывается взрыв водородной бомбы ? Все пространство, где будет происходить "виртуальный взрыв", разрезается на кубики (ячейки), каждый из которых имеет достаточно маленький размер и неоднородностями среды в нем можно принебречь. Время тоже делится на кусочки (шаги), так, чтобы в течении одного шага изменения среды были бы небольшими. Потом начинается счет - машина вычисляет, как должны измениться условия в каждой ячейке за время одного шага, обновляет информацию, увеличивает счетчик времени, снова вычисляет изменения и так далее. Понятно, что чем больше ячеек нарезать, чем мельче шаг по времени задать, тем точнее будет результат и меньше вероятность воплотить в жизнь анекдот о физиках, которые после испытаний ядерной бомбы в отчете написали: "мощность взрыва: 5-10 килотонн.", а на вопрос почему так неточно ответили: "мы думали что пять, а оно как рвануло...". В общем, если мы возьмем два процессора и заставим каждый из них обрабатывать свою половину ячеек, то вполне получим ускорение в два раза, по сравнению с обычной однопроцессорной машиной. Правда, тут есть один подводный камень. У каждого процессора есть собственная память, не доступная остальным. Это кэш. Если процессор изменил значение какой-нибудь ячейки памяти, то сначала это значение попадет в кэш, а уже потом, неизвестно когда, будет перенесено в основную память. Это и правильно - оперативная память большая, но медленная, а кэш быстрый, хоть и малеьнкий. Так что, если процессор захочет еще раз это значение поменять, то ему далеко ходить за ним не придется, все можно будет мгновенно подгрузить из кэша. Но если процессоров два, и оба захотят поменять этот несчастный байт в памяти, то наступит путаница. Оба загрузят новое значение в свой кэш и каждый будет думать, что значение в какой-то ячейке равно тому, что он вычислил, не подозревая, что у другого процессора может быть по этому поводу совсем другое мнение. Конечно, каждая материнская плата с поддержкой SMP имеет специальные механизмы, позволяющие избежать такой ситуации, но одновременный доступ нескольких процессоров к одной области памяти будет приводить к нешуточным тормозам, а усложнение чипсета влечет за собой такое удорожание, что SMP-машины становятся просто баснословно дорогими. Да и число процессоров на одной плате тоже нельзя увеличивать бесконечно, "чистые" SMP-системы с количеством процессоров больше 16 практичеки не встречаются. А 16 процессоров, это ой как мало ! Но ничего, научная мысль не стояла на месте и в свое время родила архитектуру

MPP

Внешне, MPP выглядит очень обыкновенно. Чаще всего, это набор одинаковых системников, без мониторов, клавиатур и прочих излишеств, соединен локальной сетью. В лучшем случае, все это богатство установлено на стеллажи или привинчено к стандартным 19-дюймовым стойкам. Все вместе, это называется "массивно-параллельный суперкомпьютер" или "вычислительный кластер". Ты спросишь, что тут особенного ? Такой "суперкомпьютер" можно увидеть в любом игровом клубе ? И будешь не прав. Главное в MPP-машине не железо, хотя оно тоже бывает уникально. Суперкомпьютер такого типа делает суперкомпьютером не железо, а софт. На первый взглд, софт тоже не представляет из себя ничего необычного - стандартный "Linux", какой ты можешь купить в на любом лотке или скачать в интернет, дополненный парой программ со странными названиями - "MPI", "PVM", "PVFS", да со специфичными настройками, облегчающими жизнь админу этого стада. Вдаваться в подробности не будем, про каждую из этих программ можно написать книгу. Или сочинить оперу. А делают они очень простую и, одновременно, невероятно сложную вещь - соединяют несколько разрозненных программ, запущенных на разных компьютерах (узлах) кластера в единое целое. Как они это делают - тема для отдельной книги. Или оперы. На самом деле, все делает программист. Он делит задачу на куски. Он организует распределение работы между узлами. Он решает как, когда и в каком порядке узлы будут обмениваться данными и еще обдумывает тысячу вещей. А потом начинается отладка. Выглядит это так - программа скомпилировалась и запустилась. Через две минуты она падает. На самом деле падает из за сбоя в программе один процесс. Остальные несколько десятков падают из за потери с ним связи. Чешем репу. Путем проб и ошибок, после 43-х неудачных запусков обнаруживаем ошибку. Исправляем. Задача начинает считать, но чрез несколько минут зависает. На самом деле, зависает один процесс, остальные зависли из за невозможности получить данные от зависшего. Снова чешем репу. Вставляем отладочные операторы. Еще 27 запусков. Задача заработала ! Но есть проблема - результаты она выдает, мягко говоря, странные... Неправильные результаты. Снова чешем репу... И так очень долго. Есть, конечно, отладчики, работающие на многопроцессорных системах. Но представьте себе несколько десятков окон, в каждом из которых идет отладка отдельного процесса, а каждый процесс тесно увязан с остальными и влияет на них. Вам станет плохо. А если не станет, значит вы себе это все неправильно представляете. Вот где требуются навыки хакера ! Понять логику программы, вычленить уязвимые места, где могут гнездиться ошибки, по поведению одного процесса догадаться о поведении сотни остальных и заставить работать их так, как нужно тебе... Это задача не для среднего программера. Всех, кто занимается этим, несомненно можно назвать хакерами, в том смысле, который вкладывался в это слово на заре компьютерной эры. Самые большие суперкомпьютеры имеют массивно-параллельную архитектуру.

Вообще, во всем мире установлено и работает огромное количество суперкомпьютеров. Среди них есть маленькие (2-16 процессоров) многопроцессорные системы, используемые в основном для поддержки серьезных баз данных и крупных веб-серверов, это и небольшие (до сотни узлов) кластеры, на которых работают очень крупные базы данных и сервера вроде google.com или yandex.ru, а среди них возвышаются гигантские, изготовленные на заказ суперсистемы, чьи имена известны благодаря прессе: Earth Simulator (Япония, фирма NEC), ASCII WHITE (США, фирма Hewlett-Packard), Deep Blue (IBM) и другие. Существует список 500 самых мощных из них, называемый "Top-500". Этот список обновляется дважды в год и может быть найден на сайте "www.top500.org". Если ты внимательно его просмотришь, то на скромном 97-м месте обнаружишь систему, со скромным названием "МВС-1000М" - самый крупный (из официально известных) суперкомпьютер в России. Место не самое почетное, но эта машина стоит отдельного слова. С внешней стороны, это 6 больших 19-дюймовых стоек, заполненных под завязку оборудованием. В каждой из них размещается 64 двухпроцессорных компьютера Alpha, соединенных сетью Myrinet (2000 мегабит и очень малая латентность - задержка прохождения данных). На всех 384-х компьютерах установлен Linux (специальная версия, для компьютеров с архитектурой Alpha). Чем же здесь гордиться, спросишь ты ? Все компоненты произведены за границей, наши только установили их в стойки и подключили ? Не совсем. Семейство МВС имеет многолетнюю историю, включая в себя две современные модели - МВС100 и МВС1000. МВС100 представляла из себя транспьютерную систему - она состояла из не из полноценных компьютеров, а из упрощенных элементов (транспьютеров), содержащих лишь процессор и память. Транспьютеры не отягощены такими излишествами как контроллеры дисков, сложными системами ввода/вывода и другими ненужными деталями. Это делает их дешевыми, небольшими и взаимозаменяемыми. Однако транспьютеры нуждаются в управляющей ЭВМ, в обязанности которой входит компиляция программ, раздача заданий процессорам и сбор результатов. В МВС100 для этого использовалась обычная PC, под управлением Linux или MSDOS. К этой PC, посредством широкого шлейфа, втыкаемого в специальную карту, присоединялся большой и шумный ящик - сама МВС100, в котором и содержались транспьютеры. Не смотря на свою простоту, транспьютеры тоже нуждались в операционке. В Институте Прикладной Математики имени Келдыша (ИПМ РАН) для них операционку разработали. Называлась она "router". Для нас она интерес представляет лишь исторический, так как от нее в последствии отказались. Практические соображения оказались сильнее профессионального честолюбия разработчиков из ИПМ, что можно только приветствовать. В самом деле, от транспьютерной архитектуры пришлось отойти, так как системы на ее основе оказалась слишком дорогими, а производительности нужной не обеспечивали. Теперь каждый узел - полноценная ЭВМ, со всеми своими излишествами и ненужными (суперкомпьютеру) деталями, но дешевая за счет массового производства. Оказалось, что купить в магазине тысячу обыкновенных материнок и свинтить из них нечто большое гораздо дешевле, чем сделать на заказ тысячу транспьютеров. Такова жизнь. А раз это полноценный комп, то и операционка ему особенная и не нужна, вполне сойдет и Linux. На долю же программистов из ИПМ выпала другая, не менее сложная задача - написать систему управления, способную справится с компьютером имеющим более 700 процессоров и активно используемую сотней-другой пользователей, каждый из которых легко способен потребить всю имеющуюся мощность и остаться недовольным. Чтобы сохранить некоторую справедливость в распределении ресурсов, потребовалась система очередей. Когда мне требуется запустить там задачу (а я делаю это регулярно), я указываю, сколько процессоров мне нужно, и время счета задачи. Задача моя ставится в очередь и ждет, пока не освободится нужное количество процессоров. Когда процессоры освобождаются, программа запускается на них, а по истечении заказанного времени автоматически уничтожается, чтобы освободить ресурсы для других. Если ты считаешь, что написать такую систему очередей проще, чем операционку, то подумай о том, что операцонок нынче пруд пруди, а реально работающие системы очередей для суперкомпьютеров можно пересчитать по пальцам одной руки.

Будущее МВС1000-М уже решено. Эта конкретная система в ближайшем будущем будет заменена на более мощную (давно пора, скажу как пользователь). Старую систему разделят на несколько меньших суперкомпьютеров и передадут в различные институты академии наук. Новая система будет основана на процессорах Itamium-2. От процессоров Alpha пришлось отказаться, так как закупить сегодня такую большую партию их не представляется возможным. Фирма DEC, разработчик архитектуры Alpha давно была продана Compaq, а сама Compaq слилась в последствии с Hewlett-Packard. HP сама производит RISC-процессоры и не собирается развивать конкурирующую архитектуру, так что DEC-Alpha следует, видимо, считать историей.

История, вообще, занятная штука. Кто знает, какое место займет в ней система МВС1000 ? Возможно, через десяток-другой лет то, что сейчас гордо именуется "Суперкомпьютером" запросто уместится на твоем рабочем столе ? И кто знает, может быть на нем будут выбиты три русские буквы - "МВС" ...?

Более подробную информацию ты можешь найти на сайте Межведомственного Компьютерного Центра - http://www.jscc.ru и сайте Института Прикладной Математики - http://www.kiam.ru. Всю нужную информацию о технологиях параллельных вычислений и суперкомпьютерах можно найти на сайте http://www.parallel.ru
Закрыть