September 26th, 2010

glider

#ADD2010

На днях съездил с докладом на конфу Application Developer Days, которая проходила в Ярославле. Причем ни с чем-то, а с первой демонстрябельной версией Конфлакса. Мой доклад и детали по нему будут выложены отдельным потсом, а здесь поток сознания.

1. На 90% ехал для того, чтобы девиртуализироваться и пообщаться с жж-шными френдами. Это удалось на все 900%. Народ перечисляю в порядке знакомства. Олега zamotivator я узнал за пару секунд - когда они стояли и курили с Кириллом (catap.ru). Такие же поток сознания и жоская движуха, как и в ЖЖ. Кирилл оказался челом медитативного плана, который по жизни на позитиве, но знает он реально дохрена - его совместный доклад на тему SQL vs NoSQL было жутко любопытно послушать. Женя antilamer и Юля grrrl - мегаприятные и душевные в общении люди, заодно еще профессиональные и совсем не фрики, а эти качества вместе случаются очень редко =)

2. Перемещение тела обошлось в чуть более, чем сто баксов туда-обратно (Минск - Москва - Ярославль - Москва - Минск). С проживанием удалось разрулить вообще на ура - за 1300 р. в сутки снял квартиру, правда горячую воду отрубили в день моего проезда, но это настоящая квартира, где никого нет рядом, тихо и просторно. Я фшоке. И это в то время, когда нормальные отели в Ярославле (в честь его недавнего тысячелетия) начинаются с 4000 в сутки.

3. По докладам (см. расписание вот тут: http://it-conf.ru/ru/content/331.htm; при клике на доклад можно почитать его тезисы и информацию об авторе).

3а) SQL vs NoSQL, наверное, задумывался более как справочник - из полуторачасовой беседы у меня в голове осталось два пунктика: 1) в распределенности все сложно, 2) см. презентацию - там все детали по 100500 хранилищам данных. Здорово повеселил аудиторию Кирилл, постоянно повторяя, что "счастья нет" =)

3б) Дальше был срач по поводу систем контроля версий. Жесть, прямо как в каментах у Олега - жуткий поток сознания, из которого вылавливаешь полезное для себя. Я выловил git rebase (интересно, как такое сделать автоматом в меркуриале, не прибегая к mq) и то, что svn, оказывается, неожиданно полезная, ибо уже есть работающий svn merge --reintegrate. Насчет последнего еще рассказывал Стас Фомин в докладе "Золотая середина. Открытые системы поддержки разработки". Жаль тока в том докладе время закончилось раньше, чем началось самое интересное.

3в) После этого выступал я (об этом в отдельном потсе), а после своего доклада пошел гулять по городу. Было жалко пропускать рассказ про статический анализ доменной модели в C#, но меня так захватил Ярославль (я приехал на день раньше конфы и успел уже прогуляться), что пришлось чем-то жертвовать. Если у кого-нибудь есть ссылка на слайды доклада - расскажите мне, пожалуйста.

3г) На следующий день я успешно проспал презентацию windows phone 7 и начал день с фтыкания в хадуп. Походу, это есть опен-сорс реализация нашумевших в свое время концептов гугла про мап-редьюс, биг тейбл и распределенную fs. Докладчик, который по долгу службы работает с хадупом, ввел нас в курс дела, после чего я забился в уголок погуглить на тему того, как переводить всякие, например, джоины в мап-редьюс, окуклился и протащился. Потом пришел Катап и сказал, что хадуп любить падать и уносить за собой в могилу данные. Фак. Всю идиллию разрушил.

3д) Круглый стол SQL vs NoSQL прошел гораздо более организованно, чем предыдущий круглый срач про VCS. Чтобы не было так, что кто-то на букву "О" перекрикивает оппонентов, поставили микрофоны. Но не каждому, а через 3-4 человека. Хорошо поглумились =) а если по сути, то благодаря майевтике Андрея Аксенова я, как неспециалист, понял одно - пока что нет автоматического решения, которое бы позволило мне воткнуть в два раза больше компов и получить в два раза больше перфоманс. Как это объяснил после доклада Олег, здесь есть две проблемы: 1) невозможно автоматическое партицирование в общем случае, 2) очень долго перепартицировать данные после ввода в систему нового кластера - ну в самом деле, даешь перекачать пару терабайт по сети. Еще услышал кейворд Riak. А вот еще. Стас Фомин сидел и (не лень же ему) конспектировал дискуссию в майндмап. Так я познакомился с Freeplane, который, по тому, что вытворял Стас, удобнее MindManager, который я юзаю сейчас.

