SlideShare a Scribd company logo
SynapseGrid
Язык описания систем реального времени
Арсений Жижелев, Мэйл.Ру Геймз
Введение
Системы реального времени – баланс
буферизации и latency
потоковая обработка событий/данных
+ функциональное программирование
 параллельность, надёжность
+ композиция систем
 модульность и интеграция
Аналоги SynapseGrid
(Simulink, AnyLogic, Spark, Rx)
Система ведения диалога
«Речевой портал»
Мотивация создания языка описания систем реального
времени
Речевой портал: выделение признаков
MFCC (CMU sphinx4)
● обрабатывается дискретный сигнал
● есть модули
– функциональные, без состояния,
– с состоянием,
– с собственной буферизацией и задержкой
● в поток встроены управляющие сигналы – начало/конец речи
● обратные связи
заказ такси
объявления
10мс фреймы
100мс задержки (latency)
длительный процесс распознавания (~1x)
•  нельзя распознавать пакетно
реакция на события в реальном времени
• перебивание
• обратная связь от модуля произнесения
• телефония: соединение/занято
• диалог по второй линии
разветвлённые алгоритмы потоковой обработки
• выбор ветки обработки зависит от состояния
Речевой портал:
технологические потребности
I. DSL
I. DSL
Пример 1: Hello, World
Hello, World
object HelloSystem extends BaseTypedSystem{
val nameInput = input [String]("nameInput")
val helloOutput = output[String]("helloOutput")
(nameInput -> helloOutput).
map("Hello, "+_, "hello, + _")
}
val f = HelloSystem.
toStaticSystem.
toDynamicSystem.
toMapTransducer(
HelloSystem.nameInput,
HelloSystem.helloOutput)
val name = "World"
val hello = f(name)
val f = magic(HelloSystem)
val hello = f("World")
println(hello)
val s = HelloSystem.toStaticSystem
s.toDot().saveTo("helloSystem.dot")
I. DSL
Пример 2: VAD
Цепь обнаружения речи
•оценка текущего уровня громкости (мощности) и уровня фона
•сглаживание уровней
•подсчёт длительности условия: высокий уровень/низкий уровень
•переход в состояния: начало речи/речь/окончание речи/фон
•буферизация сигнала до момента принятия решения
•перенаправление сигнала речи на речевой выход
•формирование сигналов начала речи и окончания речи
•конфигурирование параметров оценки
Цепь детектирования речи VAD
(voice activity detection)
время
уровень
15dB
val currentStateLengthMs = state[Int]("currentStateLengthMs", 0)
continuousAudioInput.
map(_.timeFrame.deltaTimeMs, "deltaTimeMs").
addTo(currentStateLengthMs)
automaton.onAutomatonStateChanged.const(0).
saveTo(currentStateLengthMs, "len = 0")
VAD:
Подсчёт длительности текущего состояния
trait LevelsEstimationB extends Breadboard with InputB {
continuousAudioInput.
withState(levels).
stateMap({
case (levelsValue,mediaFrame) =>
val newLevelsValue = levelsValue.nextLevels(mediaFrame.energyDb)
(newLevelsValue,(newLevelsValue,mediaFrame))
},"energyLevel") >> mediaFrameWithLevels
(mediaFrameWithLevels -> newLevels).map(_._1, "_._1")
}
VAD:
Оценка уровня сигнала/фона
trait Breadboard extends BaseTypedSystem {
val settings: VadSettings
val speechEndBufferMs = settings.speechEndDecisionMs
val frameSizeMs = 10
//internal contacts for sub schemes interconnections
lazy val mediaFrameWithLevels =
contact[(Levels, MediaFrame)]("mediaFrameWithLevels")
lazy val newLevels = contact[Levels]("newLevels")
lazy val speechSurelyStarted = contact[Any]("speechSurelyStarted")
lazy val speechSurelyFinished = contact[Any]("speechSurelyFinished")
// The state of VAD algorithm
lazy val currentStateLengthMs = state[Int]("currentStateLengthMs", 0)
lazy val speechBufferReversed =
state[List[MediaFrame]]("speechBufferReversed", List())
lazy val levels = state[Levels]("levels", Levels())
}
Макетная плата (breadboard/protoboard)
Cake pattern
I. DSL
Пример 3: ETL
Extract Transform Load
I. DSL
4. Обзор возможностей DSL
Примитивы
• обычные Scala-функции
• контакты
• управляемые переменные состояния
Базовые средства композиции
• map, flatMap, flatten, filter, collect, foreach, stateFlatMap
• + несколько специальных DSL для частых задач
• обратные связи (!) «из коробки»
Средства абстрагирования/агрегации
• обычные trait’ы Scala – cake pattern/breadboard
• подсистемы с типизированными входами/выходами –
мультифункции
Язык SynapseGrid
State DSL: работа с состоянием (stateMap, stateFlatMap, updateState, withState)
• Специализированные инструменты для numeric, для списков, для игнибиторных дуг
• Зависимые переменные (spreadsheet): (update, onChange, dependsOn)
• Накопление данных до сигнала сброса: lastJoinUntil
Automata DSL: конечный автомат на основе событий, поступающих на разные
контакты
Continuation DSL: конечный автомат на основе событий с одного контакта
Switcher DSL: взаимоисключающие ветви(If, ElseIf, Else)
Discrete time DSL: управление дискретным временем: redlinks, delayN
Exception DSL: обработка исключений: tryMap, success, recover, unhandled
Инструментарий DSL/API
II. Исполнение системы
Однопоточное, параллельное, распределённое
Интеграция с другим кодом
Обрабатываемые данные – immutable сигналы:
case class Signal[T](contact:Contact[T], data:T)
Signal(nameInput, "World")
Signal(helloOutput, "Hello, World.")
Текущее состояние исполнения системы в дискретный момент i:
Seq[Signal[_]]
State(0) == Seq(Signal(nameInput, "World"))
State(1) == Seq(Signal(helloOutput, "Hello, World."))
Signal, треллис
Треллис – развёртка состояния во времени.
val trellis = Seq(
Seq(Signal(nameInput, "World")),
Seq(Signal(helloOutput, "Hello, World."))
)
trellis: Seq[Signal[_]]
Треллис
Signal(nameInput, "World")
Signal(helloOutput, "Hello, World.")
Сеть Петри – модель перемещения фишек по
двудольному ориентированному графу.
Контакт – позиция
Связь – переход
Сигнал – фишка
Семантика Synapse Grid – перемещение фишек по
орграфу, пока все фишки не окажутся в выходных
позициях.
Накладные расходы – O(1) на один переход одного
сигнала.
Сеть Петри
Signal(nameInput, "World")
Signal(helloOutput, "Hello, World.")
• обычная функция – один вход/один выход
• функциональная композиция – линейная
f: X => Y
• мультифункция – несколько входов и
выходов
• системная композиция – произвольные
ветвления
^f: X1 x X2 => Y1 x Y2
g: Signal => Seq[Signal]
Подсистемы
(мультифункция)
SystemBuilder – скрипт создания графа системы. Выполняется на
этапе конфигурирования. Используются средства Scala: functions, cake
pattern, for comprehension.
StaticSystem – immutable граф системы.
Используется для статического анализа и для конвертации в *.dot
_.toStaticSystem
SignalProcessor – исполнение системы.
Выполняются функции, привязанные к переходам.
DynamicSystem – инкапсулированный процессор + состояние системы
= чёрный ящик. Принимает и возвращает сигналы:
Signal[Input] => Seq[Signal[Output]]
Transducer – выбран один вход + один выход  построена функция,
скрывающая сигналы. Работает только с данными:
f(i:Input):Seq[Output]
Этапы конвертации системы
Runtime
Config time
Dev/test time
• никаких изменений кода системы, только
вызов .parallel у StaticSystem
• детерминированный результат эквивалентный
однопоточному запуску
• сериализованный доступ к state'у
• дополнительные накладные расходы на
параллельное исполнение. Поэтому имеет
смысл только при некоторых условиях.
Параллельное исполнение
val f = HelloSystem.
toStaticSystem.
toDynamicSystem.
toMapTransducer(
HelloSystem.nameInput,
HelloSystem.helloOutput)
val name = "World"
val hello = f(name)
val f = HelloSystem.
toStaticSystem.
parallel.
toMapTransducer(
HelloSystem.nameInput,
HelloSystem.helloOutput)
val name = "World"
val hello = f(name)
Хотим запустить сложную систему с подсистемами на нескольких хостах
Распределённый запуск: 1
Каждая подсистема оборачивается в эктор
Каждый хост тоже снабжается эктором
Распределённый запуск: 2
На каждом хосте добавляется слой роутеров, каждый из которых представляет свою подсистему
После старта эктора он регистрируется в своём роутере.
Подсистема ничего не знает о расположении других систем. Взаимодействует только со своим
роутером
Распределённый запуск: 3
III. Расширение библиотеки
https://github.com/Primetalk/SynapseGrid
DSL для описания системы
• SystemBuilder – контейнер для
создаваемых связей, входов и выходов.
Минимальный набор методов
• DSL – pimp-my-library – добавлены helper-
методы, позволяющие упростить создание
разных связей
• Extensions – механизм, позволяющий
добавить в SystemBuilder своё состояние,
и затем пользоваться им при
конструировании системы.
• StaticExtensions – механизм,
позволяющий добавить в StaticSystem
дополнительную информацию. Например,
hint’ы для deployment descriptor’а
Устройство библиотеки
SignalProcessor
• RuntimeComponent – инкапсуляция
логики обработки данных на
определённом контакте.
• RuntimeSystem – index по контактам.
С каждым контактом связаны
RuntimeComponent’ы, которые
обрабатывают сигналы.
• unhandledExceptionHandler –
обработка исключений уровня системы
• redlinks – механизм, позволяющий
сделать «сверхвремя» внутри одного
дискретного шага
• SystemConvertingSpi – конвертация
static-системы в RuntimeComponent.
Используются PartialFunction.
• TrellisProducer –
развёртка/построение треллиса во
времени с использованием
RuntimeSystem.
trait SwitcherDsl extends SystemBuilderDsl{
class SwitcherBuilder[T](c: Contact[T],
name: String = "")
(implicit sb: SystemBuilder) {
def If(condition: T => Boolean) =
ElseIf(condition)
def ElseIf(condition: T => Boolean) = {
val id = nextId
conditions += Condition(id, condition)
createContactForId(id)
}
def Else = compileBranches
}
implicit class SwitcherContactOps[T](
val c: Contact[T])
(implicit sb: SystemBuilder) {
def switcher(name: String = "") =
new SwitcherBuilder[T](c, name)
}
}
DSL: switcher
val level = contact[Int]("level")
val sw = level.switcher("sw")
sw.If(_ > 10) >> highLevel
sw.ElseIf(_ > 3) >> mediumLevel
sw.Else() >> lowLevel
val level = contact[Int]("level")
level.filter(_ > 10) >> highLevel
level.filter(i => i<=10 && i > 3) >> mediumLevel
level.filter(_ <= 3) >> lowLevel
IV. Приложения
Системы мягкого реального времени (reactive systems)
Обработка Big Data
Приложения: (reactive systems)
Системы мягкого реального времени
Речевые приложения
• Распознавание/синтез речи, ведение диалогов
Обработка звука в телефонии
• Телеконференции/очистка звука/подстройка громкости
• Сервисы самообслуживания (DTMF)
Обработка видеопотоков
Реализация SMS-сервисов
• биллинг
Распределённая обработка данных
• Анализ логов
• ETL
Мониторинг АСУТП
IV. Экосистема Big Data
СПАСИБО ЗА ВНИМАНИЕ
a.zhizhelev@corp.mail.ru
https://github.com/Primetalk/SynapseGrid

