суббота, 4 декабря 2010 г.

42 (биржи, лисп и всё такое)

Как известно, у бирж много денег. Это значит, что много денег может быть потрачено на исследования и разработку технологий, приближающих очередной неминуемый крах экономики ещё быстрее. Очевидным решением в борьбе с задержками при приёме и обработке биржевых данных является переход на FPGA, что многие биржи и делают. А если и не делают, то очень зря, это им скоро аукнется. В общем, биржи нанимают классных и дорогих спецов по VHDL и проектированию железа, но результат получается всё равно хуже, чем у среднего пошиба железячников, типа нас. Нет, конечно, мы круты, но только биржа может позволить нанять специалистов мирового уровня с з/п полмиллиона долларов в год. Почему же у нас получается лучше?

Ответ лежит в технологии проектирования FPGA-железа. Само железо достаточно медленное, работает на тактовой частоте порядка 150-200 МГц. Понятно, что если применять последовательный подход, как это делается в программах для обычных компьютеров, то FPGA будет на порядок медленнее. Поэтому в хвост и в гриву используется параллельный подход, когда одни и те же данные, по мере их прибытия в железку, спекулятивно начинают обрабатывать различные логические ядра в расчёте на то, что когда все данные придут, и станет понятно, что это, собственно, за данные, то одно ядро уж точно будет иметь все карты на руках, плюс почти всё содержимое уже спекулятивно обработало. Остаётся только завершить формальности и отправить декодированный пакет наверх.

Так вот, программировать это нереально сложно. Несовершенные человеки делают море ошибок, пишут долго, а в итоге всё равно получается неидеально, ибо мозг гомо сапиенса заточен на последовательное исполнение.

И тут, на белом коне, под грохот барабанов и горнов, со сверкающей саблей в руках выезжает красавец Коммон Лисп, на котором написан декларативный DSL, представляющий из себя описание форматов и набор правил, как эти форматы обрабатывать. Парсеры пакетов, всякие триггеры, редукцию графов и полную параллельность строит машина, которая делает это быстро и без ошибок. В итоге, на долю ручного VHDL-кода остаётся процентов 10 исходников, и то, касаемо технических аспектов функционирования: эзернет, там, или pci-e. Но вся бизнес-логика генерится по декларативному описанию.

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

И, да, вместо лиспа может быть использовать другой более-менее равный язык, типа хаскеля, но мы все нежно любим лисп и с неминуемым успехом, выражаемым в крупных чеках, доказываем, что он ничем не хуже.

3 комментария:

  1. Как любят на некотором ресурсе - +100500 :)
    В планах тоже научиться применять разные DSL'и. Главное, к месту. А мест, думаю, будет немало. Что посоветуете почитать для тех, кто из DSL только эти три буквы в основном и видел?

    ОтветитьУдалить
  2. Советую почитать исходники проектов, где оные три буквы присутствуют. Хорошим примером является CFFI.

    В принципе, ничего особенного в этом и нет: лисповый дсл - это программа на лиспе, которая берёт один лисповый код и трансформирует его в другой лисповый код.

    ОтветитьУдалить
  3. ага, ага. трансформируем...
    "чтобы сделать статую, берем кусок камня и отсекаем все лишнее." :)

    ОтветитьУдалить

Архив блога