Что является хорошим мотивирующим примером для параллелизма потока данных? - PullRequest
3 голосов
/ 30 мая 2010

Я понимаю основы программирования потоков данных и немного сталкивался с этим в API Clojure , в беседах с Джонасом Бонером , GPars в Groovy и т. Д. I Я знаю, что это распространено в таких языках, как Ио (хотя я не изучал Ио).

То, чего мне не хватает, - это веская причина для того, чтобы заботиться о потоке данных как о парадигме при создании параллельной программы. Зачем мне использовать модель потока данных вместо изменяемого состояния + модель потоков + блокировок (обычно в Java, C ++ и т. Д.) Или модели актера (обычно в Erlang или Scala) или что-то еще?

В частности, хотя я знаю о поддержке библиотек на языках выше (а также Scala и Ruby), я не знаю ни одной программы или библиотеки, которая является дочерним пользователем этой модели. Кто это использует? Почему они находят это лучше, чем другие модели, которые я упомянул?

Ответы [ 4 ]

3 голосов
/ 18 июня 2010

У меня тоже неправильный пример. Он не реализует модель чистого актера и не имеет проблем с параллелизмом, но использует архитектуру DF и популярно очень : любое программное обеспечение для работы с электронными таблицами (например, MS Excel).

Когда вы модифицируете ячейку, она посылает сигнал «пересчитать» в ячейки, которые ссылаются на нее. Хотя, когда вы работаете с листом, который становится все больше и больше, вы можете почувствовать настоящий вкус программирования потока данных - фокус работы изменится:

  • создание формул теряет свою первоначальную важность (вы просто клонируете те же 3-4 формулы),
  • макет становится более важным: реорганизация ссылок, разбиение длинных формул на более короткие, скрытие параметров, в конечном итоге формирование графика из данных.

Если мы понимаем, что формулы - это компоненты, а ссылки - это сообщения, мы получаем обычный способ программирования потока данных: сначала мы создаем некоторые компоненты, затем мы строим граф потока данных с ними. Если компоненты слишком большие, мы разбиваем их на более мелкие. И, наконец, мы выбираем компонент визуализации для презентации результатов.

2 голосов
/ 07 июня 2010

У меня есть хороший "ребенок плаката" (мне нравится этот термин) для вас. Я полагаю, вы никогда не видели этого раньше, но вы, вероятно, слышали это.

Я думаю, что почти все современные цифровые синтезаторы и сэмплеры имеют некоторую архитектуру потока данных внутри. Позвольте мне рассказать вам, как они работают.

Я не уверен, был ли Roland JV-1080 первым, но это был самый известный синтезатор с 4-слойной схемой звукового генератора. Когда вы нажимаете клавишу на клавиатуре, запускается патч. Он состоит из генератора звука 1..4. Звуковой генератор - это линейка компонентов: генератор, фильтр, огибающая, усилитель. JV-1080 может одновременно воспроизводить 64 звуковых генератора. Выход активных звуковых генераторов переходит в конфигурацию эффекта. Путь к звуковому генератору «зашит», вы можете выбрать точки входа шины эффектов и суммы.

Шина эффектов Roland JV-1080 имеет 4 точки входа: сухой, пользовательский эффект, хор, реверберация, и есть основной выход. Шина эффектов фиксирована, но выход всех эффектов подключен ко всем остальным эффектам, которые стоят к нему справа, поэтому вы можете «удалить связь» между ними, установив значение на ноль.

Alesis QS серии (версии QuadraSynth, QS6-7-8-R и x.1) имеют близкую звуковую архитектуру, и система эффектов похожа ... за исключением того, что вы можете выбрать одну из конфигурации 3 FX. Один FX-конфиг для органов (в QS невероятная эмуляция Лесли): Лесли, Хор, Реверберация; другой конфиг FX имеет два ревербератора. У вас больше свободы в использовании мощности механизма.

Эти синтезаторы великолепны, но вы забудете их, когда встретите Clavia Nord Modular . Он не имеет ни 4-х уровневой архитектуры, ни конфигов FX. Поставляется с программой win32, редактором потока данных. Существуют различные компоненты: генераторы, фильтры, генераторы огибающей и т. Д., И вы можете нарисовать свою конфигурацию. Вы должны нарисовать традиционный 4-слойный генератор звука, но вы можете даже нарисовать 99-слойный генератор, если хотите. Это просто качается. (Должен сказать, что DF - это еще не все: у Roland JV частота дискретизации 44,1 кГц, у QS 48k, у Modular 96k.)

У Clavia есть еще одна линия синтезаторов: Nord Lead. Внутри есть модуль Modular (параметры и звук одинаковы), но вы не можете использовать программатор потока данных для этих моделей. У них фиксированный путь с множеством параметров, но вы не можете изменить маршрут. Кроме того, есть набор патчей Nord Lead для Modular: все пути выглядят одинаково в редакторе, меняется только параметр.

Вот пример модульного патча http://www.clavia.se/pictures/nordmodular/patchwindowlarge.jpg

Если вы не зарегистрированы на примере синтезатора, скажем, потому что вы программист на C, вот еще один, более знакомый:

make -j

Меня удивило, что make - это система потоков данных, поэтому она может запускать «компоненты» одновременно, что означает более быструю компиляцию на многоядерных машинах. Попробуйте!

0 голосов
/ 04 сентября 2010

Проверьте это: http://www.synthedit.com/

Это связанный со звуком фреймворк и набор компонентов для VSTi. Я не понял, как это происходит, но похоже, что автор выпускает программное обеспечение со стандартной собственной связкой компонентов, тогда другие люди могут присоединить их, скомпилировав DLL.

Кроме того, я только что поймал парня поблизости, мы в том же списке рассылки, который создал хороший симулятор TB303 (известный аналоговый винтажный синтезатор), и он создал его, используя SynthEdit в качестве фреймворка. Таким образом, как показано на рисунке, его можно использовать в качестве каркаса, здесь нет технических (и не модельных) сложностей.

Итак, стоит посмотреть, я нашел отличные практики реализации, просматривая документ. Хотя на сайте нет слова dataflow , и документация должна быть лучше отредактирована, с духом проекта все в порядке. Также есть пара разработчиков сторонних компонентов. По крайней мере, он имеет приятный графический интерфейс.

0 голосов
/ 03 июня 2010

Если вы подумаете об этом, реляционные базы данных - это ребенок-постер. Подумайте о любом плане оценки, где каждый оператор обрабатывает потоки строк из других операторов / таблиц и создает потоки, которые передаются другим операторам.

Случайное изображение, украденное из Интернета: альтернативный текст http://mathcs.slu.edu/~goldwasser/courses/slu/csa341/2003_Fall/lectures/oracle_optimizer/T3_treeB.gif

...