3е) Дальше был доклад, который из всех на конфе мне понравился больше всего. Выступал Женя Кирпичев (antilamer) с рассказом про параллельное программирование. Тем было затронуто очень много, некоторое время я прокемарил, но стратегии организации общения нодов в распределенной системе меня впечатлили до глубины души. Например, системы с обратной связью. Вдаваться в детали не буду - скоро Женя сам выложит доклад в ЖЖ. Впрочем, здесь тоже масса неразрешимых проблем - например, непреодолимая сложность асинхронных систем. Не только синтаксически мусорная call1(function(result1) { call2(result1.foo, function(result2) ... (ее можно убрать монадами), но просто логическая. Блин, и здесь элегантно легкого решения.

3д) Под занавес доклада зал порвали Яков Сироткин и Андрей Аксенов рассказами о том, как перестать бояться и полюбить бомбу. Технических деталей минус ноль, но зато весело и приятно о психологических факторах разработки как работы и как хобби. Было здорово - технические детали есть и в инете, а вот живого общения в инете не наблюдается.
glider

Conflux: GPGPU для .NET

К моему дню рождения в августе (серьезно, прямо в ночь перед ДР =)) случилось радостное событие - наконец-то удалось допилить Конфлакс до относительно рабочего состояния. А на недавней конференции Application Developer Days 2010 мне представился шанс выступить с докладом. Конечно же, я рассказывал про Конфлакс. В честь этого радостного события приглашаю вас ознакомиться со слайдами или даже посмотреть видео. Если вы никогда не слышали про CUDA, то перед этим лучше прочитать прекрасную презентацию Саймона Грина (для начального знакомства хватит первых 14 слайдов).

Тамбнейл доклада
Просто и ёмко Конфлакс описал antilamer: "в дотнетовской программе (на шарпе, например) можно написать метод, который будет выполняться на CUDA - он в рантайме декомпилируется и перекомпилируется в CUDA PTX". Если вас это описание заинтриговало, то вот как все это можно увидеть своими глазами:
  1) Скачать демку умножения матриц на Конфлаксе.
  2) Пока демка качается, можно посмотреть краткое описание.
  3) Демка состоит из двух частей - для CPU и для GPU. Для запуска демонстрации на CPU не нужно ничего, кроме четвертого дотнета. Для запуска демонстрации на GPU нужны CUDA-видеокарта и CUDA-драйвер.
  4) Обратите внимание на артефакты, которые создает демка. Во-первых, это логи, которые выводятся на консоль. Во-вторых, это динамически генерируемый код (ассемблер NVIDIA пишется в трейс, сгенерированный IL после завершения программы сбрасывается на диск - его можно посмотреть рефлектором). В-третьих, это CFG (графы потока управления) дизассемблированных методов, использованных в кернеле.
  5) Можно скачать исходники Конфлакса и посмотреть, как все работает. Для того, чтобы открыть проект, нужна Visual Studio 2010.

В заключение несколько слов саммари. Конфлакс позволяет программисту в 100% managed коде описать параллельный алгоритм, который потом будет исполняться на GPU. Написанный алгоритм можно прозрачно дебагать, используя стандартные средства Visual Studio, одной строчкой переключившись на CPU бакэнд. Наконец, несмотря на происходящую под капотом магию, Конфлакс не является дополнительным уровнем абстракции, которая может неожиданно протечь - он всего лишь один-к-одному преобразует код на дотнете в код для GPU, в нем можно даже писать ассемблерные вставки и вызывать third-party библиотеки CUDA (например, CUBLAS или CUFFT). Все это является шагом вперед в мире GPGPU для дотнета.