Slide 1

Slide 1 text

Параллельное программирование Haskell в @sigrlami

Slide 2

Slide 2 text

Для чего нужно? ● решение задач за меньшее время на нескольких процессорах/ядрах/.. ● решение задач с большим объемом входных данных – использование распределенной памяти нескольких вычислительных узлов ● решение задач с большой вероятностью получения корректного решения ( дублирование вычислений – параллельный пересчет)

Slide 3

Slide 3 text

Вычислительные системы ● Такие? IBM Blue Gene

Slide 4

Slide 4 text

Вычислительны системы ● Но можно и такие Parallella Board

Slide 5

Slide 5 text

Вычислительны системы ● Но можно и такие Parallella board cluster

Slide 6

Slide 6 text

Разработка параллельного алгоритма ● Поиск параллелизма в известном последовательном алгоритме, его модификация или создание нового алгоритма ● Декомпозиция задачи на подзадачи, которые могут выполнятся параллельно ● Анализ зависимостей между подзадачами Параллельная версия самого эффективного последовательного алгоритма решения задачи необязательно будет самой эффективной параллельной реализацией

Slide 7

Slide 7 text

Закон Амдала

Slide 8

Slide 8 text

Control.Monad.Parallel (parallel)

Slide 9

Slide 9 text

Ленивые вычисления ● Haskell Non-Strict (Не строгий) ● GHC использует ленивые вычисления по- умолчанию

Slide 10

Slide 10 text

Ленивые вычисления ● Weak Head Normal Form (WHNF) ● Функция seq

Slide 11

Slide 11 text

Монада Eval

Slide 12

Slide 12 text

Монада Eval

Slide 13

Slide 13 text

Монада Eval

Slide 14

Slide 14 text

Монада Eval

Slide 15

Slide 15 text

Монада Eval

Slide 16

Slide 16 text

Control.DeepSeq ● `rdeepseq` Глубокая оценка (deep evaluation)

Slide 17

Slide 17 text

Scramble

Slide 18

Slide 18 text

Scramble ● На процессорах без дополнительных ядер показывает результат хуж ● На 8 ядерном процессоре – производительность порядка x5-6 ● На 16 ядерном процессоре – производительность порядка х7-8

Slide 19

Slide 19 text

Evaluation strategies Статегии оценки

Slide 20

Slide 20 text

Evaluation strategies Комбинация стратегий

Slide 21

Slide 21 text

REPA, GPU, MPI, OpenMp и прочие ● Большая часть мейнстримовых технологий имеют Haskell биндиниги ● Лишают преимущства функционального программирования ● Сложности в обработке ошибок