Проблемы параллельной обработки
Глобальные концепции параллельного программирования:
1) параллелизм данных(data parallel);
2) параллелизм задач(message passing).
Спектр решаемых проблем:
1) равномерная загрузка процессоров;
2) скорость обмена информацией между процессорами.
Типовые трудности:
1) неумение программистов думать параллельно;
2) взаимные блокировки;
3) гонки.
Схема параллельного решения задач
Ускорение, эффективность, масштабируемость.
1) Ускорение - отношение времени выполнения лучшего последовательного алгоритмам к времени выполнения параллельного алгоритма.
2) Эффективность - показывает, во сколько раз больше время выполнения задания одним процессором, чем время выполнения того же задания многопроцессорной системой , умноженное на число процессоров.
3) Масштабируемость - при росте числа процессоров алгоритм обеспечивает увеличение ускорения при сохранении постоянного уровня эффективности использования процессоров.
Забываем о существовании:
1) Теоретических ограничений:
- потери производительности для организации параллелизма-
согласно гипотезе Минского (Minsky), ускорение, достигаемое при использовании параллельной системы, пропорционально двоичному логарифму от числа процессоров (т.е. при 1000 процессорах возможное ускорение оказывается равным 10);
- cуществование последовательных вычислений (законом Амдаля) при наличии всего 10% последовательных команд в выполняемых вычислениях, эффект использования параллелизма не может превышать 10-кратного ускорения обработки данных.
2) Аппаратных ограничениях.
3) Программных ограничениях.
4) Люди все же не умеют думать параллельно.
Гонки, блокировки, утечки памяти…
1) Состояние гонки (race condition)— ошибка проектирования многопоточной системы, при которой работа системы зависит от порядка выполняются фрагментов кода.
2) Взаимная блокировка (deadlock) — ситуация в многозадачной системе, при которой несколько потоков находятся в состоянии ожидания ресурсов, занятых друг другом.
3) Утечка памяти (memory leak) — процесс неконтролируемого уменьшения объёма свободной оперативной памяти, связанный с ошибками в ПО.
4) Глобальное потепление — все ядра процессора заняты бесполезной работой (обработка исключений во всех потоках, синхронизаций потоков, и т.п.).
Шаблоны параллельного программирования
1) Примитивы синхронизации.
- Monitor
- Interlock
- Mutex
- semaphore
- Barrier
- ReaderWriterLock
- LazyInitializer
2) Active object.
3) Double checked locking.
4) Sheduler.
5) Thread pool.
Архитектурные шаблоны