Обзоры
Битвы на байтовых полях
0

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

Еще не открывая в первых фразах карт, вынужден сразу объясниться с читателем.
Действительно, казалось бы, при чем тут хлесткое пелевинское наблюдение, вынесенное
в преамбулу? Тем более что этот вопрос — уместен, будучи заданным дотошным читателем
— очевиден… Менее очевиден вопрос, которым чаще задается сам автор, — зачем?
Ведь есть настолько проверенный и испытанный способ написания по-летнему легкого,
развлекательного материала, что для него создана почти идеальная программная поддержка,
сводящая к минимуму усилия — знаменитая и фундаментальная формула философского
камня 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 (ближайшие
сражения ожидаются в ноябре этого года) могут получить исчерпывающую информацию
о правилах боев с примерами исходных текстов типовых фрагментов программ-гладиаторов
из следующего
документа
. И наконец,
страница
открывает раздел сайта, посвященный боям, — с мониторингом событий,
обсуждением в форумах, объявлением победителей и т. д.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: