12 встреча — Многопоточность-2 (А. Свириденков)

Preview:

DESCRIPTION

12 встреча Smolensk Computer Science Club Презентация Анатолия Свириденкова про многопоточность (часть 2) ВКонтакте: http://vk.com/scsc12

Citation preview

Многопоточность II

Smolensk Computer Science Club

Свириденков Анатолий

Закон Амдала

a — доля последовательных вычислений;

p — количество потоков.

Эффект ускорения от роста числа вычислительных узлов

Классификация Флина

● SISD (Single Instruction Single Data) – классический процессор старой школы

● SIMD (Single Instruction Multiple Data) – MMX, SSE

● MISD (Multiple Instruction Single Data) – до конца не определено

● MIMD (Multiple Instruction Multiple Data) – многоядерные процессоры

Варианты параллелизма

● Скрытый параллелизм;

● Сильно связанный параллелизм (многоядерность, многопроцессорность);

● Слабо связанный параллелизм (кластеры).

Варианты взаимодействия потоков

● Общие ресурсы (более распространены при сильно связанном параллелизме);

● События (более распространены при слабо связанном параллелизме);

● Комплексный.

Примеры высокоуровневых архитектур с разделяемыми ресурсами

● Производитель\потребитель

● Очередь заданий

● Код с OpenMP

● Некоторый код из TBB

Пример кода на OpenMP

int x = 0;#pragma omp parallel forfor (int i = 0; i < 1024; i++){ #pragma omp critical(x) x++;}

Примеры высокоуровневых архитектур основанных на событиях

● TCP/IP

● Пул потоков

● Асинхронное программирование

● Map reduce

● Библиотека параллельных шаблонов (ppl)

Паттерн проактор в библиотеке boost::asio

Направление развития

● Языки со «встроенной» многопоточностью

● Увеличение доли скрытого параллелизма

● Распараллеливание при компиляции

● и т.д.

Потенциальные проблемы

● Математическое понятие параллельного алгоритма плохо проработано и математика тут плохой помощник;

● Математически эквивалентные программы, не эквивалентны при переходе к многопоточности;

● Интуиция наработанная на последовательных алгоритмах вредит при переходе к параллельным;

Например: при сортировке лучше распараллеливается алгоритм на основе слияния. QuickSort распараллеливается плохо.

Операции, которые губят параллельный алгоритм

● Синхронизация

● Обмен данными между потоками

● Дублирование

● Кеширование

Основные методы

● Обработка пакетов данных независимо

● Метод сдваивания или reduce

● Scan

● Метод конвеерного параллелизма

● Метод коллективного решения

● И т.д.

Метод сдваивания он же reduce(на примере суммы ряда)

Scan(на примере префиксной суммы ряда)

Балансировка вычислительной мощности

● Статическая балансировка:

- метод сдваивания

- конвейерный параллелизм

● Динамическая балансировка:

- коллективное решение

Вопросы?

Полезные ссылки

● Воеводин. В.В. Параллельные вычисления;

● Курс на лекториуме: «Параллельное программирование». http://www.lektorium.tv/lecture/?id=12822

● Курс на лекториуме: «Эффективные параллельные алгоритмы» http://www.lektorium.tv/course/?id=22913

Recommended