More Related Content

What's hot

О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"
Yandex
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
Alexey Paznikov
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Mikhail Kurnosov
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
Mikhail Kurnosov
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Dmitry Tsitelov
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 
Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Roman Elizarov
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
 
О.В.Сухорослов "Параллельное программирование"
О.В.Сухорослов "Параллельное программирование"О.В.Сухорослов "Параллельное программирование"
О.В.Сухорослов "Параллельное программирование"
Yandex
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
Alexey Paznikov
 
Haskell
HaskellHaskell
Haskell
DevDay
 
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)Roman Elizarov
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Mikhail Kurnosov
 
О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"
Yandex
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
Mikhail Kurnosov
 
Многопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и ПрактикаМногопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и Практика
Roman Elizarov
 
О.В.Сухорослов "Паралленльные вычисления"
О.В.Сухорослов "Паралленльные вычисления"О.В.Сухорослов "Паралленльные вычисления"
О.В.Сухорослов "Паралленльные вычисления"
Yandex
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
Alexey Paznikov
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"
Yandex
 
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...Mikhail Kurnosov
 

What's hot (20)

О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
О.В.Сухорослов "Параллельное программирование"
О.В.Сухорослов "Параллельное программирование"О.В.Сухорослов "Параллельное программирование"
О.В.Сухорослов "Параллельное программирование"
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
Haskell
HaskellHaskell
Haskell
 
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
 
