В настоящее время я изучаю свой следующий проект. Это находится на этапе предварительного планирования, поэтому этот вопрос заключается в том, чтобы получить обзор существующих технологий.
Настройка
У меня есть направленный ациклический граф (DAG) с несколькими входами и выходами, подумайте об искусственной нейронной сети:
Общим способом обработки такой структуры является обработка всей сети на каждом (временном) этапе. Я считаю, что это метод, используемый библиотеками frp, например netwire
.
Теперь я в удачном положении, что у меня есть поток событий, каждый из которых представляет изменение в одном из входных узлов. Идея состоит в том, что я, вероятно, не должен накладывать каждый node в сети, если я могу статически знать, что данное изменение повлияет только на его часть.
Пример
В изображении выше 5, 7 и 3 находятся входы, 11 и 8 являются "скрытыми", а 2, 9 и 10 - выходными узлами. Изменение на node 5 повлияет только на node 11 и фактически на узлы 2, 9 и 10. Мне не нужно обрабатывать узлы 7, 3 и 8.
Цель
Обработайте такой тип сети с минимальной задержкой. Размер графиков, вероятно, достигнет до 100 тыс. Узлов, при этом выполняется умеренное количество вычислений за node.
План
Я надеюсь, что кто-то активизирует и рекламирует библиотеку X, которая просто выполняет свою работу.
В противном случае мой текущий план - вывести вычисление на вход node из описания графика. Вероятно, я буду использовать монаду Par
, чтобы мне самому не приходилось иметь дело с зависимостями данных и до сих пор получаю выгоду от многоядерных машин.
Вопросы
- Есть ли там библиотека, которая просто делает то, что мне нужно?
- Является ли мой план
Par
выполнимым? Сколько это зависит от объема обработки, необходимой в каждом node?