Битвы на байтовых полях

28 июль, 2003 - 23:00Андрей ЗубинскийЕще не открывая в первых фразах карт, вынужден сразу объясниться с читателем. Действительно, казалось бы, при чем тут хлесткое пелевинское наблюдение, вынесенное в преамбулу? Тем более что этот вопрос -- уместен, будучи заданным дотошным читателем -- очевиден... Менее очевиден вопрос, которым чаще задается сам автор, -- зачем? Ведь есть настолько проверенный и испытанный способ написания по-летнему легкого, развлекательного материала, что для него создана почти идеальная программная поддержка, сводящая к минимуму усилия -- знаменитая и фундаментальная формула философского камня Web-журналистики "Ctrl-C -- Ctrl-V". И стоило только не побрезговать "основами"... как привлекательно и многообещающе можно было бы начать статью. Например так: "Ученые в области computer science нашли наилучший способ (ultimate way!) отладки программ -- в виде соревнования с другими программами в битвах, основанных на принципах гладиаторских боев" (именно эта фраза, открывающая статью в онлайн-версии журнала NewScientist, моментально "расползлась" по всем новостным сайтам). Можно было бы украсить и без того неземную красу, поставив перед многозначительным предложением усиливающее междометие, например "Наконец-то!", и, не мудрствуя лукаво, "отстреляться боеприпасами" гарантированного попадания и убойной силы (таких в патронташе IT-журналиста, снаряженных серебряными пулями, достаточно, чего стоит только патрон с надписью "Linux"...). Так нет же, любопытство в который раз подвело, и столь замечательная идея осталась без реализации...

О чем речь...

Обольстители-мистики, как бы помягче сказать, в очередной раз оплошали. Ни о какой "отладке программ", ни, тем более, об ultimate way в технологиях отладки, естественно, речь идти не может. И посему -- не будет. При этом мы все-таки будем говорить о том же событии -- несомненно, интересном и забавном, а именно, о боях на крупнейшем международном "гладиаторском ринге классического чемпионата"... программ -- Gridwars II, "место" для которого было выделено на конференции и выставке ClusterWorld. Сами характеристики "ринга" уже впечатляют -- "сеть" из 2500 процессоров, да еще класса Itanium 2... такое не часто встретишь. А тем более такое, отданное на время для пусть полезной и интересной, но все же забавы. Впрочем, не будем спешить и пока остановимся на слове "сеть" -- использованном именно так, в кавычках. Дело в том, что в английском оригинале оно пишется как grid, и найти какой-то удачный вариант перевода крайне трудно -- даже не столько из-за "объемности" термина, сколько из-за проблем с толкованием его значения. Так, стоило одному из громких имен в области grid computing -- Яну Фостеру, упомянуть о принципиальном отличии grid computing от уже существующих проектов масштабных Internet-вычислителей (т. е. множества компьютеров, объединенных в единое целое за счет специальных алгоритмов и с использованием существующей глобальной сетевой инфраструктуры), которое заключается в "исключении централизованного управления", как не менее значимая фигура -- Ричард Фронд -- выступил с весьма аргументированным опровержением этой точки зрения, оставив в "определении" grid computing фактически только неопределенность.

В этой ситуации автор не вправе возложить на себя непосильный груз создания еще одного толкования grid computing и ограничится только извинением за то, что в дальнейшем мы будем избегать вносящих путаницу слов "сеть" и "решетка" и остановимся на лаконичном английском grid...

Итак, "арена" гладиаторских боев. 2500-процессорный слабосвязный параллельный вычислительный кластер (или "ферма" -- farm), в котором каждый вычислитель логически "связан" со своими восемью соседями, условно именуемыми "верхним", "верхним-левым", "верхним-правым", "правым", "левым", "нижним" и т. д. (тут как раз уместно воспользоваться словом "решетка" -- но это всего лишь один, частный вариант структуры grid computing). "Программы-гладиаторы", к счастью, -- это не "программы вообще" (к счастью -- потому как в противном случае автору пришлось бы сражаться с освоением плодов какой-то совсем уж немыслимой революции), а разработанные с учетом целого перечня формальных правил, с использованием строго определенных программных инструментов и, наконец, способные функционировать исключительно в специальном окружении интерпретируемые задачи, действительно борющиеся за "власть" над "процессорным пространством", измеряемую числом "завоеванных" вычислителей. Естественно, существует и формальный набор правил "борьбы". По условиям турнира, в начале битвы "гладиаторы" размещаются в случайных ячейках grid-вычислителя (т. е. запускаются на случайным образом выбранных компьютерах), после чего, собственно, и начинается битва, ведущаяся в стиле "пошаговой стратегии". По сути, Grid­wars и есть требующая дико дорогой "игровой приставки" пошаговая стратегическая игра с единственным существенным отличием от популярных "стратегий", заключающимся в том, что здесь человек один раз, до игры, закладывает свое видение стратегических принципов победы в алгоритм, а затем только наблюдает подтверждение или опровержение справедливости этих принципов. К слову, ничего нового в самой идее Gridwars (по крайней мере -- на таком уровне) нет. Так, фактически с 1984 г. уже существует чудная игровая система Core War, в которой разработанные на специальном языке ассемблера (настоящие программисты терпеть не могут Pascal...) программы сражаются на виртуальной арене (исполняются интерпретатором). Но Core War все-таки фактически "чистая игра", в случае же с Gridwars игровой аспект изменяется -- количество переходит в качество. Естественно, игровой характер сохраняется, но благодаря очень большим масштабам и специфической сетецентричности Gridwars действительно позволяет что-то "отлаживать". Естественно, не программы. Возможно, алгоритмы или даже, скорее, "метаалгоритмы" (подходы к созданию эффективных в grid-архитектурах алгоритмов).