О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Многопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и ПрактикаМногопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и Практика
 
О.В.Сухорослов "Паралленльные вычисления"
О.В.Сухорослов "Паралленльные вычисления"О.В.Сухорослов "Паралленльные вычисления"
О.В.Сухорослов "Паралленльные вычисления"
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"
 
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
 

Viewers also liked

The Heroine's Journey World edition
The Heroine's Journey World edition The Heroine's Journey World edition
The Heroine's Journey World edition
Peter de Kuster
 
projets finals
projets finalsprojets finals
projets finalsParth Dave
 
Meitin Academic Vita 06-01-15
Meitin Academic Vita 06-01-15Meitin Academic Vita 06-01-15
Meitin Academic Vita 06-01-15Rich Meitin
 
The Golden Age of ISlam
The Golden Age of ISlamThe Golden Age of ISlam
The Golden Age of ISlamCloeyasp
 
The Heroine's Journey World
The Heroine's Journey World The Heroine's Journey World
The Heroine's Journey World
Peter de Kuster
 
top7policeofficerinterviewquestionsanswers-130507115642-phpapp02.pdf
top7policeofficerinterviewquestionsanswers-130507115642-phpapp02.pdftop7policeofficerinterviewquestionsanswers-130507115642-phpapp02.pdf
top7policeofficerinterviewquestionsanswers-130507115642-phpapp02.pdfDavid Dobbs
 
