Как я могу объединить несколько функций в виде DAG во время выполнения - PullRequest
3 голосов
/ 27 марта 2012

У меня есть несколько классов, каждый из которых подкласс оператора.Оператор имеет несколько входов и выходов различных типов: изображение, номер, строка.Каждый подкласс реализует метод run (), который выполняет вычисления.Теперь я хотел бы разработать контейнер для этих операторов, чтобы сделать из них более крупных операторов.Контейнер должен быть максимально эффективным, поэтому я планирую использовать потоки.Я нашел пример в библиотеке графов Boost, который позволяет мне вычислять порядок, в котором я должен выполнять вычисления: http://www.boost.org/doc/libs/1_49_0/libs/graph/doc/file_dependency_example.html, но я думаю, что может быть даже лучший способ сделать это: каждый оператор может ждатьв заблокированном состоянии, пока все его входы не будут готовы.Было бы хорошо, если бы в контейнере был подкласс оператора, позволяющий рекурсивно их объединять.У меня такое ощущение, что это известная схема проектирования.

Ответы [ 2 ]

0 голосов
/ 29 октября 2012

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

Составной шаблон описывает, что группа объектов должна обрабатываться так же, как один экземпляр объекта.

0 голосов
/ 02 апреля 2012

Может быть, вы могли бы использовать блок-схему TBB?

http://software.intel.com/en-us/blogs/2011/09/08/the-intel-threading-building-blocks-flow-graph-is-now-fully-supported/

...