Каждый может победить

Вот и пора пустить в ход упомянутые "боеприпасы", причем не для рекламы (с чего бы это автору рекламировать Gridwars), а, скажем так, -- для агитации. Действительно, этот проект дает многим людям возможность самовыразиться. А самовыражение -- прямой путь к самореализации. Например, разработчику программы Cobra -- победительницы боев Gridwars II, оставившему в заголовочном комментарии исходного текста ник "Great Elk" (с чем автор статьи искренне поздравляет россиянина Василия Громова и желает ему дальнейших побед в самых мирных "войнах"), есть чем гордиться -- Cobra победила не просто среди 225 программ, в финале она "сделала" "бойца" несоизмеримо сложнее и потенциально совершеннее -- интеллектуального Rogue, основанного на генетических алгоритмах. Пусть победа Cobra достигнута более по правилам воинского искусства (т. е. в ней игровая составляющая Gridwars доминирует) -- комбинацией целенаправленной стратегии и отличным знанием используемого "оружия", это не столь важно. Важна достигнутая победа. Даже не приз, получаемый за нее (призовой фонд Gridwars, несмотря на масштабы мероприятия, более чем скромен -- организаторам и без того оно обходится в копеечку), а именно факт победы. И, что главное, здесь победить может любой. "Программы-гладиаторы" принимаются к участию по либеральным правилам open source, гигантская "арена" работает под управлением ОС Linux (автор предупреждал по поводу "боеприпасов") -- короче говоря, полная идиллия для молодежного радикализма.

Выбор оружия