The Heroine's Journey World edition
The Heroine's Journey World edition The Heroine's Journey World edition
The Heroine's Journey World edition
Peter de Kuster
 
Séance 1 Who are you?
Séance 1 Who are you?Séance 1 Who are you?
Séance 1 Who are you?
Sarah Padlock
 
Cara cara membuat blog
Cara cara membuat blogCara cara membuat blog
Cara cara membuat blog
rosni68
 
the missing parts of ayurveda by Dr panchajanya kumar .deevi
the missing parts of ayurveda by Dr panchajanya kumar .deevithe missing parts of ayurveda by Dr panchajanya kumar .deevi
the missing parts of ayurveda by Dr panchajanya kumar .deevi
Panchajanya Kumar
 
Analysis of Digipak Adverts
Analysis of Digipak AdvertsAnalysis of Digipak Adverts
Analysis of Digipak AdvertsCaroline Spencer
 
Developing and supporting a multilingual learning community_IB conference_Rom...
Developing and supporting a multilingual learning community_IB conference_Rom...Developing and supporting a multilingual learning community_IB conference_Rom...
Developing and supporting a multilingual learning community_IB conference_Rom...Karin Martin
 

Viewers also liked (19)

The Heroine's Journey World edition
The Heroine's Journey World edition The Heroine's Journey World edition
The Heroine's Journey World edition
 
DIMITRIS BEKIARIS
DIMITRIS BEKIARISDIMITRIS BEKIARIS
DIMITRIS BEKIARIS
 
MarkCourcier.Resume
MarkCourcier.ResumeMarkCourcier.Resume
MarkCourcier.Resume
 
projets finals
projets finalsprojets finals
projets finals
 
ammars-c.v (1)
ammars-c.v (1)ammars-c.v (1)
ammars-c.v (1)
 
Meitin Academic Vita 06-01-15
Meitin Academic Vita 06-01-15Meitin Academic Vita 06-01-15
Meitin Academic Vita 06-01-15
 
The Golden Age of ISlam
The Golden Age of ISlamThe Golden Age of ISlam
The Golden Age of ISlam
 
The Heroine's Journey World
The Heroine's Journey World The Heroine's Journey World
The Heroine's Journey World
 
top7policeofficerinterviewquestionsanswers-130507115642-phpapp02.pdf
top7policeofficerinterviewquestionsanswers-130507115642-phpapp02.pdftop7policeofficerinterviewquestionsanswers-130507115642-phpapp02.pdf
top7policeofficerinterviewquestionsanswers-130507115642-phpapp02.pdf
 
Yourprezi
YourpreziYourprezi
Yourprezi
 
anwar c.v english
anwar c.v englishanwar c.v english
anwar c.v english
 
David's Resume
David's ResumeDavid's Resume
David's Resume
 
The Heroine's Journey World edition
The Heroine's Journey World edition The Heroine's Journey World edition
The Heroine's Journey World edition
 
Séance 1 Who are you?
Séance 1 Who are you?Séance 1 Who are you?
Séance 1 Who are you?
 
Cara cara membuat blog
Cara cara membuat blogCara cara membuat blog
Cara cara membuat blog
 
the missing parts of ayurveda by Dr panchajanya kumar .deevi
the missing parts of ayurveda by Dr panchajanya kumar .deevithe missing parts of ayurveda by Dr panchajanya kumar .deevi
the missing parts of ayurveda by Dr panchajanya kumar .deevi
 
Analysis of Digipak Adverts
Analysis of Digipak AdvertsAnalysis of Digipak Adverts
Analysis of Digipak Adverts
 
Developing and supporting a multilingual learning community_IB conference_Rom...
Developing and supporting a multilingual learning community_IB conference_Rom...Developing and supporting a multilingual learning community_IB conference_Rom...
Developing and supporting a multilingual learning community_IB conference_Rom...
 
Software
SoftwareSoftware
Software
 

Similar to Функциональные сети на основе библиотеки SynapseGrid

ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...
ARCCN
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
Unguryan Vitaliy
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
Dima Dzuba
 
Уязвимости сервисов
Уязвимости сервисовУязвимости сервисов
Уязвимости сервисовPositive Hack Days
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Mikhail Kurnosov
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
Sergey Staroletov
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Ontico
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Cisco Russia
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Mikhail Kurnosov
 
SDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использоватьSDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использовать
Cisco Russia
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
Technopark
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1Liudmila Li
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ RubtsovOntico
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
Vladislav Bezverhiy
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
Alex Ott
 

Similar to Функциональные сети на основе библиотеки SynapseGrid (20)

ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
 
Уязвимости сервисов
Уязвимости сервисовУязвимости сервисов
Уязвимости сервисов
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
 
SDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использоватьSDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использовать
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
 

Функциональные сети на основе библиотеки SynapseGrid

  • 1. SynapseGrid Язык описания систем реального времени Арсений Жижелев, Мэйл.Ру Геймз
  • 3. Системы реального времени – баланс буферизации и latency потоковая обработка событий/данных + функциональное программирование  параллельность, надёжность + композиция систем  модульность и интеграция Аналоги SynapseGrid (Simulink, AnyLogic, Spark, Rx)
  • 4. Система ведения диалога «Речевой портал» Мотивация создания языка описания систем реального времени
  • 5. Речевой портал: выделение признаков MFCC (CMU sphinx4) ● обрабатывается дискретный сигнал ● есть модули – функциональные, без состояния, – с состоянием, – с собственной буферизацией и задержкой ● в поток встроены управляющие сигналы – начало/конец речи ● обратные связи заказ такси объявления
  • 6. 10мс фреймы 100мс задержки (latency) длительный процесс распознавания (~1x) •  нельзя распознавать пакетно реакция на события в реальном времени • перебивание • обратная связь от модуля произнесения • телефония: соединение/занято • диалог по второй линии разветвлённые алгоритмы потоковой обработки • выбор ветки обработки зависит от состояния Речевой портал: технологические потребности
  • 8. I. DSL Пример 1: Hello, World
  • 9. Hello, World object HelloSystem extends BaseTypedSystem{ val nameInput = input [String]("nameInput") val helloOutput = output[String]("helloOutput") (nameInput -> helloOutput). map("Hello, "+_, "hello, + _") } val f = HelloSystem. toStaticSystem. toDynamicSystem. toMapTransducer( HelloSystem.nameInput, HelloSystem.helloOutput) val name = "World" val hello = f(name) val f = magic(HelloSystem) val hello = f("World") println(hello) val s = HelloSystem.toStaticSystem s.toDot().saveTo("helloSystem.dot")
  • 10. I. DSL Пример 2: VAD Цепь обнаружения речи
  • 11. •оценка текущего уровня громкости (мощности) и уровня фона •сглаживание уровней •подсчёт длительности условия: высокий уровень/низкий уровень •переход в состояния: начало речи/речь/окончание речи/фон •буферизация сигнала до момента принятия решения •перенаправление сигнала речи на речевой выход •формирование сигналов начала речи и окончания речи •конфигурирование параметров оценки Цепь детектирования речи VAD (voice activity detection) время уровень 15dB
  • 12. val currentStateLengthMs = state[Int]("currentStateLengthMs", 0) continuousAudioInput. map(_.timeFrame.deltaTimeMs, "deltaTimeMs"). addTo(currentStateLengthMs) automaton.onAutomatonStateChanged.const(0). saveTo(currentStateLengthMs, "len = 0") VAD: Подсчёт длительности текущего состояния
  • 13. trait LevelsEstimationB extends Breadboard with InputB { continuousAudioInput. withState(levels). stateMap({ case (levelsValue,mediaFrame) => val newLevelsValue = levelsValue.nextLevels(mediaFrame.energyDb) (newLevelsValue,(newLevelsValue,mediaFrame)) },"energyLevel") >> mediaFrameWithLevels (mediaFrameWithLevels -> newLevels).map(_._1, "_._1") } VAD: Оценка уровня сигнала/фона
  • 14. trait Breadboard extends BaseTypedSystem { val settings: VadSettings val speechEndBufferMs = settings.speechEndDecisionMs val frameSizeMs = 10 //internal contacts for sub schemes interconnections lazy val mediaFrameWithLevels = contact[(Levels, MediaFrame)]("mediaFrameWithLevels") lazy val newLevels = contact[Levels]("newLevels") lazy val speechSurelyStarted = contact[Any]("speechSurelyStarted") lazy val speechSurelyFinished = contact[Any]("speechSurelyFinished") // The state of VAD algorithm lazy val currentStateLengthMs = state[Int]("currentStateLengthMs", 0) lazy val speechBufferReversed = state[List[MediaFrame]]("speechBufferReversed", List()) lazy val levels = state[Levels]("levels", Levels()) } Макетная плата (breadboard/protoboard) Cake pattern
  • 17. I. DSL 4. Обзор возможностей DSL
  • 18. Примитивы • обычные Scala-функции • контакты • управляемые переменные состояния Базовые средства композиции • map, flatMap, flatten, filter, collect, foreach, stateFlatMap • + несколько специальных DSL для частых задач • обратные связи (!) «из коробки» Средства абстрагирования/агрегации • обычные trait’ы Scala – cake pattern/breadboard • подсистемы с типизированными входами/выходами – мультифункции Язык SynapseGrid
  • 19. State DSL: работа с состоянием (stateMap, stateFlatMap, updateState, withState) • Специализированные инструменты для numeric, для списков, для игнибиторных дуг • Зависимые переменные (spreadsheet): (update, onChange, dependsOn) • Накопление данных до сигнала сброса: lastJoinUntil Automata DSL: конечный автомат на основе событий, поступающих на разные контакты Continuation DSL: конечный автомат на основе событий с одного контакта Switcher DSL: взаимоисключающие ветви(If, ElseIf, Else) Discrete time DSL: управление дискретным временем: redlinks, delayN Exception DSL: обработка исключений: tryMap, success, recover, unhandled Инструментарий DSL/API
  • 20. II. Исполнение системы Однопоточное, параллельное, распределённое Интеграция с другим кодом
  • 21. Обрабатываемые данные – immutable сигналы: case class Signal[T](contact:Contact[T], data:T) Signal(nameInput, "World") Signal(helloOutput, "Hello, World.") Текущее состояние исполнения системы в дискретный момент i: Seq[Signal[_]] State(0) == Seq(Signal(nameInput, "World")) State(1) == Seq(Signal(helloOutput, "Hello, World.")) Signal, треллис
  • 22. Треллис – развёртка состояния во времени. val trellis = Seq( Seq(Signal(nameInput, "World")), Seq(Signal(helloOutput, "Hello, World.")) ) trellis: Seq[Signal[_]] Треллис Signal(nameInput, "World") Signal(helloOutput, "Hello, World.")
  • 23. Сеть Петри – модель перемещения фишек по двудольному ориентированному графу. Контакт – позиция Связь – переход Сигнал – фишка Семантика Synapse Grid – перемещение фишек по орграфу, пока все фишки не окажутся в выходных позициях. Накладные расходы – O(1) на один переход одного сигнала. Сеть Петри Signal(nameInput, "World") Signal(helloOutput, "Hello, World.")
  • 24. • обычная функция – один вход/один выход • функциональная композиция – линейная f: X => Y • мультифункция – несколько входов и выходов • системная композиция – произвольные ветвления ^f: X1 x X2 => Y1 x Y2 g: Signal => Seq[Signal] Подсистемы (мультифункция)
  • 25. SystemBuilder – скрипт создания графа системы. Выполняется на этапе конфигурирования. Используются средства Scala: functions, cake pattern, for comprehension. StaticSystem – immutable граф системы. Используется для статического анализа и для конвертации в *.dot _.toStaticSystem SignalProcessor – исполнение системы. Выполняются функции, привязанные к переходам. DynamicSystem – инкапсулированный процессор + состояние системы = чёрный ящик. Принимает и возвращает сигналы: Signal[Input] => Seq[Signal[Output]] Transducer – выбран один вход + один выход  построена функция, скрывающая сигналы. Работает только с данными: f(i:Input):Seq[Output] Этапы конвертации системы Runtime Config time Dev/test time
  • 26. • никаких изменений кода системы, только вызов .parallel у StaticSystem • детерминированный результат эквивалентный однопоточному запуску • сериализованный доступ к state'у • дополнительные накладные расходы на параллельное исполнение. Поэтому имеет смысл только при некоторых условиях. Параллельное исполнение val f = HelloSystem. toStaticSystem. toDynamicSystem. toMapTransducer( HelloSystem.nameInput, HelloSystem.helloOutput) val name = "World" val hello = f(name) val f = HelloSystem. toStaticSystem. parallel. toMapTransducer( HelloSystem.nameInput, HelloSystem.helloOutput) val name = "World" val hello = f(name)
  • 27. Хотим запустить сложную систему с подсистемами на нескольких хостах Распределённый запуск: 1
  • 28. Каждая подсистема оборачивается в эктор Каждый хост тоже снабжается эктором Распределённый запуск: 2
  • 29. На каждом хосте добавляется слой роутеров, каждый из которых представляет свою подсистему После старта эктора он регистрируется в своём роутере. Подсистема ничего не знает о расположении других систем. Взаимодействует только со своим роутером Распределённый запуск: 3
  • 31. DSL для описания системы • SystemBuilder – контейнер для создаваемых связей, входов и выходов. Минимальный набор методов • DSL – pimp-my-library – добавлены helper- методы, позволяющие упростить создание разных связей • Extensions – механизм, позволяющий добавить в SystemBuilder своё состояние, и затем пользоваться им при конструировании системы. • StaticExtensions – механизм, позволяющий добавить в StaticSystem дополнительную информацию. Например, hint’ы для deployment descriptor’а Устройство библиотеки SignalProcessor • RuntimeComponent – инкапсуляция логики обработки данных на определённом контакте. • RuntimeSystem – index по контактам. С каждым контактом связаны RuntimeComponent’ы, которые обрабатывают сигналы. • unhandledExceptionHandler – обработка исключений уровня системы • redlinks – механизм, позволяющий сделать «сверхвремя» внутри одного дискретного шага • SystemConvertingSpi – конвертация static-системы в RuntimeComponent. Используются PartialFunction. • TrellisProducer – развёртка/построение треллиса во времени с использованием RuntimeSystem.
  • 32. trait SwitcherDsl extends SystemBuilderDsl{ class SwitcherBuilder[T](c: Contact[T], name: String = "") (implicit sb: SystemBuilder) { def If(condition: T => Boolean) = ElseIf(condition) def ElseIf(condition: T => Boolean) = { val id = nextId conditions += Condition(id, condition) createContactForId(id) } def Else = compileBranches } implicit class SwitcherContactOps[T]( val c: Contact[T]) (implicit sb: SystemBuilder) { def switcher(name: String = "") = new SwitcherBuilder[T](c, name) } } DSL: switcher val level = contact[Int]("level") val sw = level.switcher("sw") sw.If(_ > 10) >> highLevel sw.ElseIf(_ > 3) >> mediumLevel sw.Else() >> lowLevel val level = contact[Int]("level") level.filter(_ > 10) >> highLevel level.filter(i => i<=10 && i > 3) >> mediumLevel level.filter(_ <= 3) >> lowLevel
  • 33. IV. Приложения Системы мягкого реального времени (reactive systems) Обработка Big Data
  • 34. Приложения: (reactive systems) Системы мягкого реального времени Речевые приложения • Распознавание/синтез речи, ведение диалогов Обработка звука в телефонии • Телеконференции/очистка звука/подстройка громкости • Сервисы самообслуживания (DTMF) Обработка видеопотоков Реализация SMS-сервисов • биллинг Распределённая обработка данных • Анализ логов • ETL Мониторинг АСУТП

Editor's Notes

  1. В докладе рассматривается библиотека SynapseGrid, относящаяся к классу FRP (functional reactive programming/data flow programming). В первой части описывается простой элегантный DSL для конструирования систем на основе SynapseGrid. Приводится пример простой системы. Во второй части описываются имеющиеся варианты исполнения готовой системы: - превращение системы в обычную функцию; - использование RX-интерфейса; - запуск в параллельном режиме на пуле потоков (как в parallel collections); - запуск на системе экторов Akka на одном хосте; - запуск на системе экторов Akka на нескольких хостах. В третьей части рассказывается о модульной архитектуре библиотеки и возможностях её расширения. В заключении описывается класс систем, реализуемых с помощью библиотеки. А именно, системы потоковой обработки данных с ветвлением. Приводятся примеры применения библиотеки в реальных проектах.
  2. Простые операции (map-flatMap) Управляемое состояние Подсистемы
  3. Современная тенденция на изменение подходов к программированию. тренд — в сторону функционального подхода. Например, Spark — распределённая функциональная система почти реального времени. типичный допустимый latency — секунды. Используется подход micro batch Для обработки речи latency — ниже — сотни миллисекунд. Здесь требуется ещё более компактные пакеты — нано пакеты, фреймы. Надо сравнить с MatLab’овским Simulink http://zhenilo.narod.ru/main/beginers/F42.html - сонофильм http://matlab.ru/products/simulink Simulink http://www.eclipse.org/atl/usecases/UML2AnyLogic/ - AnyLogic
  4. (картинка из презентаций по РП) описать архитектуру системы телефония
  5. Одна из задач РП – выделение признаков. Можно видеть, что есть несколько этапов обработки, разветвление потока данных, есть модули с состоянием и буферизацией. Также следует отметить, что прямо в поток аудиоданных встроены управляющие сигналы начала/окончания речи. В системе присутствуют разнообразные обратные связи. Например, когда пользователь говорит «Плохо слышно», это становится понятно на верхних уровнях ведения диалога, а изменения передаются на нижележащие уровни когда пользователь начинает набирать DTMF, то необходимо отключить модуль распознавания речи и аннулировать результаты, полученные после определённого момента времени.
  6. Простые операции (map-flatMap) Управляемое состояние Подсистемы
  7. Простые операции (map-flatMap) Управляемое состояние Подсистемы
  8. Простые операции (map-flatMap) Управляемое состояние Подсистемы
  9. вставить график уровня сигнала и порогов принятия решения
  10. Концепция макетной платы. В электронике широко распространены специальные макетные платы. В них множество отверстий, и зачастую сделана разводка некоторых стандартных цепей, например, под БД или под микропроцессор. Затем инженер добавляет несколько компонентов, связывает их с другими частями, и получается новое устройство. Аналогичный подход используется в SG. На основе cake-pattern’а. http://positiveland.ru/2011/10/birthdaycake/ Двухполюсники – связи между контактами
  11. Простые операции (map-flatMap) Управляемое состояние Подсистемы
  12. Пример прокачки нескольких каналов. В систему вставлены две подсистемы –
  13. Простые операции (map-flatMap) Управляемое состояние Подсистемы
  14. Для описания языка программирования необходимо описать три основных элемента: примитивы, средства композиции и средства абстрагирования. … Мультифункция – функциональная конструкция, имеющая несколько входов и несколько выходов.
  15. DSL разбит на отдельные API
  16. Превращение в функцию Использование буферизованной динамической системы Интеграция с rx - превращение системы в обычную функцию; - использование RX-интерфейса; - запуск в параллельном режиме на пуле потоков (как в parallel collections); - запуск на системе экторов Akka на одном хосте; - запуск на системе экторов Akka на нескольких хостах.
  17. Immutable сигнал — данные, привязанные к контакту. Внешнее связывание состояние — все контакты и привязанные к ним данные сеть Петри — передвижение фишек по DAG треллис — развёртка состояния во времени дискретное время, вложенное дискретное время для подсистем, красные ссылки
  18. Immutable сигнал — данные, привязанные к контакту. Внешнее связывание состояние — все контакты и привязанные к ним данные сеть Петри — передвижение фишек по DAG треллис — развёртка состояния во времени дискретное время, вложенное дискретное время для подсистем, красные ссылки
  19. Семантика кода на языке SG — исполнение в дискретном времени сети Петри встроенная явная параллельность семантики
  20. Обычная функция имеет один вход и один выход. Подсистема имеет несколько входов и несколько выходов. Семантика такой конструкции выражается с помощью функции на сигналах. Однако в пространстве данных такая подсистема выглядит как мультифункция.
  21. Выбранные подсистемы можно завернуть в эктор Преимущества для SynapseGrid параллельное исполнение кода подсистем интеграция на верхнем уровне supervisor – fault tolerance распределённый запуск на нескольких хостах Преимущества для Akka типизация экторов (входов и выходов) наблюдаемые связи между экторами
  22. Пример использования switcher’а. В зависимости от уровня сигнала мы направляем данные на один из выходов. Причём условия не являются взаимоисключающими. Добавляем картинку для switcher’а
  23. Spark + + Akka SynapseGrid отлично вписывается в экосистему BigData, предоставляя развитые возможности по распределённой потоковой обработке данных. Планируется добавить возможность запуска SG на инфраструктуре Hadoop/Spark. Hadoop Типичные задержки – несколько минут Spark Задержку можно сделать до 1 секунды SynapseGrid Задержки порядка 10мс
  24. телефония
  25. Формируется сигнал окончания речи, а данные из буфера направляются на выход SpeechOutput
  26. Алгоритм может находиться в одном из 5 состояний – инициализация фона, вне речи, подозрение на начало речи, внутри речи, подозрение на окончание речи. Текущее состояние моделируется конечным автоматом, состояние которого находится в automatonState. Например, находясь в состоянии InSpeech, при появлении сигнала на контакте newLevels val newLevels = contact[Levels]("newLevels") (mediaFrameWithLevels -> newLevels).map(_._1, "_._1") newLevels.saveTo(levels)
  27. Единица обработки - фрейм, целое число, булево значение, опциональное значение. Оверхед на создание сигнала оправдан тем, что только организация вычислений управляется числами и булевскими значениями.