Основное оружие потенциального игрока в Gridwars, безусловно, должно быть экстремальным. И, по сути, оно недалеко уходит по совершенству от своего более старого аналога из мира Core War. Но если там, как уже упоминалось, был достигнут верх экстрима -- ассемблер виртуального процессора, то Gridwars идеально подходит для освоения поколением "высокоуровневых ассемблерщиков". В общем, уже понятно -- речь идет о знаменитом, ужасном, прекрасном и каком хотите еще языке С. Точнее, о специализированном клоне С, ориентированном на параллельное программирование и интерпретируемое исполнение. В принципе, и это ни для кого не новость, есть и отличные С-интерпретаторы, например CINT, о котором некогда мы беседовали ("Компьютерное Обозрение", # 44, 2002), есть и многочисленные, ориентированные на параллельное программирование, модификации С. Но вот аналогичный С-подобный проект для этой разработки все же подобрать трудно. CxC (именно так называется "оружие") -- система далеко не игрушечная и уж совсем не для баловства созданная. Так, из перечня целей, которые ставили перед собой разработчики CxC, можно выделить описание серьезнейшей проблемы -- отчуждение прикладного специалиста от инструментария, связанное с ростом сложности последнего. То есть современный инженер или исследователь буквально обязан, кроме своей прикладной области, специализироваться в целом ряде компьютерных дисциплин, если ему необходимо в своих целях утилизировать мощные вычислительные системы. Более прозаично, на инструментальном уровне, все это выглядит примерно так -- в условиях ограниченного бюджета (а он всегда ограничен) специалист-прикладник, которому нужны вычислительные ресурсы, соответствующие возможностям кластера, а не мощного ПК или рабочей станции, должен знать массу вещей, астрономически далеких от его специальности, -- от системного администрирования до тонкостей использования библиотек, реализующих механизмы обмена сообщениями. Если добавить к этому целый букет инструментальных средств и потребность в наличии собственно кластерного вычислителя... в общем, картина не слишком вдохновляет. CxC как раз и задумывался как единая среда, обеспечивающая как замкнутый цикл прототипирования, разработки, отладки и выполнения программ, так и использование разнотипных компьютеров в качестве "кластера" (точнее, grid-вычислителя). Все это "утрамбовано" в языковые рамки CxC, спрятано от "пользователя", что обеспечивает реализацию всех возможностей grid-вычислений без необходимости инвестиций во времени и средствах на изучение сторонних инструментов. Плюс -- "C-похожесть" CxC неплохо соответствует целевой аудитории -- все-таки С остается одним из самых популярных языковых средств. И наконец, разработчики CxC ответственно подошли и к вопросам эффективности -- по крайней мере, ими декларируется производительность эффективно написанных CxC-программ на уровне 60--100% от С-аналогов, кроме того, предусмотрена возможность интеграции CxC в компилируемую (т. е. быстро исполняемую) программу с сохранением всех достоинств CxC и одновременным повышением быстродействия до требуемого уровня. Интересная особенность среды времени исполнения (runtime) CxC -- способность работать как на однопроцессороной машине с имитацией многопроцессорности, так и на SMP-машинах с автоматическим использованием всех вычислительных ресурсов, на процессорах вычислителей кластерных и grid-систем и, наконец, в гетерогенных grid-системах. Это определяет действительно многофункциональность применения CxC -- от обучения параллельному программированию до построения реальных вычислительных систем.

В общем, CxC -- действительно интересная разработка, доказавшая свою работоспособность хотя бы в таком масштабном проекте, как Gridwars. Сопровождаемая более чем приличной документацией CxC несомненно представляет интерес, даже учитывая сугубо коммерческий характер продукта -- благо, в стандартной редакции эта система, стоящая всего $75, вполне доступна, например высшим учебным заведениям. Единственное "но", о котором следует помнить, -- С-похожесть языка CxC скрывает маленькие, но очень интересные нюансы, проявляющиеся иногда самым неожиданным образом (так, в "программе-гладиаторе" Cobra было использовано весьма неожиданное в С-подобном мире свойство оператора break, не рассмотренное другими разработчиками конкурирующих "бойцов").

Не игрушки...

В этом трактате, претендуя на исчерпывающую неполноту и строгую несистематичность, я намерен изложить все то, что мне достоверно не известно.
А. Зиновьев

"Игрушечную тему" можно считать практически завершенной -- недостающие ссылки на загружаемые материалы для заинтересовавшихся непременно будут. Мы же поговорим о вещи серьезной и весьма неожиданной. Возможно, все это домыслы, навеянные забавной книгой "Бизнес в стиле фанк", время покажет... А говорить мы будем именно о неожиданной находке, которую на все 100% использовали создатели столь серьезной системы, как CxC. Понятно, что областей применения у такого программного продукта потенциально очень много. Но только потенциально. До тех пор потенциально, пока не будет сформирована критическая масса специалистов -- в первую очередь, "непрограммирующих программистов", освоивших и идеологию параллельного программирования в этой среде, и технику, и нюансы реализации. Если такой шаг, как организация "гладиаторских боев" на вычислителе беспрецедентного масштаба, окажется удачным (а похоже, он действительно удачен) -- к технологии неизбежно привлечется внимание. Ставка на "имидж победителя" -- сильный мотив и для многих без сомнения талантливых программистов, и для тех, кто просто хочет попробовать свои силы. Разработка "программ-гладиаторов" в полном соответствии с весьма строгими ограничениями -- само по себе занятие, требующее отличного знания CxC и приемов параллельного программирования. Перерастут ли эти, пока не столь массовые, мотивация и игровой азарт в потенциал, способный трансформировать CxC из системы с экзотическим назначением в общеприменимую систему, -- вопрос совсем не игрушечный. Возможно, мы наблюдаем становление новой "хитовой" технологии, в которой, как и во всех добротных технологических хитах, нет ничего принципиально нового, кроме удачной комбинации ранее существовавшего (достаточно вспомнить историю http как комбинации уже существовавшего протокола передачи файлов и уже существовавших гиперссылок).

В общем, после недельного "ковыряния" в CxC, автору не хотелось бы, чтобы такая разработка осталась нишевой -- уж больно она симпатична и, что главное, своевременна: мы уже располагаем компьютерными парками с огромной суммарной вычислительной мощностью, осталось только научиться достойно эту мощность использовать.

Где и что?

CxC в 30-дневной триал-версии доступен с сайта разработчика. Отсюда же можно загрузить справочное руководство по языку и руководство программиста. Стоимость лицензий в зависимости от версии (стандартной или профессиональной) и количества параллельно используемых процессоров приведена в сводной таблице внизу страницы по этому адресу. Желающие поучаствовать в будущих битвах Gridwars (ближайшие сражения ожидаются в ноябре этого года) могут получить исчерпывающую информацию о правилах боев с примерами исходных текстов типовых фрагментов программ-гладиаторов из следующего документа. И наконец, страница открывает раздел сайта, посвященный боям, -- с мониторингом событий, обсуждением в форумах, объявлением победителей и т. д.